From 1214747c34050bf64fe6ccbd90e15108255c094a Mon Sep 17 00:00:00 2001 From: kobywchan Date: Sun, 23 Jul 2017 09:23:50 -0700 Subject: [PATCH 001/527] Windows implemented (#236) * Windows implemented Full functionality of Plugin for UWP including connect, scan, get services/descriptors/characteristics, read and write characteristics/descriptors, event handlers, accessor methods, etc. Known Issues for UWP: -Disconnect cannot be implemented with UWP API -GetSystemConnectedOrPairedDevices cannot be implemented without being async -GetInitialState only returns connected or disconnected (also due to UWP API limitations) -RequestMtu is not supported in windows -Rssi cannot be updated since Rssi information is only recieved in nativeadvertisements -UpdateConnectionInterval is not supported in UWP -IsPrimary returns true as default since the method to get parent services is now obselete in the UWP API * Fixed Name Space Changed Namespace in Plugin.BLE.UWP.csproj from Plugin.BLE.UWP to Plugin.BLE * Fixed write without response to actually write without response --- Source/BLE.sln | 52 +++- Source/Plugin.BLE.UWP/Adapter.cs | 177 +++++++++++++ Source/Plugin.BLE.UWP/BleImplementation.cs | 38 +++ Source/Plugin.BLE.UWP/Characteristic.cs | 243 ++++++++++++++++++ Source/Plugin.BLE.UWP/CrossBluetoothLE.cs | 45 ++++ Source/Plugin.BLE.UWP/DefaultTrace.cs | 14 + Source/Plugin.BLE.UWP/Descriptor.cs | 68 +++++ Source/Plugin.BLE.UWP/Device.cs | 82 ++++++ Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj | 147 +++++++++++ .../Plugin.BLE.UWP/Properties/AssemblyInfo.cs | 29 +++ .../Properties/Plugin.BLE.UWP.rd.xml | 33 +++ Source/Plugin.BLE.UWP/Service.cs | 38 +++ 12 files changed, 965 insertions(+), 1 deletion(-) create mode 100644 Source/Plugin.BLE.UWP/Adapter.cs create mode 100644 Source/Plugin.BLE.UWP/BleImplementation.cs create mode 100644 Source/Plugin.BLE.UWP/Characteristic.cs create mode 100644 Source/Plugin.BLE.UWP/CrossBluetoothLE.cs create mode 100644 Source/Plugin.BLE.UWP/DefaultTrace.cs create mode 100644 Source/Plugin.BLE.UWP/Descriptor.cs create mode 100644 Source/Plugin.BLE.UWP/Device.cs create mode 100644 Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj create mode 100644 Source/Plugin.BLE.UWP/Properties/AssemblyInfo.cs create mode 100644 Source/Plugin.BLE.UWP/Properties/Plugin.BLE.UWP.rd.xml create mode 100644 Source/Plugin.BLE.UWP/Service.cs diff --git a/Source/BLE.sln b/Source/BLE.sln index bc72ee34..a0c5dd0e 100644 --- a/Source/BLE.sln +++ b/Source/BLE.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26228.4 +VisualStudioVersion = 15.0.26430.13 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.BLE", "MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj", "{83F1DFFB-A653-45DD-BE81-C02374C6DB07}" ProjectSection(ProjectDependencies) = postProject @@ -59,6 +59,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".build", ".build", "{BF3073 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Plugin.BLE.Tests", "Plugin.BLE.Tests\Plugin.BLE.Tests.csproj", "{F8374603-78C8-4CB8-A622-EC9226424474}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Plugin.BLE.UWP", "Plugin.BLE.UWP\Plugin.BLE.UWP.csproj", "{CCD85512-A2D7-4076-B31D-7A24829058AF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -617,6 +619,54 @@ Global {F8374603-78C8-4CB8-A622-EC9226424474}.Release|x64.Build.0 = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Release|x86.ActiveCfg = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Release|x86.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|ARM.Build.0 = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|x64.Build.0 = Release|x64 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|x86.Build.0 = Release|x86 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|Any CPU.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|ARM.ActiveCfg = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|ARM.Build.0 = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|iPhone.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|x64.ActiveCfg = Release|x64 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|x64.Build.0 = Release|x64 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|x86.ActiveCfg = Release|x86 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|x86.Build.0 = Release|x86 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|ARM.ActiveCfg = Debug|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|ARM.Build.0 = Debug|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|iPhone.Build.0 = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|x64.ActiveCfg = Debug|x64 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|x64.Build.0 = Debug|x64 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|x86.ActiveCfg = Debug|x86 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|x86.Build.0 = Debug|x86 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|Any CPU.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|ARM.ActiveCfg = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|ARM.Build.0 = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|iPhone.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|iPhone.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|x64.ActiveCfg = Release|x64 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|x64.Build.0 = Release|x64 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|x86.ActiveCfg = Release|x86 + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/Plugin.BLE.UWP/Adapter.cs b/Source/Plugin.BLE.UWP/Adapter.cs new file mode 100644 index 00000000..06c5e738 --- /dev/null +++ b/Source/Plugin.BLE.UWP/Adapter.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Windows.Devices.Bluetooth; +using Windows.Devices.Bluetooth.Advertisement; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; +using System.Threading; +using Microsoft.Toolkit.Uwp; +using System.Runtime.InteropServices.WindowsRuntime; + +namespace Plugin.BLE.UWP +{ + public class Adapter : AdapterBase + { + private BluetoothLEHelper _bluetoothHelper; + private BluetoothLEAdvertisementWatcher _BleWatcher; + /// + /// Needed to check for scanned devices so that duplicated don't get + /// added due to race conditions + /// + private IList _prevScannedDevices; + /// + /// Used to store all connected devices + /// + public IDictionary ConnectedDeviceRegistry { get; } + public override IList ConnectedDevices => ConnectedDeviceRegistry.Values.ToList(); + + + public Adapter (BluetoothLEHelper bluetoothHelper) + { + _bluetoothHelper = bluetoothHelper; + ConnectedDeviceRegistry = new Dictionary(); + } + + protected override Task StartScanningForDevicesNativeAsync(Guid[] serviceUuids, bool allowDuplicatesKey, CancellationToken scanCancellationToken) + { + var hasFilter = serviceUuids?.Any() ?? false; + DiscoveredDevices.Clear(); + _BleWatcher = new BluetoothLEAdvertisementWatcher(); + _BleWatcher.ScanningMode = BluetoothLEScanningMode.Active; + _prevScannedDevices = new List(); + Trace.Message("Starting a scan for devices."); + if (hasFilter) + { + //adds filter to native scanner if serviceUuids are specified + foreach (var uuid in serviceUuids) + { + _BleWatcher.AdvertisementFilter.Advertisement.ServiceUuids.Add(uuid); + } + Trace.Message($"ScanFilters: {string.Join(", ", serviceUuids)}"); + } + //don't allow duplicates except for testing, results in multiple versions + //of the same device being found + if (allowDuplicatesKey) + { + _BleWatcher.Received += DeviceFoundAsyncDuplicate; + } + else + { + _BleWatcher.Received += DeviceFoundAsync; + } + _BleWatcher.Start(); + return Task.FromResult(true); + } + + protected override void StopScanNative() + { + Trace.Message("Stopping the scan for devices"); + _BleWatcher.Stop(); + _BleWatcher = null; + } + + protected async override Task ConnectToDeviceNativeAsync(IDevice device, ConnectParameters connectParameters, CancellationToken cancellationToken) + { + var uwpDevice = (Device)device; + Trace.Message($"Connecting to device with ID: {device.Id.ToString()}"); + await ((ObservableBluetoothLEDevice)uwpDevice.NativeDevice).ConnectAsync(); + if (!ConnectedDeviceRegistry.ContainsKey(uwpDevice.Id.ToString())) + { + ConnectedDeviceRegistry.Add(uwpDevice.Id.ToString(), device); + } + await Task.Delay(100); //wait for windows to add services to the device + HandleConnectedDevice(device); + } + + protected override void DisconnectDeviceNative(IDevice device) + { + //windows doesn't support disconnecting, so currently just disposes of device + Trace.Message($"Disconnected from device with ID: {device.Id.ToString()}"); + ConnectedDeviceRegistry.Remove(device.Id.ToString()); + HandleDisconnectedDevice(true, device); + } + + public async override Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters, CancellationToken cancellationToken) + { + //convert GUID to string and take last 12 characters as MAC address + var guidString = deviceGuid.ToString("N").Substring(20); + ulong bluetoothAddr = Convert.ToUInt64(guidString, 16); + var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bluetoothAddr); + var currDevice = new Device(this, nativeDevice, 0, guidString); + await ConnectToDeviceAsync(currDevice); + return currDevice; + } + + public override List GetSystemConnectedOrPairedDevices(Guid[] services = null) + { + //currently no way to retrieve paired and connected devices on windows without using an + //async method. + Trace.Message("Returning devices connected by this app only"); + return (List) ConnectedDevices; + } + + /// + /// Parses a given advertisement for various stored properties + /// Currently only parses the manufacturer specific data + /// + /// The advertisement to parse + /// List of generic advertisement records + public static List ParseAdvertisementData(BluetoothLEAdvertisement adv) + { + var advList = adv.DataSections; + var records = new List(); + foreach (var data in advList) + { + var type = data.DataType; + if (type == BluetoothLEAdvertisementDataTypes.ManufacturerSpecificData) + { + records.Add(new AdvertisementRecord(AdvertisementRecordType.ManufacturerSpecificData, data.Data.ToArray())); + } + //TODO: add more advertisement record types to parse + } + return records; + } + + /// + /// Handler for devices found when duplicates are not allowed + /// + /// The bluetooth advertisement watcher currently being used + /// The advertisement recieved by the watcher + private async void DeviceFoundAsync(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs btAdv) + { + //check if the device was already found before calling generic handler + //ensures that no device is mistakenly added twice + if (!_prevScannedDevices.Contains(btAdv.BluetoothAddress)) + { + _prevScannedDevices.Add(btAdv.BluetoothAddress); + BluetoothLEDevice currDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); + if (currDevice != null) //make sure advertisement bluetooth address actually returns a device + { + var device = new Device(this, currDevice, btAdv.RawSignalStrengthInDBm, btAdv.BluetoothAddress.ToString(), ParseAdvertisementData(btAdv.Advertisement)); + Trace.Message("DiscoveredPeripheral: {0} Id: {1}", device.Name, device.Id); + this.HandleDiscoveredDevice(device); + } + return; + } + } + + /// + /// Handler for devices found when duplicates are allowed + /// + /// The bluetooth advertisement watcher currently being used + /// The advertisement recieved by the watcher + private async void DeviceFoundAsyncDuplicate(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs btAdv) + { + BluetoothLEDevice currDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); + if (currDevice != null) + { + var device = new Device(this, currDevice, btAdv.RawSignalStrengthInDBm, btAdv.BluetoothAddress.ToString(), ParseAdvertisementData(btAdv.Advertisement)); + Trace.Message("DiscoveredPeripheral: {0} Id: {1}", device.Name, device.Id); + this.HandleDiscoveredDevice(device); + } + return; + } + } +} \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/BleImplementation.cs b/Source/Plugin.BLE.UWP/BleImplementation.cs new file mode 100644 index 00000000..f6028b80 --- /dev/null +++ b/Source/Plugin.BLE.UWP/BleImplementation.cs @@ -0,0 +1,38 @@ +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.UWP; +using Microsoft.Toolkit.Uwp; + +namespace Plugin.BLE +{ + public class BleImplementation : BleImplementationBase + { + private BluetoothLEHelper _bluetoothHelper; + + protected override IAdapter CreateNativeAdapter() + { + return new Adapter(_bluetoothHelper); + } + + protected override BluetoothState GetInitialStateNative() + { + //The only way to get the state of bluetooth through windows is by + //getting the radios for a device. This operation is asynchronous + //and thus cannot be called in this method. Thus, we are just + //returning "On" as long as the BluetoothLEHelper is initialized + if (_bluetoothHelper == null) + { + return BluetoothState.Unavailable; + } + return BluetoothState.On; + } + + protected override void InitializeNative() + { + //create local helper using the app context + var localHelper = BluetoothLEHelper.Context; + _bluetoothHelper = localHelper; + } + } + +} \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/Characteristic.cs b/Source/Plugin.BLE.UWP/Characteristic.cs new file mode 100644 index 00000000..274a0133 --- /dev/null +++ b/Source/Plugin.BLE.UWP/Characteristic.cs @@ -0,0 +1,243 @@ +using System; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Windows.Devices.Bluetooth.GenericAttributeProfile; +using Windows.Security.Cryptography; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.Abstractions.EventArgs; + +namespace Plugin.BLE.UWP +{ + public class Characteristic : CharacteristicBase + { + private readonly GattCharacteristic _nativeCharacteristic; + /// + /// Value of the characteristic to be stored locally after + /// update notification or read + /// + private byte[] _value; + public override Guid Id => _nativeCharacteristic.Uuid; + public override string Uuid => _nativeCharacteristic.Uuid.ToString(); + public override CharacteristicPropertyType Properties => (CharacteristicPropertyType)(int)_nativeCharacteristic.CharacteristicProperties; + + public override event EventHandler ValueUpdated; + public override byte[] Value + { + get + { + //return empty array if value is equal to null + if (_value == null) + { + return new byte[0]; + } + return _value; + } + } + + + public Characteristic(GattCharacteristic nativeCharacteristic, IService service) : base(service) + { + _nativeCharacteristic = nativeCharacteristic; + } + + protected async override Task> GetDescriptorsNativeAsync() + { + var nativeDescriptors = (await _nativeCharacteristic.GetDescriptorsAsync()).Descriptors; + var descriptorList = new List(); + //convert to generic descriptors + foreach (var nativeDescriptor in nativeDescriptors) + { + var descriptor = new Descriptor(nativeDescriptor, this); + descriptorList.Add(descriptor); + } + return descriptorList; + } + + protected async override Task ReadNativeAsync() + { + var readResult = (await _nativeCharacteristic.ReadValueAsync()).Value.ToArray(); + _value = readResult; + return readResult; + } + + protected async override Task StartUpdatesNativeAsync() + { + _nativeCharacteristic.ValueChanged += OnCharacteristicValueChanged; + var result = await _nativeCharacteristic.WriteClientCharacteristicConfigurationDescriptorWithResultAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify); + //output trace message with status of update + if (result.Status == GattCommunicationStatus.Success) + { + Trace.Message("Start Updates Successful"); + } + else if (result.Status == GattCommunicationStatus.AccessDenied) + { + Trace.Message("Incorrect permissions to start updates"); + } + else if (result.Status == GattCommunicationStatus.ProtocolError && result.ProtocolError != null) + { + Trace.Message("Start updates returned with error: {0}", parseError(result.ProtocolError)); + } + else if (result.Status == GattCommunicationStatus.ProtocolError) + { + Trace.Message("Start updates returned with unknown error"); + } + else if (result.Status == GattCommunicationStatus.Unreachable) + { + Trace.Message("Characteristic properties are unreachable"); + } + } + + protected async override Task StopUpdatesNativeAsync() + { + _nativeCharacteristic.ValueChanged -= OnCharacteristicValueChanged; + var result = await _nativeCharacteristic.WriteClientCharacteristicConfigurationDescriptorWithResultAsync(GattClientCharacteristicConfigurationDescriptorValue.None); + if (result.Status == GattCommunicationStatus.Success) + { + Trace.Message("Stop Updates Successful"); + } + else if (result.Status == GattCommunicationStatus.AccessDenied) + { + Trace.Message("Incorrect permissions to stop updates"); + } + else if (result.Status == GattCommunicationStatus.ProtocolError && result.ProtocolError != null) + { + Trace.Message("Stop updates returned with error: {0}", parseError(result.ProtocolError)); + } + else if (result.Status == GattCommunicationStatus.ProtocolError) + { + Trace.Message("Stop updates returned with unknown error"); + } + else if (result.Status == GattCommunicationStatus.Unreachable) + { + Trace.Message("Characteristic properties are unreachable"); + } + } + + protected async override Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType) + { + //print errors if error and write with response + if(writeType == CharacteristicWriteType.WithResponse) + { + var result = await _nativeCharacteristic.WriteValueWithResultAsync(CryptographicBuffer.CreateFromByteArray(data)); + if (result.Status == GattCommunicationStatus.Success) { + Trace.Message("Write successful"); + return true; + } + else if (result.Status == GattCommunicationStatus.AccessDenied) + { + Trace.Message("Incorrect permissions to stop updates"); + } + else if (result.Status == GattCommunicationStatus.ProtocolError && result.ProtocolError != null) + { + Trace.Message("Write Characteristic returned with error: {0}", parseError(result.ProtocolError)); + } + else if (result.Status == GattCommunicationStatus.ProtocolError) + { + Trace.Message("Write Characteristic returned with unknown error"); + } + else if (result.Status == GattCommunicationStatus.Unreachable) + { + Trace.Message("Characteristic write is unreachable"); + } + return false; + } + var status = await _nativeCharacteristic.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data), GattWriteOption.WriteWithoutResponse); + if (status == GattCommunicationStatus.Success) + { + return true; + } + return false; + } + + /// + /// Handler for when the characteristic value is changed. Updates the + /// stored value + /// + private void OnCharacteristicValueChanged(object sender, GattValueChangedEventArgs e) + { + _value = e.CharacteristicValue.ToArray(); //add value to array + ValueUpdated?.Invoke(this, new CharacteristicUpdatedEventArgs(this)); + } + + /// + /// Used to parse errors returned by UWP methods in byte form + /// + /// The byte describing the type of error + /// Returns a string with the name of an error byte + private string parseError(byte? err) + { + if (err == GattProtocolError.AttributeNotFound) + { + return "Attribute Not Found"; + } + if (err == GattProtocolError.AttributeNotLong) + { + return "Attribute Not Long"; + } + if (err == GattProtocolError.InsufficientAuthentication) + { + return "Insufficient Authentication"; + } + if (err == GattProtocolError.InsufficientAuthorization) + { + return "Insufficient Authorization"; + } + if (err == GattProtocolError.InsufficientEncryption) + { + return "Insufficient Encryption"; + } + if (err == GattProtocolError.InsufficientEncryptionKeySize) + { + return "Insufficient Encryption Key Size"; + } + if (err == GattProtocolError.InsufficientResources) + { + return "Insufficient Resource"; + } + if (err == GattProtocolError.InvalidAttributeValueLength) + { + return "Invalid Attribute Value Length"; + } + if (err == GattProtocolError.InvalidHandle) + { + return "Invalid Handle"; + } + if (err == GattProtocolError.InvalidOffset) + { + return "Invalid Offset"; + } + if (err == GattProtocolError.InvalidPdu) + { + return "Invalid PDU"; + } + if (err == GattProtocolError.PrepareQueueFull) + { + return "Prepare Queue Full"; + } + if (err == GattProtocolError.ReadNotPermitted) + { + return "Read Not Permitted"; + } + if (err == GattProtocolError.RequestNotSupported) + { + return "Request Not Supported"; + } + if (err == GattProtocolError.UnlikelyError) + { + return "Unlikely Error"; + } + if (err == GattProtocolError.UnsupportedGroupType) + { + return "Unsupported Group Type"; + } + if (err == GattProtocolError.WriteNotPermitted) + { + return "Write Not Permitted"; + } + return null; + } + } +} diff --git a/Source/Plugin.BLE.UWP/CrossBluetoothLE.cs b/Source/Plugin.BLE.UWP/CrossBluetoothLE.cs new file mode 100644 index 00000000..a56fda6c --- /dev/null +++ b/Source/Plugin.BLE.UWP/CrossBluetoothLE.cs @@ -0,0 +1,45 @@ +using System; +using Plugin.BLE.Abstractions.Contracts; + +namespace Plugin.BLE +{ + /// + /// Cross platform bluetooth LE implemenation. + /// + public static class CrossBluetoothLE + { + static readonly Lazy Implementation = new Lazy(CreateImplementation, System.Threading.LazyThreadSafetyMode.PublicationOnly); + + /// + /// Current bluetooth LE implementation. + /// + public static IBluetoothLE Current + { + get + { + var ret = Implementation.Value; + if (ret == null) + { + throw NotImplementedInReferenceAssembly(); + } + return ret; + } + } + + static IBluetoothLE CreateImplementation() + { +#if PORTABLE + return null; +#else + var implementation = new BleImplementation(); + implementation.Initialize(); + return implementation; +#endif + } + + internal static Exception NotImplementedInReferenceAssembly() + { + return new NotImplementedException("This functionality is not implemented in the portable version of this assembly. You should reference the NuGet package from your main application project in order to reference the platform-specific implementation."); + } + } +} \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/DefaultTrace.cs b/Source/Plugin.BLE.UWP/DefaultTrace.cs new file mode 100644 index 00000000..2c3b2b86 --- /dev/null +++ b/Source/Plugin.BLE.UWP/DefaultTrace.cs @@ -0,0 +1,14 @@ +using System.Diagnostics; +using Plugin.BLE.Abstractions; + +namespace Plugin.BLE +{ + static class DefaultTrace + { + static DefaultTrace() + { + //uses WriteLine for trace + Trace.TraceImplementation = (s, o) => { Debug.WriteLine(s, o); } ; + } + } +} \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/Descriptor.cs b/Source/Plugin.BLE.UWP/Descriptor.cs new file mode 100644 index 00000000..cd4e5e79 --- /dev/null +++ b/Source/Plugin.BLE.UWP/Descriptor.cs @@ -0,0 +1,68 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Windows.Devices.Bluetooth.GenericAttributeProfile; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Security.Cryptography; + +namespace Plugin.BLE.UWP +{ + public class Descriptor : DescriptorBase + { + private readonly GattDescriptor _nativeDescriptor; + /// + /// The locally stored value of a descriptor updated after a + /// notification or a read + /// + private byte[] _value; + public override Guid Id => _nativeDescriptor.Uuid; + public override byte[] Value + { + get + { + if (_value == null) + { + return new byte[0]; + } + return _value; + } + } + + public Descriptor(GattDescriptor nativeDescriptor, ICharacteristic characteristic) : base(characteristic) + { + _nativeDescriptor = nativeDescriptor; + } + + protected async override Task ReadNativeAsync() + { + var readResult = await _nativeDescriptor.ReadValueAsync(); + if (readResult.Status == GattCommunicationStatus.Success) + { + Trace.Message("Descriptor Read Successfully"); + } + else + { + Trace.Message("Descriptor Read Failed"); + } + _value = readResult.Value.ToArray(); + return _value; + } + + protected async override Task WriteNativeAsync(byte[] data) + { + //method contains no option for writing with response, so always write + //without response + var writeResult = await _nativeDescriptor.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data)); + if (writeResult == GattCommunicationStatus.Success) + { + Trace.Message("Descriptor Write Successfully"); + } + else + { + Trace.Message("Descriptor Write Failed"); + } + } + } +} diff --git a/Source/Plugin.BLE.UWP/Device.cs b/Source/Plugin.BLE.UWP/Device.cs new file mode 100644 index 00000000..1d9243f9 --- /dev/null +++ b/Source/Plugin.BLE.UWP/Device.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Windows.Devices.Bluetooth; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; +using Microsoft.Toolkit.Uwp; + +namespace Plugin.BLE.UWP +{ + class Device : DeviceBase + { + public ObservableBluetoothLEDevice _nativeDevice { get; private set; } + public override object NativeDevice => _nativeDevice; + + public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, string address, List advertisementRecords = null) : base(adapter) + { + _nativeDevice = new ObservableBluetoothLEDevice(nativeDevice.DeviceInformation); + Rssi = rssi; + Id = ParseDeviceId(nativeDevice.BluetoothAddress.ToString("x")); + Name = nativeDevice.Name; + AdvertisementRecords = advertisementRecords; + } + + /// + /// Method to parse the bluetooth address as a hex string to a UUID + /// + /// The bluetooth address as a hex string without colons + /// a GUID that is padded left with 0 and the last 6 bytes are the bluetooth address + private Guid ParseDeviceId(string macWithoutColons) + { + macWithoutColons = macWithoutColons.PadLeft(12, '0'); //ensure valid length + var deviceGuid = new byte[16]; + Array.Clear(deviceGuid, 0, 16); + var macBytes = Enumerable.Range(0, macWithoutColons.Length) + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(macWithoutColons.Substring(x, 2), 16)) + .ToArray(); + macBytes.CopyTo(deviceGuid, 10); + return new Guid(deviceGuid); + } + + public override Task UpdateRssiAsync() + { + //No current method to update the Rssi of a device + //In future implementations, maybe listen for device's advertisements + throw new NotImplementedException(); + } + + protected async override Task> GetServicesNativeAsync() + { + var GattServiceList = (await _nativeDevice.BluetoothLEDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached)).Services; + var ServiceList = new List(); + foreach (var nativeService in GattServiceList) + { + var service = new Service(nativeService, this); + ServiceList.Add(service); + } + return ServiceList; + } + + protected override DeviceState GetState() + { + //windows only supports retrieval of two states currently + if (_nativeDevice.IsConnected) return DeviceState.Connected; + else return DeviceState.Disconnected; + } + + protected override Task RequestMtuNativeAsync(int requestValue) + { + Trace.Message("Request MTU not supported in UWP"); + return Task.FromResult(-1); + } + + protected override bool UpdateConnectionIntervalNative(ConnectionInterval interval) + { + Trace.Message("Update Connection Interval not supported in UWP"); + throw new NotImplementedException(); + } + } +} diff --git a/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj b/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj new file mode 100644 index 00000000..d1a36db4 --- /dev/null +++ b/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj @@ -0,0 +1,147 @@ + + + + + Debug + AnyCPU + {CCD85512-A2D7-4076-B31D-7A24829058AF} + Library + Properties + Plugin.BLE + Plugin.BLE + en-US + UAP + 10.0.15063.0 + 10.0.10586.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + prompt + 4 + + + x86 + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + + + x86 + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + + + ARM + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + + + ARM + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + + + x64 + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + + + x64 + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + + + PackageReference + + + + + + + + + + + + + Designer + + + + + 5.3.3 + + + 1.5.0 + + + + + {f479f7db-cfa6-49e5-aa41-4fe6a4da39b0} + Plugin.BLE.Abstractions + + + + 14.0 + + + + \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/Properties/AssemblyInfo.cs b/Source/Plugin.BLE.UWP/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ff4c8d82 --- /dev/null +++ b/Source/Plugin.BLE.UWP/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Plugin.BLE.UWP")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Plugin.BLE.UWP")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/Properties/Plugin.BLE.UWP.rd.xml b/Source/Plugin.BLE.UWP/Properties/Plugin.BLE.UWP.rd.xml new file mode 100644 index 00000000..ce402efb --- /dev/null +++ b/Source/Plugin.BLE.UWP/Properties/Plugin.BLE.UWP.rd.xml @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/Source/Plugin.BLE.UWP/Service.cs b/Source/Plugin.BLE.UWP/Service.cs new file mode 100644 index 00000000..1f6b4c25 --- /dev/null +++ b/Source/Plugin.BLE.UWP/Service.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Windows.Devices.Bluetooth.GenericAttributeProfile; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; +using Microsoft.Toolkit.Uwp; + +namespace Plugin.BLE.UWP +{ + class Service : ServiceBase + { + private readonly GattDeviceService _nativeService; + private readonly ObservableBluetoothLEDevice _nativeDevice; + public override Guid Id => _nativeService.Uuid; + //method to get parent devices to check if primary is obselete + //return true as a placeholder + public override bool IsPrimary => true; + + public Service(GattDeviceService service, IDevice device) : base(device) + { + _nativeDevice = (ObservableBluetoothLEDevice) device.NativeDevice; + _nativeService = service; + } + + protected async override Task> GetCharacteristicsNativeAsync() + { + var nativeChars = (await _nativeService.GetCharacteristicsAsync()).Characteristics; + var charList = new List(); + foreach (var nativeChar in nativeChars) + { + var characteristic = new Characteristic(nativeChar, this); + charList.Add(characteristic); + } + return charList; + } + } +} From 7184c035a8e4c491b3fcd94d9381f8951d37d968 Mon Sep 17 00:00:00 2001 From: xabre Date: Sun, 23 Jul 2017 20:30:14 +0200 Subject: [PATCH 002/527] Added UWP sample app --- Source/BLE.Client.UWP/App.xaml | 8 + Source/BLE.Client.UWP/App.xaml.cs | 103 ++++++++++ .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1430 bytes .../Assets/SplashScreen.scale-200.png | Bin 0 -> 7700 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 2937 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1647 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 1255 bytes Source/BLE.Client.UWP/Assets/StoreLogo.png | Bin 0 -> 1451 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 3204 bytes Source/BLE.Client.UWP/BLE.Client.UWP.csproj | 179 ++++++++++++++++++ Source/BLE.Client.UWP/DebugTrace.cs | 31 +++ Source/BLE.Client.UWP/MainPage.xaml | 14 ++ Source/BLE.Client.UWP/MainPage.xaml.cs | 29 +++ Source/BLE.Client.UWP/Package.appxmanifest | 49 +++++ .../BLE.Client.UWP/Properties/AssemblyInfo.cs | 29 +++ .../BLE.Client.UWP/Properties/Default.rd.xml | 31 +++ Source/BLE.Client.UWP/Setup.cs | 54 ++++++ .../BLE.Client/Pages/DeviceListPage.xaml | 1 + Source/BLE.sln | 65 ++++++- 19 files changed, 592 insertions(+), 1 deletion(-) create mode 100644 Source/BLE.Client.UWP/App.xaml create mode 100644 Source/BLE.Client.UWP/App.xaml.cs create mode 100644 Source/BLE.Client.UWP/Assets/LockScreenLogo.scale-200.png create mode 100644 Source/BLE.Client.UWP/Assets/SplashScreen.scale-200.png create mode 100644 Source/BLE.Client.UWP/Assets/Square150x150Logo.scale-200.png create mode 100644 Source/BLE.Client.UWP/Assets/Square44x44Logo.scale-200.png create mode 100644 Source/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 Source/BLE.Client.UWP/Assets/StoreLogo.png create mode 100644 Source/BLE.Client.UWP/Assets/Wide310x150Logo.scale-200.png create mode 100644 Source/BLE.Client.UWP/BLE.Client.UWP.csproj create mode 100644 Source/BLE.Client.UWP/DebugTrace.cs create mode 100644 Source/BLE.Client.UWP/MainPage.xaml create mode 100644 Source/BLE.Client.UWP/MainPage.xaml.cs create mode 100644 Source/BLE.Client.UWP/Package.appxmanifest create mode 100644 Source/BLE.Client.UWP/Properties/AssemblyInfo.cs create mode 100644 Source/BLE.Client.UWP/Properties/Default.rd.xml create mode 100644 Source/BLE.Client.UWP/Setup.cs diff --git a/Source/BLE.Client.UWP/App.xaml b/Source/BLE.Client.UWP/App.xaml new file mode 100644 index 00000000..27e58fbb --- /dev/null +++ b/Source/BLE.Client.UWP/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/Source/BLE.Client.UWP/App.xaml.cs b/Source/BLE.Client.UWP/App.xaml.cs new file mode 100644 index 00000000..cf6e059d --- /dev/null +++ b/Source/BLE.Client.UWP/App.xaml.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +namespace BLE.Client.UWP +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + sealed partial class App : Application + { + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + Frame rootFrame = Window.Current.Content as Frame; + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) + { + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + var setup = new Setup(rootFrame, e); + setup.Initialize(); + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: Load state from previously suspended application + } + + // Place the frame in the current Window + Window.Current.Content = rootFrame; + } + + if (e.PrelaunchActivated == false) + { + if (rootFrame.Content == null) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // Ensure the current window is active + Window.Current.Activate(); + } + } + + /// + /// Invoked when Navigation to a certain page fails + /// + /// The Frame which failed navigation + /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// + /// The source of the suspend request. + /// Details about the suspend request. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Save application state and stop any background activity + deferral.Complete(); + } + } +} diff --git a/Source/BLE.Client.UWP/Assets/LockScreenLogo.scale-200.png b/Source/BLE.Client.UWP/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..735f57adb5dfc01886d137b4e493d7e97cf13af3 GIT binary patch literal 1430 zcmaJ>TTC2P7~aKltDttVHYH6u8Io4i*}3fO&d$gd*bA_<3j~&e7%8(eXJLfhS!M@! zKrliY>>6yT4+Kr95$!DoD(Qn-5TP|{V_KS`k~E6(LGS@#`v$hQo&^^BKsw3HIsZBT z_y6C2n`lK@apunKojRQ^(_P}Mgewt$(^BBKCTZ;*xa?J3wQ7~@S0lUvbcLeq1Bg4o zH-bvQi|wt~L7q$~a-gDFP!{&TQfc3fX*6=uHv* zT&1&U(-)L%Xp^djI2?~eBF2cxC@YOP$+9d?P&h?lPy-9M2UT9fg5jKm1t$m#iWE{M zIf%q9@;fyT?0UP>tcw-bLkz;s2LlKl2qeP0w zECS7Ate+Awk|KQ+DOk;fl}Xsy4o^CY=pwq%QAAKKl628_yNPsK>?A>%D8fQG6IgdJ ztnxttBz#NI_a@fk7SU`WtrpsfZsNs9^0(2a z@C3#YO3>k~w7?2hipBf{#b6`}Xw1hlG$yi?;1dDs7k~xDAw@jiI*+tc;t2Lflg&bM)0!Y;0_@=w%`LW^8DsYpS#-bLOklX9r?Ei}TScw|4DbpW%+7 zFgAI)f51s}{y-eWb|vrU-Ya!GuYKP)J7z#*V_k^Xo>4!1Yqj*m)x&0L^tg3GJbVAJ zJ-Pl$R=NAabouV=^z_t;^K*0AvFs!vYU>_<|I^#c?>>CR<(T?=%{;U=aI*SbZADLH z&(f2wz_Y0??Tf|g;?|1Znw6}6U43Q#qNRwv1vp9uFn1)V#*4p&%$mP9x&15^OaBiDS(XppT|z^>;B{PLVEbS3IFYV yGvCsSX*m literal 0 HcmV?d00001 diff --git a/Source/BLE.Client.UWP/Assets/SplashScreen.scale-200.png b/Source/BLE.Client.UWP/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..023e7f1feda78d5100569825acedfd213a0d84e9 GIT binary patch literal 7700 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client.UWP/Assets/Square150x150Logo.scale-200.png b/Source/BLE.Client.UWP/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..af49fec1a5484db1d52a7f9b5ec90a27c7030186 GIT binary patch literal 2937 zcma)84OCO-8BSud5)jwMLRVKgX(S?$n?Ld|vrsm<$CF7)&zTbyy1FE5bU`Q17MRv`9ue$;R(@8kR;#vJ*IM0>cJIAOte!d7oRgdH zd%ySjdB6L9=gX^A6)VzH7p2l@v~3zJAMw|DFy#^)F@@F*`mqUn=Il>l)8_+ab;nOW{%+iPx z+s{Eu|&pIs)Z7{La9~?xKfyl z#43?gjEL15d4WbOZo#SiP%>DB^+BcnJ=7dHEe;r#G=tuw|ka z%q@}##Uh7;tc%L_64m(kHtw74ty%BJMb)_1)#S0j`)F8_1jF7vScpsnH=0V19bO8y zR`0SjIdCUo&=>JwMQF8KHA<{ODHTiQh}0^@5QRmCA?gOH6_H3K^-_sNB^RrdNuK-R zOO*vOrKCVvDwgUck`kF(E7j{I#iiN;b*ZdCt4m@HPA`EuEqGGf4%!K<;(=I=&Vyrw z%TwcWtxa}8mCZ%Cyf&ActJ6_$ox5z6-D!0-dvnRx6t7y3d+h6QYpKWO;8OdnvERo7 zuEf>ih5`wqY)~o@OeVt-wM?Q!>QzdGRj!bz6fzYrfw$hZfAKzr2-M+D+R>}~oT574c;_3zquHcElqKIsryILt3g8n3jcMb+j?i?-L3FpZJ z2WRVBRdDPc+G5aaYg#5hpE+6nQ|(VSoxT3|biF;BUq#==-27Xi=gihDPYP$7?=9cP zYKE$jeQ|3~_L0VG-(F~2ZPyD0=k{J4Q~h(t__{-mz_w8{JDY9{`1ouzz!Vr5!ECdE z6U~O1k8c}24V7~zzXWTV-Pe4)y}wQJS&q%H5`Fo_f_JvIU489aCX$;P`u#!I-=^4ijC2{&9!O&h>mi?9oYD=GC#%)6{GzN6nQYw+Fal50!#x^asjBBR50i`+mho*ttoqV)ubM2KD9S~k7+FR4>{29?6 z{!l6kDdyTN0YJ9LgkPWeXm|gyi@zM3?0@{&pXT12w|78&W-q!RRF)&iLCEZVH<|fR zN0fr2^t8H(>L?>K#>^+jWROLral(Qy-xoBq1U7A&DV||wClb)Otd9?(gZ|8znMF}D zf<1haWz^s0qgecz;RFGt0C-B4g`jNGHsFU+;{<%t65v^sjk^h$lmWn#B0#_)9ij&d z-~lc`A)YYExi^7sBuPM^Y|wA2g*5?`K?#7tzELQYNxGo$UB$4J8RJp1k(8Jj+~hMT zlN~>M@KTTh^--8y3PK_NZ@AC!{PT=CziBzGd+wTJ^@icH!Bd}%)g8V)%K?|c&WTUk zy}qv1C%(fjRoZ4ozC3{O%@5?)XzH35zHns$pgU*Q?fj4v?fp1Qbm+j;3l;9jam9Da zXVcKjPlQ73x78QPu|Ffm6x?`~e3oD=gl=4kYK?={kD5j~QCXU)`HSdduNNENzA*2$ zOm3PzF!lN5e*06-f1Uot67wY#{o-S1!KZ7E=!~7ynnk9_iJR#kFoNbAOT#^2Gd17F zMmvU6>lndZQGd|ax9kUoXXO+$N?|j@6qpsF&_j7YXvwo_C{JpmLw5&#e6k>atv%es z5)7r*Wvv_JkUpT}M!_o!nVlEk1Zbl=a*2hQ*<|%*K1Glj^FcF`6kTzGQ3lz~2tCc@ z&x|tj;aH&1&9HwcJBcT`;{?a+pnej;M1HO(6Z{#J!cZA04hnFl;NXA+&`=7bjW_^o zfC40u3LMG?NdPtwGl>Tq6u}*QG)}-y;)lu-_>ee3kibW(69n0$0Zy!}9rQz%*v1iO zT9_H>99yIrSPYVy6^);rR}7Yo=J_T@hi+qhTZXnVWyf;JDYm5#eYLTxr*?kiNn!+Y zQ+LUkBafNJ#rH#C(?d5^;gw9o#%daEI{mA*LHPIHPU`#|H$hD zwm>0&+kahQ)E#%~k>&5@&#Vg82H?s%71=)(soi@174pi9--2{w{1$}Sz4zGn3Du&x bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP literal 0 HcmV?d00001 diff --git a/Source/BLE.Client.UWP/Assets/Square44x44Logo.scale-200.png b/Source/BLE.Client.UWP/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..ce342a2ec8a61291ba76c54604aea7e9d20af11b GIT binary patch literal 1647 zcmaJ?eM}Q)7(e+G1Q(|`V9JhTI2>MkceK4;p;PR&$Pi?ejk3YQ_3o`S&|W_dsOZ8# zWPTt69g`t$ab`0cj-Y0yiBSOqmd)tG7G(}M5aP0_%&9TijB#&)I{zSE^4@#z^FF`l z`8{8`o%wlL(UI|y2!cdsuVamHH~H86F!*-15em4)NqUpCQM5?aoC_eCf@lV4wvF2a zjDQn1JBL69f&@2M3rvzJcfE!eZ8FZUBlFlC5RD)it33{mF9#B82AiyQE%w)`vlwa> zv{<1sm&kSKK$&%2jSFn7$t&P%%6Ue>R=EAnG8N7fqynWG8L3p!4801a;8{+nliO(qd(jNJ_?+9W3#hLIDLoT6~3fx9=`CC-D}-AMrpEO7HK zt3$GicGPc?GmDjy7K2P@La;eu4!$zWCZ`ym{Z$b zu-O6RM&K4JT|BIZB`E-gxqG%FzanI#+2FFmqHqXG7yxWB=w55RGOM)$xMb(>kSNR z2w=1AZi%z=AmG~yea~XaXJR!v7vLn(RUnELfiB1|6D84ICOS}^Zo2AdN}<&*h}G_u z{xZ!(%>tLT3J3<5XhWy-tg+6)0nmUUENLW8TWA{R6bgVd3X;anYFZ^IRis*_P-C-r z;i>%1^eL3UI2-{w8nuFFcs0e~7J{O2k^~Ce%+Ly4U?|=!0LH=t6()xi<^I-rs+9sF z*q{E-CxZbGPeu#a;XJwE;9S1?#R&uns>^0G3p`hEUF*v`M?@h%T%J%RChmD|EVydq zmHWh*_=S%emRC*mhxaVLzT@>Z2SX0u9v*DIJ@WC^kLVdlGV6LpK$KIrlJqc zpJ921)+3JJdTx|<`G&kXpKkjGJv=76R`yYIQ{#c-`%+`#V(7}Q;&@6U8!Td1`d;?N z_9mnI#?AA}4J!r)LN4!E-@H5eXauuB7TOawS>Y|{-P?NNx-lq+z1W-+y(;39P&&LP zL{N80?&=C*qKmdA^moMZRuPcD!B<*mq$ch=0Cnlitw#txRWhb3%TQvPqjkC`F69G4b! ze7z9MZ#+;_#l?H37UqUhDFb^l&s2{oM$3I0o^Q!yx;;V)QmCMo)Tb_ui|mit8MS?U zm##6$sZZ1$@|s%?l@>4Z<*Q}sRBSKMhb4I{e5LdEhsHIHTe8Bod5c>6QtT>$XgUBz z6MK`kO$=jmt@FqggOhJ5j~e@ygRbG;<{Vu)*+nn9aQeo0;$#j;|MS=S$&L?BeV25z xs3B`@=#`5TF{^6(A1rvdY@|-RtQ|iS5{tyX+wH?;n8E)G$kykv-D^wh{{!TZT%7;_ literal 0 HcmV?d00001 diff --git a/Source/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/Source/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c02ce97e0a802b85f6021e822c89f8bf57d5cd GIT binary patch literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= literal 0 HcmV?d00001 diff --git a/Source/BLE.Client.UWP/Assets/StoreLogo.png b/Source/BLE.Client.UWP/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7385b56c0e4d3c6b0efe3324aa1194157d837826 GIT binary patch literal 1451 zcmaJ>eN5D57_Z|bH;{0+1#mbl)eTU3{h)Wf7EZV?;HD@XL@{B`Ui%(2aMxQ~xdXSv z5nzWi(LW)U2=Vc-cY@s7nPt{i0hc6!7xN4NNHI#EQl>YNBy8l4%x9gr_W-j zEZMQmmTIy(>;lblRfh`dIyTgc9W5d!VP$L4(kKrN1c5G~(O_#xG zAJCNTstD^5SeXFB+&$h=ToJP2H>xr$iqPs-#O*;4(!Fjw25-!gEb*)mU}=)J;Iu>w zxK(5XoD0wrPSKQ~rbL^Cw6O_03*l*}i=ydbu7adJ6y;%@tjFeXIXT+ms30pmbOP%Q zX}S;+LBh8Tea~TSkHzvX6$rYb)+n&{kSbIqh|c7hmlxmwSiq5iVhU#iEQ<>a18|O^Sln-8t&+t`*{qBWo5M?wFM(JuimAOb5!K#D}XbslM@#1ZVz_;!9U zpfEpLAOz=0g@bd6Xj_ILi-x^!M}73h^o@}hM$1jflTs|Yuj9AL@A3<-?MV4!^4q`e z)fO@A;{9K^?W?DbnesnPr6kK>$zaKo&;FhFd(GYFCIU^T+OIMb%Tqo+P%oq(IdX7S zf6+HLO?7o0m+p>~Tp5UrXWh!UH!wZ5kv!E`_w)PTpI(#Iw{AS`gH4^b(bm^ZCq^FZ zY9DD7bH}rq9mg88+KgA$Zp!iWncuU2n1AuIa@=sWvUR-s`Qb{R*kk(SPU^`$6BXz8 zn#7yaFOIK%qGxyi`dYtm#&qqox0$h=pNi#u=M8zUG@bpiZ=3sT=1}Trr}39cC)H|v zbL?W)=&s4zrh)7>L(|cc%$1#!zfL?HjpeP%T+x_a+jZ16b^iKOHxFEX$7d|8${H-* zIrOJ5w&i$>*D>AKaIoYg`;{L@jM((Kt?$N$5OnuPqVvq**Nm}(f0wwOF%iX_Pba;V z;m@wxX&NcV3?<1+u?A{y_DIj7#m3Af1rCE)o`D&Y3}0%7E;iX1yMDiS)sh0wKi!36 zL!Wmq?P^Ku&rK~HJd97KkLTRl>ScGFYZNlYytWnhmuu|)L&ND8_PmkayQb{HOY640 bno1(wj@u8DCVuFR|31B*4ek@pZJqxCDDe1x literal 0 HcmV?d00001 diff --git a/Source/BLE.Client.UWP/Assets/Wide310x150Logo.scale-200.png b/Source/BLE.Client.UWP/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..288995b397fdbef1fb7e85afd71445d5de1952c5 GIT binary patch literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

MY- zf+K}sCe8qU6Ujs`3ua{U0Of$R_gVQBuUA za0v=mu#vIOqiiAZOr&h*$WyOw&k-xr$;G4Ixa!#TJNr>95(h>l%)PUy4p+^SgR(uR zta%k*?ny-+nAr8spEk1fo{J4i!b^Fia`N{_F6@zidA2ZTTrjl#^5Z-2KfB@Cu}l9s z(*|Z2jc?p~vn2f)3y9i*7zJV1L{$?|&q)4oaT;uXi6>1GkRXVTOzAz(RHEmr=eFIi z`}<>-Q?K0GN8!IYxeP1XKXO+jsJbp~o^);Bc;%b7Flpe7;1`Ny@3r7ZR;?R)aJt8C ziNlEC<@3f_lIV4TwV}&e;D!Ee5_|e#g0LUh=5vmYWYm7&2h*M>QPKvGh9-)wfMMW3 z8J9b%1k7dzPzO0_NGQy92BZ^FR6R~6;^6?lqO;-QUP4BY%cG%3vEhbm#>4vIhPBh3 z-+pZGjh$x%Hp{?=FHsMp0&wNPlj00us{&`1ZOZTqs8%4X&xH=UDr*xyBW(Zp&Em94 zf)ZSfn#yg0N)>!1kWdkqJ^S*z0FF5|fj&qcE#Na|%OY0$uO>!&hP+1ywfD_WXk@4J(?MBftK7>$Nvqh@tDuarN%PrTLQ2Uzysx>UV=V zk^RrDSvdQ?0;=hY67EgII-f4`t=+i*yS=Y~!XlqIy_4x&%+OdfbKOFPXS2X5%4R{N z$SQMX^AK6(fA + + + + Debug + x86 + {25E04E05-F867-4F64-813D-AAFE0BA171B0} + AppContainerExe + Properties + BLE.Client.UWP + BLE.Client.UWP + en-US + UAP + 10.0.15063.0 + 10.0.10586.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + BLE.Client.UWP_TemporaryKey.pfx + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + + MainPage.xaml + + + + + + + Designer + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 6.5.1 + + + 5.2.3 + + + 5.1.0 + + + 5.1.0 + + + 2.0.1 + + + 3.0.1 + + + 2.3.4.247 + + + + + {dfe97be0-070b-43ad-bf37-50fd42b542d1} + BLE.Client + + + {f479f7db-cfa6-49e5-aa41-4fe6a4da39b0} + Plugin.BLE.Abstractions + + + {ccd85512-a2d7-4076-b31d-7a24829058af} + Plugin.BLE.UWP + + + + 14.0 + + + + \ No newline at end of file diff --git a/Source/BLE.Client.UWP/DebugTrace.cs b/Source/BLE.Client.UWP/DebugTrace.cs new file mode 100644 index 00000000..a2ecac72 --- /dev/null +++ b/Source/BLE.Client.UWP/DebugTrace.cs @@ -0,0 +1,31 @@ +using System; +using System.Diagnostics; +using MvvmCross.Platform.Platform; + +namespace BLE.Client.UWP +{ + public class DebugTrace : IMvxTrace + { + public void Trace(MvxTraceLevel level, string tag, Func message) + { + Debug.WriteLine(tag + ":" + level + ":" + message()); + } + + public void Trace(MvxTraceLevel level, string tag, string message) + { + Debug.WriteLine(tag + ":" + level + ":" + message); + } + + public void Trace(MvxTraceLevel level, string tag, string message, params object[] args) + { + try + { + Debug.WriteLine(tag + ":" + level + ":" + message, args); + } + catch (FormatException) + { + Trace(MvxTraceLevel.Error, tag, "Exception during trace of {0} {1}", level, message); + } + } + } +} diff --git a/Source/BLE.Client.UWP/MainPage.xaml b/Source/BLE.Client.UWP/MainPage.xaml new file mode 100644 index 00000000..8635813b --- /dev/null +++ b/Source/BLE.Client.UWP/MainPage.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/Source/BLE.Client.UWP/MainPage.xaml.cs b/Source/BLE.Client.UWP/MainPage.xaml.cs new file mode 100644 index 00000000..60b9f354 --- /dev/null +++ b/Source/BLE.Client.UWP/MainPage.xaml.cs @@ -0,0 +1,29 @@ +using MvvmCross.Core.ViewModels; +using MvvmCross.Core.Views; +using MvvmCross.Forms.Uwp.Presenters; +using MvvmCross.Platform; + +// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 + +namespace BLE.Client.UWP +{ + ///

+ /// An empty page that can be used on its own or navigated to within a Frame. + /// + public sealed partial class MainPage : Xamarin.Forms.Platform.UWP.WindowsPage + { + public MainPage() + { + this.InitializeComponent(); + + //SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape; + + var startup = Mvx.Resolve(); + startup.Start(); + + var presenter = Mvx.Resolve() as MvxFormsUwpPagePresenter; + + LoadApplication(presenter.FormsApplication); + } + } +} diff --git a/Source/BLE.Client.UWP/Package.appxmanifest b/Source/BLE.Client.UWP/Package.appxmanifest new file mode 100644 index 00000000..15f46e4a --- /dev/null +++ b/Source/BLE.Client.UWP/Package.appxmanifest @@ -0,0 +1,49 @@ + + + + + + + + + + BLE.Client.UWP + Adrian + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/BLE.Client.UWP/Properties/AssemblyInfo.cs b/Source/BLE.Client.UWP/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..c113f2b2 --- /dev/null +++ b/Source/BLE.Client.UWP/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("BLE.Client.UWP")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BLE.Client.UWP")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/Source/BLE.Client.UWP/Properties/Default.rd.xml b/Source/BLE.Client.UWP/Properties/Default.rd.xml new file mode 100644 index 00000000..7c40ffeb --- /dev/null +++ b/Source/BLE.Client.UWP/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/BLE.Client.UWP/Setup.cs b/Source/BLE.Client.UWP/Setup.cs new file mode 100644 index 00000000..7c048d7b --- /dev/null +++ b/Source/BLE.Client.UWP/Setup.cs @@ -0,0 +1,54 @@ +using System; +using Acr.UserDialogs; +using MvvmCross.Core.ViewModels; +using MvvmCross.Forms.Uwp; +using MvvmCross.Forms.Uwp.Presenters; + +using MvvmCross.Platform; +using MvvmCross.Platform.Platform; +using MvvmCross.Uwp.Views; +using Plugin.Permissions; +using Plugin.Settings; +using Windows.ApplicationModel.Activation; +using Windows.UI.Xaml.Controls; +using Xamarin.Forms; +using MvvmCross.Core.Views; +using MvvmCross.Forms.Core; +using Plugin.BLE; + +namespace BLE.Client.UWP +{ + public class Setup : MvxFormsWindowsSetup + { + public Setup(Windows.UI.Xaml.Controls.Frame rootFrame, LaunchActivatedEventArgs e) : base(rootFrame, e) + { + } + + protected override IMvxApplication CreateApp() + { + return new BleMvxApplication(); + } + + protected override IMvxTrace CreateDebugTrace() + { + return new DebugTrace(); + } + + protected override MvxFormsApplication CreateFormsApplication() + { + return new BleMvxFormsApp(); + } + + protected override void InitializeIoC() + { + base.InitializeIoC(); + + Mvx.RegisterSingleton(() => UserDialogs.Instance); + Mvx.RegisterSingleton(() => CrossSettings.Current); + Mvx.RegisterSingleton(() => CrossPermissions.Current); + Mvx.RegisterSingleton(() => CrossBluetoothLE.Current); + Mvx.RegisterSingleton(() => CrossBluetoothLE.Current.Adapter); + } + + } +} diff --git a/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml b/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml index b9da5acf..e40dab1c 100644 --- a/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml +++ b/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml @@ -72,6 +72,7 @@ - + diff --git a/Source/BLE.Client/BLE.Client/Pages/CharacteristicListPage.xaml b/Source/BLE.Client/BLE.Client/Pages/CharacteristicListPage.xaml index 22c850bb..b30537bc 100644 --- a/Source/BLE.Client/BLE.Client/Pages/CharacteristicListPage.xaml +++ b/Source/BLE.Client/BLE.Client/Pages/CharacteristicListPage.xaml @@ -17,7 +17,7 @@ diff --git a/Source/BLE.Client/BLE.Client/Pages/DescriptorListPage.xaml b/Source/BLE.Client/BLE.Client/Pages/DescriptorListPage.xaml index 479e50d7..0a252e17 100644 --- a/Source/BLE.Client/BLE.Client/Pages/DescriptorListPage.xaml +++ b/Source/BLE.Client/BLE.Client/Pages/DescriptorListPage.xaml @@ -17,7 +17,7 @@ diff --git a/Source/BLE.Client/BLE.Client/Pages/ServiceListPage.xaml b/Source/BLE.Client/BLE.Client/Pages/ServiceListPage.xaml index b77c26d8..07193a40 100644 --- a/Source/BLE.Client/BLE.Client/Pages/ServiceListPage.xaml +++ b/Source/BLE.Client/BLE.Client/Pages/ServiceListPage.xaml @@ -17,7 +17,7 @@ diff --git a/Source/BLE.Client/BLE.Client/ViewModels/BaseViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/BaseViewModel.cs index 92c44564..2ab29512 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/BaseViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/BaseViewModel.cs @@ -22,7 +22,7 @@ public class BaseViewModel : MvxViewModel public BaseViewModel(IAdapter adapter) { Adapter = adapter; - _log = Mvx.Resolve(); + _log = Mvx.IoCProvider.Resolve(); } public override void ViewAppeared() diff --git a/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicDetailViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicDetailViewModel.cs index d791a07f..c18924f9 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicDetailViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicDetailViewModel.cs @@ -60,7 +60,7 @@ public override void ViewAppeared() return; } - var navigation = Mvx.Resolve(); + var navigation = Mvx.IoCProvider.Resolve(); navigation.Close(this); } public override void ViewDisappeared() diff --git a/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicListViewModel.cs index 431f06a8..299b8b37 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicListViewModel.cs @@ -12,12 +12,12 @@ public class CharacteristicListViewModel : BaseViewModel private readonly IUserDialogs _userDialogs; private readonly IMvxNavigationService _navigation; private IService _service; - private IList _characteristics; + private IReadOnlyList _characteristics; - public IList Characteristics + public IReadOnlyList Characteristics { - get { return _characteristics; } - private set { SetProperty(ref _characteristics, value); } + get => _characteristics; + private set => SetProperty(ref _characteristics, value); } public CharacteristicListViewModel(IAdapter adapter, IUserDialogs userDialogs, IMvxNavigationService navigation) : base(adapter) @@ -65,7 +65,7 @@ public override async void Prepare(MvxBundle parameters) public ICharacteristic SelectedCharacteristic { - get { return null; } + get => null; set { if (value != null) diff --git a/Source/BLE.Client/BLE.Client/ViewModels/DescriptorListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/DescriptorListViewModel.cs index c02096ac..5a15218d 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/DescriptorListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/DescriptorListViewModel.cs @@ -10,7 +10,7 @@ public class DescriptorListViewModel : BaseViewModel private readonly IMvxNavigationService _navigation; private ICharacteristic _characteristic; - public IList Descriptors { get; private set;} + public IReadOnlyList Descriptors { get; private set;} public DescriptorListViewModel(IAdapter adapter, IMvxNavigationService navigation) : base(adapter) { @@ -35,14 +35,18 @@ public override async void Prepare(MvxBundle parameters) base.Prepare(parameters); _characteristic = await GetCharacteristicFromBundleAsync(parameters); + if (_characteristic == null) + { + return; + } - Descriptors = await _characteristic?.GetDescriptorsAsync(); + Descriptors = await _characteristic.GetDescriptorsAsync(); RaisePropertyChanged(nameof(Descriptors)); } public IDescriptor SelectedDescriptor { - get { return null; } + get => null; set { if (value != null) diff --git a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs index ccdfd805..0177b537 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs @@ -30,7 +30,7 @@ public class DeviceListViewModel : BaseViewModel public Guid PreviousGuid { - get { return _previousGuid; } + get => _previousGuid; set { _previousGuid = value; @@ -51,7 +51,7 @@ public Guid PreviousGuid public string StateText => GetStateText(); public DeviceListItemViewModel SelectedDevice { - get { return null; } + get => null; set { if (value != null) @@ -66,10 +66,7 @@ public DeviceListItemViewModel SelectedDevice bool _useAutoConnect; public bool UseAutoConnect { - get - { - return _useAutoConnect; - } + get => _useAutoConnect; set { @@ -224,7 +221,7 @@ public override void ViewDisappeared() RaisePropertyChanged(() => IsRefreshing); } - private async void TryStartScanning(bool refresh = false) + private async void TryStartScanning(bool refresh = false) { if (Xamarin.Forms.Device.RuntimePlatform == Device.Android) { @@ -333,7 +330,7 @@ private void HandleSelectedDevice(DeviceListItemViewModel device) config.Add("Show Services", async () => { - await Mvx.Resolve().Navigate(new MvxBundle(new Dictionary { { DeviceIdKey, device.Device.Id.ToString() } })); + await Mvx.IoCProvider.Resolve().Navigate(new MvxBundle(new Dictionary { { DeviceIdKey, device.Device.Id.ToString() } })); }); config.Destructive = new ActionSheetOption("Disconnect", () => DisconnectCommand.Execute(device)); @@ -344,7 +341,7 @@ private void HandleSelectedDevice(DeviceListItemViewModel device) { if (await ConnectDeviceAsync(device)) { - var navigation = Mvx.Resolve(); + var navigation = Mvx.IoCProvider.Resolve(); await navigation.Navigate(new MvxBundle(new Dictionary { { DeviceIdKey, device.Device.Id.ToString() } })); } }); @@ -501,6 +498,8 @@ private void OnDeviceDisconnected(object sender, DeviceEventArgs e) Devices.FirstOrDefault(d => d.Id == e.Device.Id)?.Update(); _userDialogs.HideLoading(); _userDialogs.Toast($"Disconnected {e.Device.Name}"); + + Console.WriteLine($"Disconnected {e.Device.Name}"); } public MvxCommand CopyGuidCommand => new MvxCommand(device => diff --git a/Source/BLE.Client/BLE.Client/ViewModels/ServiceListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/ServiceListViewModel.cs index 76d64841..711f9782 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/ServiceListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/ServiceListViewModel.cs @@ -15,7 +15,7 @@ public class ServiceListViewModel : BaseViewModel private IDevice _device; - public IList Services { get; private set; } + public IReadOnlyList Services { get; private set; } public ServiceListViewModel(IAdapter adapter, IUserDialogs userDialogs, IMvxNavigationService navigation) : base(adapter) { _userDialogs = userDialogs; @@ -64,7 +64,7 @@ public override void Prepare(MvxBundle parameters) public IService SelectedService { - get { return null; } + get => null; set { if (value != null) diff --git a/Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs b/Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs index b46ecf47..3cea5490 100644 --- a/Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs +++ b/Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs @@ -1,3 +1,4 @@ +using MvvmCross.IoC; using MvvmCross.Logging; using MvvmCross.Plugin; using Plugin.BLE; @@ -12,14 +13,14 @@ public class Plugin { public Plugin() { - var log = Mvx.Resolve(); + var log = Mvx.IoCProvider.Resolve(); Trace.TraceImplementation = log.Trace; } public void Load() { Trace.Message("Loading bluetooth low energy plugin"); - Mvx.LazyConstructAndRegisterSingleton(() => CrossBluetoothLE.Current); - Mvx.LazyConstructAndRegisterSingleton(() => Mvx.Resolve().Adapter); + Mvx.IoCProvider.LazyConstructAndRegisterSingleton(() => CrossBluetoothLE.Current); + Mvx.IoCProvider.LazyConstructAndRegisterSingleton(() => Mvx.IoCProvider.Resolve().Adapter); } } } \ No newline at end of file diff --git a/Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs b/Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs index f04d59da..122aed91 100644 --- a/Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs +++ b/Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs @@ -1,4 +1,5 @@ using Foundation; +using MvvmCross.IoC; using MvvmCross.Logging; using MvvmCross.Plugin; using Plugin.BLE; @@ -17,15 +18,15 @@ public class Plugin public Plugin() { - var log = Mvx.Resolve(); + var log = Mvx.IoCProvider.Resolve(); Trace.TraceImplementation = log.Trace; } public void Load() { Trace.Message("Loading bluetooth low energy plugin"); - Mvx.LazyConstructAndRegisterSingleton(() => CrossBluetoothLE.Current); - Mvx.LazyConstructAndRegisterSingleton(() => Mvx.Resolve().Adapter); + Mvx.IoCProvider.LazyConstructAndRegisterSingleton(() => CrossBluetoothLE.Current); + Mvx.IoCProvider.LazyConstructAndRegisterSingleton(() => Mvx.IoCProvider.Resolve().Adapter); } } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Abstractions/AdapterBase.cs b/Source/Plugin.BLE.Abstractions/AdapterBase.cs index e6926cae..bbbabfa0 100644 --- a/Source/Plugin.BLE.Abstractions/AdapterBase.cs +++ b/Source/Plugin.BLE.Abstractions/AdapterBase.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using Plugin.BLE.Abstractions.Contracts; @@ -11,38 +13,39 @@ namespace Plugin.BLE.Abstractions { public abstract class AdapterBase : IAdapter { + private readonly ConcurrentDictionary _discoveredDevices = new ConcurrentDictionary(); + private CancellationTokenSource _scanCancellationTokenSource; - private readonly IList _discoveredDevices; private volatile bool _isScanning; private Func _currentScanDeviceFilter; - public event EventHandler DeviceAdvertised = delegate { }; - public event EventHandler DeviceDiscovered = delegate { }; - public event EventHandler DeviceConnected = delegate { }; - public event EventHandler DeviceDisconnected = delegate { }; - public event EventHandler DeviceConnectionLost = delegate { }; - public event EventHandler DeviceConnectionError = delegate { }; - public event EventHandler ScanTimeoutElapsed = delegate { }; + public event EventHandler DeviceAdvertised; + public event EventHandler DeviceDiscovered; + public event EventHandler DeviceConnected; + public event EventHandler DeviceDisconnected; + public event EventHandler DeviceConnectionLost; + public event EventHandler DeviceConnectionError; + public event EventHandler ScanTimeoutElapsed; public bool IsScanning { - get { return _isScanning; } - private set { _isScanning = value; } + get => _isScanning; + private set => _isScanning = value; } public int ScanTimeout { get; set; } = 10000; public ScanMode ScanMode { get; set; } = ScanMode.LowPower; - public virtual IList DiscoveredDevices => _discoveredDevices; + public virtual IReadOnlyList DiscoveredDevices => _discoveredDevices.Values.ToList(); - public abstract IList ConnectedDevices { get; } + /// + /// Used to store all connected devices + /// + public ConcurrentDictionary ConnectedDeviceRegistry { get; } = new ConcurrentDictionary(); - protected AdapterBase() - { - _discoveredDevices = new List(); - } + public IReadOnlyList ConnectedDevices => ConnectedDeviceRegistry.Values.ToList(); - public async Task StartScanningForDevicesAsync(Guid[] serviceUuids = null, Func deviceFilter = null, bool allowDuplicatesKey = false, CancellationToken cancellationToken = default(CancellationToken)) + public async Task StartScanningForDevicesAsync(Guid[] serviceUuids = null, Func deviceFilter = null, bool allowDuplicatesKey = false, CancellationToken cancellationToken = default) { if (IsScanning) { @@ -57,13 +60,15 @@ protected AdapterBase() try { + _discoveredDevices.Clear(); + using (cancellationToken.Register(() => _scanCancellationTokenSource?.Cancel())) { await StartScanningForDevicesNativeAsync(serviceUuids, allowDuplicatesKey, _scanCancellationTokenSource.Token); await Task.Delay(ScanTimeout, _scanCancellationTokenSource.Token); Trace.Message("Adapter: Scan timeout has elapsed."); CleanupScan(); - ScanTimeoutElapsed(this, new System.EventArgs()); + ScanTimeoutElapsed?.Invoke(this, new System.EventArgs()); } } catch (TaskCanceledException) @@ -87,7 +92,7 @@ public Task StopScanningForDevicesAsync() return Task.FromResult(0); } - public async Task ConnectToDeviceAsync(IDevice device, ConnectParameters connectParameters = default(ConnectParameters), CancellationToken cancellationToken = default(CancellationToken)) + public async Task ConnectToDeviceAsync(IDevice device, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) { if (device == null) throw new ArgumentNullException(nameof(device)); @@ -183,19 +188,19 @@ public void HandleDiscoveredDevice(IDevice device) if (_currentScanDeviceFilter != null && !_currentScanDeviceFilter(device)) return; - DeviceAdvertised(this, new DeviceEventArgs { Device = device }); + DeviceAdvertised?.Invoke(this, new DeviceEventArgs { Device = device }); // TODO (sms): check equality implementation of device - if (_discoveredDevices.Contains(device)) + if (_discoveredDevices.ContainsKey(device.Id)) return; - _discoveredDevices.Add(device); - DeviceDiscovered(this, new DeviceEventArgs { Device = device }); + _discoveredDevices[device.Id] = device; + DeviceDiscovered?.Invoke(this, new DeviceEventArgs { Device = device }); } public void HandleConnectedDevice(IDevice device) { - DeviceConnected(this, new DeviceEventArgs { Device = device }); + DeviceConnected?.Invoke(this, new DeviceEventArgs { Device = device }); } public void HandleDisconnectedDevice(bool disconnectRequested, IDevice device) @@ -203,16 +208,16 @@ public void HandleDisconnectedDevice(bool disconnectRequested, IDevice device) if (disconnectRequested) { Trace.Message("DisconnectedPeripheral by user: {0}", device.Name); - DeviceDisconnected(this, new DeviceEventArgs { Device = device }); + DeviceDisconnected?.Invoke(this, new DeviceEventArgs { Device = device }); } else { Trace.Message("DisconnectedPeripheral by lost signal: {0}", device.Name); - DeviceConnectionLost(this, new DeviceErrorEventArgs { Device = device }); + DeviceConnectionLost?.Invoke(this, new DeviceErrorEventArgs { Device = device }); - if (DiscoveredDevices.Contains(device)) + if (_discoveredDevices.TryRemove(device.Id, out _)) { - DiscoveredDevices.Remove(device); + Trace.Message("Removed device from discovered devices list: {0}", device.Name); } } } @@ -220,7 +225,7 @@ public void HandleDisconnectedDevice(bool disconnectRequested, IDevice device) public void HandleConnectionFail(IDevice device, string errorMessage) { Trace.Message("Failed to connect peripheral {0}: {1}", device.Id, device.Name); - DeviceConnectionError(this, new DeviceErrorEventArgs + DeviceConnectionError?.Invoke(this, new DeviceErrorEventArgs { Device = device, ErrorMessage = errorMessage @@ -232,7 +237,7 @@ public void HandleConnectionFail(IDevice device, string errorMessage) protected abstract Task ConnectToDeviceNativeAsync(IDevice device, ConnectParameters connectParameters, CancellationToken cancellationToken); protected abstract void DisconnectDeviceNative(IDevice device); - public abstract Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default(ConnectParameters), CancellationToken cancellationToken = default(CancellationToken)); - public abstract List GetSystemConnectedOrPairedDevices(Guid[] services = null); + public abstract Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default); + public abstract IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null); } } diff --git a/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs b/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs index 8a965809..9018e78d 100644 --- a/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs +++ b/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs @@ -11,7 +11,7 @@ namespace Plugin.BLE.Abstractions { public abstract class CharacteristicBase : ICharacteristic { - private IList _descriptors; + private IReadOnlyList _descriptors; private CharacteristicWriteType _writeType = CharacteristicWriteType.Default; public abstract event EventHandler ValueUpdated; @@ -25,7 +25,7 @@ public abstract class CharacteristicBase : ICharacteristic public CharacteristicWriteType WriteType { - get { return _writeType; } + get => _writeType; set { if (value == CharacteristicWriteType.WithResponse && !Properties.HasFlag(CharacteristicPropertyType.Write) || @@ -63,7 +63,7 @@ protected CharacteristicBase(IService service) Service = service; } - public async Task ReadAsync(CancellationToken cancellationToken = default(CancellationToken)) + public async Task ReadAsync(CancellationToken cancellationToken = default) { if (!CanRead) { @@ -74,7 +74,7 @@ protected CharacteristicBase(IService service) return await ReadNativeAsync(); } - public async Task WriteAsync(byte[] data, CancellationToken cancellationToken = default(CancellationToken)) + public async Task WriteAsync(byte[] data, CancellationToken cancellationToken = default) { if (data == null) { @@ -123,20 +123,18 @@ public Task StopUpdatesAsync() return StopUpdatesNativeAsync(); } - public async Task> GetDescriptorsAsync(CancellationToken cancellationToken = default(CancellationToken)) + public async Task> GetDescriptorsAsync(CancellationToken cancellationToken = default) { - if (_descriptors == null) - _descriptors = await GetDescriptorsNativeAsync(); - return _descriptors; + return _descriptors ?? (_descriptors = await GetDescriptorsNativeAsync()); } - public async Task GetDescriptorAsync(Guid id, CancellationToken cancellationToken = default(CancellationToken)) + public async Task GetDescriptorAsync(Guid id, CancellationToken cancellationToken = default) { - var descriptors = await GetDescriptorsAsync().ConfigureAwait(false); + var descriptors = await GetDescriptorsAsync(cancellationToken).ConfigureAwait(false); return descriptors.FirstOrDefault(d => d.Id == id); } - protected abstract Task> GetDescriptorsNativeAsync(); + protected abstract Task> GetDescriptorsNativeAsync(); protected abstract Task ReadNativeAsync(); protected abstract Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType); protected abstract Task StartUpdatesNativeAsync(); diff --git a/Source/Plugin.BLE.Abstractions/CharacteristicPropertyType.cs b/Source/Plugin.BLE.Abstractions/CharacteristicPropertyType.cs index abf9f573..a7df3abe 100644 --- a/Source/Plugin.BLE.Abstractions/CharacteristicPropertyType.cs +++ b/Source/Plugin.BLE.Abstractions/CharacteristicPropertyType.cs @@ -48,11 +48,12 @@ public enum CharacteristicPropertyType /// /// Indicates that more properties are set in the extended properties descriptor. /// - ExtendedProperties = 128 + ExtendedProperties = 128, // TODO: move these to seperate enum - // NotifyEncryptionRequired = 256, //0x100 - // IndicateEncryptionRequired = 512, //0x200 + NotifyEncryptionRequired = 256, //0x100 + + IndicateEncryptionRequired = 512, //0x200 } } diff --git a/Source/Plugin.BLE.Abstractions/Contracts/IAdapter.cs b/Source/Plugin.BLE.Abstractions/Contracts/IAdapter.cs index 13f8e0ba..c98cfc74 100644 --- a/Source/Plugin.BLE.Abstractions/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE.Abstractions/Contracts/IAdapter.cs @@ -17,7 +17,7 @@ public interface IAdapter /// event EventHandler DeviceAdvertised; /// - /// Occurs when the adapter recaives an advertisement for the first time of the current scan run. + /// Occurs when the adapter receives an advertisement for the first time of the current scan run. /// This means once per every call. /// event EventHandler DeviceDiscovered; @@ -26,11 +26,11 @@ public interface IAdapter /// event EventHandler DeviceConnected; /// - /// Occurs when a device has been disconnected. This occurs on intendet disconnects after . + /// Occurs when a device has been disconnected. This occurs on intended disconnects after . /// event EventHandler DeviceDisconnected; /// - /// Occurs when a device has been disconnected. This occurs on unintendet disconnects (e.g. when the device exploded). + /// Occurs when a device has been disconnected. This occurs on unintended disconnects (e.g. when the device exploded). /// event EventHandler DeviceConnectionLost; /// IReadOnlyList ConnectedDevices { get; } + /// + /// List of currently bonded devices. + /// The property is null if the OS doesn't provide this information + /// + IReadOnlyList BondedDevices { get; } + /// /// Starts scanning for BLE devices that fulfill the . /// DeviceDiscovered will only be called, if returns true for the discovered device. diff --git a/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs b/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs index 79d2aa4a..c7282114 100644 --- a/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs +++ b/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs @@ -47,6 +47,11 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] return new List(); } + protected override IReadOnlyList GetBondedDevices() + { + return null; // not supported + } + public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) { TraceUnavailability(); diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 88e18ac9..2ba0af48 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -142,6 +142,11 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] return ConnectedDevices; } + protected override IReadOnlyList GetBondedDevices() + { + return null; // not supported + } + /// /// Parses a given advertisement for various stored properties /// Currently only parses the manufacturer specific data From 9c948fd4fa0cb734b489cccec96f97a3e3c13340 Mon Sep 17 00:00:00 2001 From: mos Date: Tue, 16 May 2023 14:48:48 +0200 Subject: [PATCH 323/527] Added BondState, CreateBond(), and ForgetBond() to IDevice. Fixed issue in BondStatusBroadcastReceiver to add the adapter to new devices provided to the event. --- Source/Plugin.BLE/Android/Adapter.cs | 2 +- .../BondStatusBroadcastReceiver.cs | 21 +++--- Source/Plugin.BLE/Android/Device.cs | 65 ++++++++++++++++++- Source/Plugin.BLE/Apple/Device.cs | 20 ++++++ Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 24 +++++++ Source/Plugin.BLE/Shared/DeviceBase.cs | 11 ++++ Source/Plugin.BLE/Shared/DeviceBondState.cs | 6 +- Source/Plugin.BLE/Windows/Device.cs | 19 ++++++ 8 files changed, 157 insertions(+), 11 deletions(-) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index 61b30275..da77d0aa 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -31,7 +31,7 @@ public Adapter(BluetoothManager bluetoothManager) _bluetoothAdapter = bluetoothManager.Adapter; //bonding - var bondStatusBroadcastReceiver = new BondStatusBroadcastReceiver(); + var bondStatusBroadcastReceiver = new BondStatusBroadcastReceiver(this); Application.Context.RegisterReceiver(bondStatusBroadcastReceiver, new IntentFilter(BluetoothDevice.ActionBondStateChanged)); diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index 96bba489..9f777f92 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -12,26 +12,31 @@ public class BondStatusBroadcastReceiver : BroadcastReceiver { public event EventHandler BondStateChanged; - public override void OnReceive(Context context, Intent intent) + Adapter BroadCastAdapter; + + public BondStatusBroadcastReceiver(Adapter adapter) { - var bondState = (Bond)intent.GetIntExtra(BluetoothDevice.ExtraBondState, (int)Bond.None); - //ToDo - var device = new Device(null, (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice), null); - Console.WriteLine(bondState.ToString()); + BroadCastAdapter = adapter; + } + public override void OnReceive(Context context, Intent intent) + { if (BondStateChanged == null) return; + var bondState = (global::Android.Bluetooth.Bond)intent.GetIntExtra(BluetoothDevice.ExtraBondState, (int)global::Android.Bluetooth.Bond.None); + var bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); + var device = new Device(BroadCastAdapter, bluetoothDevice, null, 0); switch (bondState) { - case Bond.None: + case global::Android.Bluetooth.Bond.None: BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.NotBonded }); break; - case Bond.Bonding: + case global::Android.Bluetooth.Bond.Bonding: BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.Bonding }); break; - case Bond.Bonded: + case global::Android.Bluetooth.Bond.Bonded: BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.Bonded }); break; diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index efb8468a..a7f103de 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -415,8 +415,8 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv } } - public override bool IsConnectable { get; protected set; } + public override bool IsConnectable { get; protected set; } public override bool SupportsIsConnectable { get => @@ -427,5 +427,68 @@ public override bool SupportsIsConnectable { #endif } + + protected override DeviceBondState GetBondState() + { + if (NativeDevice == null) + { + Trace.Message($"[Warning]: Can't get bond state of {Name}. NativeDevice is null."); + return DeviceBondState.NotSupported; + } + var bondState = NativeDevice.BondState; + switch (bondState) + { + case global::Android.Bluetooth.Bond.None: + return DeviceBondState.NotBonded; + case global::Android.Bluetooth.Bond.Bonding: + return DeviceBondState.Bonding; + case global::Android.Bluetooth.Bond.Bonded: + return DeviceBondState.Bonded; + default: + return DeviceBondState.NotSupported; + } + } + + public override bool CreateBond() + { + if (NativeDevice == null) + { + Trace.Message($"[Warning]: Can't create bond for {Name}. BluetoothDevice is null."); + return false; + } + else + { + return NativeDevice.CreateBond(); + } + } + + public override bool ForgetBond() + { + if (NativeDevice == null) + { + Trace.Message($"[Warning]: Can't remove bond of {Name}. BluetoothDevice is null."); + return false; + } + + if (BondState == DeviceBondState.NotBonded) + { + Trace.Message($"Device {Name} is not bonded."); + return true; + } + + try + { + // removeBond is not part of the API but was always available together with CreateBond (just hidden). + var removeBond = NativeDevice.Class.GetMethod("removeBond"); + // calling removeBond will disconnect! + return (bool)removeBond.Invoke(NativeDevice); + } + catch (Exception ex) + { + Trace.Message($"RemoveBond of {Name} failed. {ex.Message}"); + return false; + } + } + } } diff --git a/Source/Plugin.BLE/Apple/Device.cs b/Source/Plugin.BLE/Apple/Device.cs index 246d2915..5f6b5e0a 100644 --- a/Source/Plugin.BLE/Apple/Device.cs +++ b/Source/Plugin.BLE/Apple/Device.cs @@ -174,9 +174,29 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv return false; } + public override bool IsConnectable { get; protected set; } public override bool SupportsIsConnectable { get => true; } + + protected override DeviceBondState GetBondState() + { + return DeviceBondState.NotSupported; + } + + public override bool CreateBond() + { + Trace.Message("Cannot initiate a bonding request on iOS."); + return false; + } + + public override bool ForgetBond() + { + Trace.Message("Cannot forget bonding on iOS."); + return false; + } + + } } diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 89ddc700..908934ae 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -120,5 +120,29 @@ public interface IDevice : IDisposable /// True, if device supports IsConnectable else False /// bool SupportsIsConnectable { get; } + + + /// + /// Gets the bonding state of a device. + /// + DeviceBondState BondState { get; } + + /// + /// Initiates a bonding request. + /// To establish an additional security level in the commumication between server and client pairing or bonding is used. + /// Pairing does the key exchange and encryption/decryption for one connection between server and client. + /// Bonding does pairing and remembers the keys in a secure storage so that they can be used for the next connection. + /// You have to subscribe to Adapter.DeviceBondStateChanged to get the current state. Typically first bonding and later bonded. + /// Important: + /// On iOS: Initiating a bonding request is not supported by iOS. The function simply returns false. + /// + /// True if bonding could be requested. On iOS it will always return false. + bool CreateBond(); + + /// + /// Forgets the bonding between server and client. + /// + /// + bool ForgetBond(); } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index 2bacad88..b48ddfb6 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -254,5 +254,16 @@ public override int GetHashCode() public abstract bool IsConnectable { get; protected set; } public abstract bool SupportsIsConnectable { get; } + + + protected abstract DeviceBondState GetBondState(); + + public DeviceBondState BondState => GetBondState(); + + public abstract bool CreateBond(); + + public abstract bool ForgetBond(); + + } } diff --git a/Source/Plugin.BLE/Shared/DeviceBondState.cs b/Source/Plugin.BLE/Shared/DeviceBondState.cs index e84b5213..40ec2db1 100644 --- a/Source/Plugin.BLE/Shared/DeviceBondState.cs +++ b/Source/Plugin.BLE/Shared/DeviceBondState.cs @@ -20,6 +20,10 @@ public enum DeviceBondState /// Indicates the remote device is bonded (paired), /// see https://developer.android.com/reference/android/bluetooth/BluetoothDevice#BOND_BONDED /// - Bonded + Bonded, + /// + /// Indicates that the device does not support information about the bonding state. + /// + NotSupported = -1, } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 904cdc98..02045579 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -105,5 +105,24 @@ public override void Dispose() public override bool IsConnectable { get; protected set; } public override bool SupportsIsConnectable { get => true; } + + + protected override DeviceBondState GetBondState() + { + return DeviceBondState.NotSupported; + } + + public override bool CreateBond() + { + Trace.Message("Cannot initiate a bonding request on iOS."); + return false; + } + + public override bool ForgetBond() + { + Trace.Message("Cannot forget bonding on iOS."); + return false; + } + } } From 9ac8425a7df92726123793c6edb2f52784d9bb3b Mon Sep 17 00:00:00 2001 From: mos Date: Tue, 16 May 2023 17:02:29 +0200 Subject: [PATCH 324/527] Improved CreateBond() comment with hints to the required permissions. --- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 908934ae..e498a926 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using static Android.OS.Build; +using static Java.Text.Normalizer; namespace Plugin.BLE.Abstractions.Contracts { @@ -134,7 +136,13 @@ public interface IDevice : IDisposable /// Bonding does pairing and remembers the keys in a secure storage so that they can be used for the next connection. /// You have to subscribe to Adapter.DeviceBondStateChanged to get the current state. Typically first bonding and later bonded. /// Important: - /// On iOS: Initiating a bonding request is not supported by iOS. The function simply returns false. + /// On iOS: + /// Initiating a bonding request is not supported by iOS. The function simply returns false. + /// On Android: + /// Android system services will handle the necessary user interactions to confirm and complete the bonding process. + /// For apps targeting Build.VERSION_CODES#R or lower, this requires the Manifest.permission#BLUETOOTH_ADMIN permission + /// which can be gained with a simple ßuses-permissionß manifest tag. For apps targeting Build.VERSION_CODES#S or or higher, + /// this requires the Manifest.permission#BLUETOOTH_CONNECT permission which can be gained with Activity.requestPermissions(String[], int). /// /// True if bonding could be requested. On iOS it will always return false. bool CreateBond(); From d5eb560970629050cbe7f730c5bc83c2cef523b8 Mon Sep 17 00:00:00 2001 From: mos Date: Tue, 16 May 2023 17:33:59 +0200 Subject: [PATCH 325/527] Removed some usings added by VS2022 for whatever reason, which resulted in compilation errors. --- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index e498a926..758ca96e 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -2,8 +2,6 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using static Android.OS.Build; -using static Java.Text.Normalizer; namespace Plugin.BLE.Abstractions.Contracts { From cc1f2df3808a46067a1897af060974294c9118fb Mon Sep 17 00:00:00 2001 From: Christian Matthias Kantner Date: Wed, 17 May 2023 09:50:22 +0200 Subject: [PATCH 326/527] Changing Read Result to native C# net7 Tuple (with names), updating comments, fixing callback of Read on Android (#668) --- Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs | 2 +- Source/Plugin.BLE/Android/Characteristic.cs | 6 +++--- Source/Plugin.BLE/Android/GattCallback.cs | 2 +- Source/Plugin.BLE/Apple/Characteristic.cs | 6 +++--- Source/Plugin.BLE/Shared/CharacteristicBase.cs | 4 ++-- Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs | 8 ++++---- Source/Plugin.BLE/Windows/Characteristic.cs | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs b/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs index 2ea3980b..eece2fb4 100644 --- a/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs +++ b/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs @@ -43,7 +43,7 @@ protected override Task> GetDescriptorsNativeAsync() throw new NotImplementedException(); } - protected override Task> ReadNativeAsync() + protected override Task<(byte[] data, int resultCode)> ReadNativeAsync() { throw new NotImplementedException(); } diff --git a/Source/Plugin.BLE/Android/Characteristic.cs b/Source/Plugin.BLE/Android/Characteristic.cs index ecac3111..ca85a429 100644 --- a/Source/Plugin.BLE/Android/Characteristic.cs +++ b/Source/Plugin.BLE/Android/Characteristic.cs @@ -42,16 +42,16 @@ protected override Task> GetDescriptorsNativeAsync() return Task.FromResult>(NativeCharacteristic.Descriptors.Select(item => new Descriptor(item, _gatt, _gattCallback, this)).Cast().ToList()); } - protected override async Task> ReadNativeAsync() + protected override async Task<(byte[] data, int resultCode)> ReadNativeAsync() { - return await TaskBuilder.FromEvent, EventHandler, EventHandler>( + return await TaskBuilder.FromEvent<(byte[] data, int resultCode), EventHandler, EventHandler>( execute: ReadInternal, getCompleteHandler: (complete, reject) => ((sender, args) => { if (args.Characteristic.Uuid == NativeCharacteristic.Uuid) { int resultCode = (int)args.Status; - complete(new Tuple(args.Characteristic.GetValue(), resultCode)); + complete((args.Characteristic.GetValue(), resultCode)); } }), subscribeComplete: handler => _gattCallback.CharacteristicValueRead += handler, diff --git a/Source/Plugin.BLE/Android/GattCallback.cs b/Source/Plugin.BLE/Android/GattCallback.cs index 669d908f..e55ebdf2 100644 --- a/Source/Plugin.BLE/Android/GattCallback.cs +++ b/Source/Plugin.BLE/Android/GattCallback.cs @@ -174,7 +174,7 @@ public override void OnCharacteristicRead(BluetoothGatt gatt, BluetoothGattChara Trace.Message("OnCharacteristicRead: value {0}; status {1}", characteristic.GetValue().ToHexString(), status); - CharacteristicValueUpdated?.Invoke(this, new CharacteristicReadCallbackEventArgs(characteristic, status)); + CharacteristicValueRead?.Invoke(this, new CharacteristicReadCallbackEventArgs(characteristic, status)); } public override void OnCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) diff --git a/Source/Plugin.BLE/Apple/Characteristic.cs b/Source/Plugin.BLE/Apple/Characteristic.cs index e1d8f262..df16d63b 100644 --- a/Source/Plugin.BLE/Apple/Characteristic.cs +++ b/Source/Plugin.BLE/Apple/Characteristic.cs @@ -85,11 +85,11 @@ protected override Task> GetDescriptorsNativeAsync() unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler); } - protected override Task> ReadNativeAsync() + protected override Task<(byte[] data, int resultCode)> ReadNativeAsync() { var exception = new Exception($"Device '{Service.Device.Id}' disconnected while reading characteristic with {Id}."); - return TaskBuilder.FromEvent, EventHandler, EventHandler>( + return TaskBuilder.FromEvent<(byte[] data, int resultCode), EventHandler, EventHandler>( execute: () => { if (_parentDevice.State != CBPeripheralState.Connected) @@ -112,7 +112,7 @@ protected override Task> ReadNativeAsync() { Trace.Message($"Read characterteristic value: {Value?.ToHexString()}"); int resultCode = (args.Error == null) ? 0 : NSErrorToGattStatus(args.Error); - complete(new Tuple(Value, resultCode)); + complete((Value, resultCode)); } }, subscribeComplete: handler => _parentDevice.UpdatedCharacterteristicValue += handler, diff --git a/Source/Plugin.BLE/Shared/CharacteristicBase.cs b/Source/Plugin.BLE/Shared/CharacteristicBase.cs index d77b4dab..aa691f66 100644 --- a/Source/Plugin.BLE/Shared/CharacteristicBase.cs +++ b/Source/Plugin.BLE/Shared/CharacteristicBase.cs @@ -115,7 +115,7 @@ protected CharacteristicBase(IService service, TNativeCharacteristic nativeChara /// /// Reads the characteristic value from the device. The result is also stored inisde the Value property. /// - public async Task> ReadAsync(CancellationToken cancellationToken = default) + public async Task<(byte[] data, int resultCode)> ReadAsync(CancellationToken cancellationToken = default) { if (!CanRead) { @@ -213,7 +213,7 @@ public async Task GetDescriptorAsync(Guid id, CancellationToken can /// /// Native implementation of ReadAsync. /// - protected abstract Task> ReadNativeAsync(); + protected abstract Task<(byte[] data, int resultCode)> ReadNativeAsync(); /// /// Native implementation of WriteAsync. /// diff --git a/Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs b/Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs index 0b52c126..a6b37eb7 100644 --- a/Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs +++ b/Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs @@ -79,10 +79,10 @@ public interface ICharacteristic /// Reads the characteristic value from the device. The result is also stored inisde the Value property. /// /// - /// A task that represents the asynchronous read operation. The Result property will contain a tuple with the read bytes and the ble status code. + /// A task that represents the asynchronous read operation. The Result property will contain a tuple with the read bytes and the ble result code. /// Thrown if characteristic doesn't support read. See: /// Thrown if the reading of the value failed. - Task> ReadAsync(CancellationToken cancellationToken = default); + Task<(byte[] data, int resultCode)> ReadAsync(CancellationToken cancellationToken = default); /// /// Sends as characteristic value to the device. @@ -90,10 +90,10 @@ public interface ICharacteristic /// Data that should be written. /// /// - /// A task that represents the asynchronous read operation. The Task will finish after the value was written. The Result property will the errror + /// A task that represents the asynchronous write operation. The Task will finish after the value was written. The Result property will the errror /// code sent by the BLE device. (0 = successful) /// If the characteristic is write with response, the Task will finish if the value has been written. - /// If it is write without response, the task will immediately finish with true. + /// If it is write without response, the task will immediately finish with 0. /// /// Thrown if characteristic doesn't support write. See: /// Thrwon if is null. diff --git a/Source/Plugin.BLE/Windows/Characteristic.cs b/Source/Plugin.BLE/Windows/Characteristic.cs index 0b80ca2d..acac08bf 100644 --- a/Source/Plugin.BLE/Windows/Characteristic.cs +++ b/Source/Plugin.BLE/Windows/Characteristic.cs @@ -47,11 +47,11 @@ protected override async Task> GetDescriptorsNativeAs .ToList(); } - protected override async Task> ReadNativeAsync() + protected override async Task<(byte[] data, int resultCode)> ReadNativeAsync() { var readResult = await NativeCharacteristic.ReadValueAsync(BleImplementation.CacheModeCharacteristicRead); var _value = readResult.GetValueOrThrowIfError(); - return Tuple.Create(_value, (int)readResult.Status); + return (_value, (int)readResult.Status); } protected override async Task StartUpdatesNativeAsync(CancellationToken cancellationToken = default) From 25d356fdd3a208b769284bd6d10b3cac3d3dd9b1 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 18 May 2023 10:03:04 +0200 Subject: [PATCH 327/527] add a cleanup script * for properly cleaning up all kinds of files generated by the build process --- cleanup.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 cleanup.sh diff --git a/cleanup.sh b/cleanup.sh new file mode 100755 index 00000000..a6284fc1 --- /dev/null +++ b/cleanup.sh @@ -0,0 +1,7 @@ +#/bin/sh + +# remove 'bin' and 'obj' directories +find . -type d \( -name 'bin' -o -name 'obj' \) -prune -exec rm -rf {} \; + +# remove Resource.designer.cs files +find . -name 'Resource.designer.cs' -exec rm -rf {} \; From 9135392ae35925b08ab1a8ce5a73800ef4bde7ea Mon Sep 17 00:00:00 2001 From: mos Date: Sun, 21 May 2023 07:34:02 +0200 Subject: [PATCH 328/527] Simplified BondStatusBroadcastReceiver. --- .../BondStatusBroadcastReceiver.cs | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index 9f777f92..b37a4b25 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -23,24 +23,18 @@ public override void OnReceive(Context context, Intent intent) { if (BondStateChanged == null) return; - var bondState = (global::Android.Bluetooth.Bond)intent.GetIntExtra(BluetoothDevice.ExtraBondState, (int)global::Android.Bluetooth.Bond.None); + var extraBondState = (Bond)intent.GetIntExtra(BluetoothDevice.ExtraBondState, (int)Bond.None); var bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); var device = new Device(BroadCastAdapter, bluetoothDevice, null, 0); - switch (bondState) + DeviceBondState bondState = DeviceBondState.NotSupported; + switch (extraBondState) { - case global::Android.Bluetooth.Bond.None: - BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.NotBonded }); - break; - - case global::Android.Bluetooth.Bond.Bonding: - BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.Bonding }); - break; - - case global::Android.Bluetooth.Bond.Bonded: - BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.Bonded }); - break; - + case Bond.None: bondState = DeviceBondState.NotBonded; break; + case Bond.Bonding: bondState = DeviceBondState.Bonding; break; + case Bond.Bonded: bondState = DeviceBondState.Bonded; break; } + BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = bondState }); ; } + } } \ No newline at end of file From 92874a4d0489be3ee0a8560e5c10f3e13aabd249 Mon Sep 17 00:00:00 2001 From: mos Date: Sun, 21 May 2023 10:26:47 +0200 Subject: [PATCH 329/527] Created DeviceBondStateExtension to host method to map from the native bond state to DeviceBondState --- .../BondStatusBroadcastReceiver.cs | 9 ++----- Source/Plugin.BLE/Android/Device.cs | 14 ++-------- .../Extensions/DeviceBondStateExtension.cs | 27 +++++++++++++++++++ Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 2 +- 4 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 Source/Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index b37a4b25..79eeab8e 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -4,6 +4,7 @@ using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.EventArgs; using Plugin.BLE.Android; +using Plugin.BLE.Extensions; namespace Plugin.BLE.BroadcastReceivers { @@ -26,13 +27,7 @@ public override void OnReceive(Context context, Intent intent) var extraBondState = (Bond)intent.GetIntExtra(BluetoothDevice.ExtraBondState, (int)Bond.None); var bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); var device = new Device(BroadCastAdapter, bluetoothDevice, null, 0); - DeviceBondState bondState = DeviceBondState.NotSupported; - switch (extraBondState) - { - case Bond.None: bondState = DeviceBondState.NotBonded; break; - case Bond.Bonding: bondState = DeviceBondState.Bonding; break; - case Bond.Bonded: bondState = DeviceBondState.Bonded; break; - } + DeviceBondState bondState = extraBondState.FromNative(); BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = bondState }); ; } diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index a7f103de..4a7c8614 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -13,6 +13,7 @@ using Trace = Plugin.BLE.Abstractions.Trace; using System.Threading; using Java.Util; +using Plugin.BLE.Extensions; namespace Plugin.BLE.Android { @@ -435,18 +436,7 @@ protected override DeviceBondState GetBondState() Trace.Message($"[Warning]: Can't get bond state of {Name}. NativeDevice is null."); return DeviceBondState.NotSupported; } - var bondState = NativeDevice.BondState; - switch (bondState) - { - case global::Android.Bluetooth.Bond.None: - return DeviceBondState.NotBonded; - case global::Android.Bluetooth.Bond.Bonding: - return DeviceBondState.Bonding; - case global::Android.Bluetooth.Bond.Bonded: - return DeviceBondState.Bonded; - default: - return DeviceBondState.NotSupported; - } + return NativeDevice.BondState.FromNative(); } public override bool CreateBond() diff --git a/Source/Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs b/Source/Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs new file mode 100644 index 00000000..0bd444c0 --- /dev/null +++ b/Source/Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs @@ -0,0 +1,27 @@ +using Android.Bluetooth; +using Plugin.BLE.Abstractions; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Plugin.BLE.Extensions +{ + internal static class DeviceBondStateExtension + { + public static DeviceBondState FromNative(this Bond bondState) + { + switch (bondState) + { + case Bond.None: + return DeviceBondState.NotBonded; + case Bond.Bonding: + return DeviceBondState.Bonding; + case Bond.Bonded: + return DeviceBondState.Bonded; + default: + return DeviceBondState.NotSupported; + } + } + + } +} diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 758ca96e..6ae3999b 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -136,7 +136,7 @@ public interface IDevice : IDisposable /// Important: /// On iOS: /// Initiating a bonding request is not supported by iOS. The function simply returns false. - /// On Android: + /// On Android: Added in API level 19. /// Android system services will handle the necessary user interactions to confirm and complete the bonding process. /// For apps targeting Build.VERSION_CODES#R or lower, this requires the Manifest.permission#BLUETOOTH_ADMIN permission /// which can be gained with a simple ßuses-permissionß manifest tag. For apps targeting Build.VERSION_CODES#S or or higher, From cab7fac877667a1f1c3d47ded4974b13cefd1e68 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 21 May 2023 23:14:27 +0200 Subject: [PATCH 330/527] Release 3.0.0-beta.4 * update version in csproj files * amend changelog.md --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- doc/changelog.md | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 7505b181..f60b297b 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE - 3.0.0-beta.3 + 3.0.0-beta.4 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil MvvmCross.Plugin.BLE diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index da99c81f..bc9a933c 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 Plugin.BLE Plugin.BLE - 3.0.0-beta.3 + 3.0.0-beta.4 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil Plugin.BLE diff --git a/doc/changelog.md b/doc/changelog.md index 07ce9019..29693a5d 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -2,6 +2,13 @@ ## 3.0 MAUI +#### 3.0.0-beta.4 +- #669 Return error codes to application +- #671 Adding propagating disconnect event if happening during communication +- #679 Querying adapter capabilities: extended advertisements & coded PHY +- #685 Fix build on Mac +- #688 IsConnectable + #### 3.0.0-beta.3 - #650 Add support for .NET 7 - #671 Adding propagating disconnect event if happening during communication (Android) From 6db69213489225448393a6d77bb8a3984d242e3d Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 22 May 2023 09:22:37 +0200 Subject: [PATCH 331/527] fix changelog * #671 was already part of beta.3 --- doc/changelog.md | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/changelog.md b/doc/changelog.md index 29693a5d..e80d09a7 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -4,7 +4,6 @@ #### 3.0.0-beta.4 - #669 Return error codes to application -- #671 Adding propagating disconnect event if happening during communication - #679 Querying adapter capabilities: extended advertisements & coded PHY - #685 Fix build on Mac - #688 IsConnectable From d5315bf2bfdc838f1f33b02eb386a278ed016019 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 31 May 2023 22:58:44 +0200 Subject: [PATCH 332/527] fix license * replace placeholders by actual year and copyright owners --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 8dada3ed..0a33bd32 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright (c) 2023 The Plugin.BLE contributors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From d427d5d2792fab6875d7fd12d33d34783e30ef30 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 3 Jul 2023 21:47:32 +0200 Subject: [PATCH 333/527] dotnet format whitespace Source/BLE.sln --- .../ViewModels/DescriptorListViewModel.cs | 4 ++-- .../BLE.Client/ViewModels/DeviceListViewModel.cs | 6 +++--- Source/Plugin.BLE.Tests/CharacteristicBaseTests.cs | 2 +- Source/Plugin.BLE/Android/Adapter.cs | 6 +++--- .../BluetoothStatusBroadcastReceiver.cs | 2 +- Source/Plugin.BLE/Android/Device.cs | 5 +++-- .../Android/Extensions/ScanMatchModeExtension.cs | 2 +- Source/Plugin.BLE/Android/GattCallback.cs | 2 +- Source/Plugin.BLE/Android/Service.cs | 2 +- .../Plugin.BLE/Apple/BleCentralManagerDelegate.cs | 8 ++++---- Source/Plugin.BLE/Apple/Characteristic.cs | 13 +++++++------ Source/Plugin.BLE/Apple/Descriptor.cs | 2 +- Source/Plugin.BLE/Apple/Service.cs | 2 +- Source/Plugin.BLE/Shared/AdapterBase.cs | 6 +++--- Source/Plugin.BLE/Shared/CharacteristicWriteType.cs | 2 +- Source/Plugin.BLE/Shared/ConnectionInterval.cs | 2 +- Source/Plugin.BLE/Shared/Contracts/IAdapter.cs | 2 +- .../Plugin.BLE/Shared/Contracts/ICharacteristic.cs | 2 +- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 2 +- .../Shared/Extensions/AdapterExtension.cs | 4 ++-- 20 files changed, 39 insertions(+), 37 deletions(-) diff --git a/Source/BLE.Client/BLE.Client/ViewModels/DescriptorListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/DescriptorListViewModel.cs index 8cb2d1c4..bdc7cb64 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/DescriptorListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/DescriptorListViewModel.cs @@ -10,7 +10,7 @@ public class DescriptorListViewModel : BaseViewModel private readonly IMvxNavigationService _navigation; private ICharacteristic _characteristic; - public IReadOnlyList Descriptors { get; private set;} + public IReadOnlyList Descriptors { get; private set; } public DescriptorListViewModel(IAdapter adapter, IMvxNavigationService navigation) : base(adapter) { @@ -53,7 +53,7 @@ public IDescriptor SelectedDescriptor { var bundle = new MvxBundle(new Dictionary(Bundle.Data) { { DescriptorIdKey, value.Id.ToString() } }); - _navigation.Navigate(bundle); + _navigation.Navigate(bundle); } RaisePropertyChanged(); diff --git a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs index da8e89dc..844ae516 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs @@ -38,8 +38,8 @@ public Guid PreviousGuid } } - public MvxCommand RefreshCommand => new MvxCommand(() => TryStartScanning(refresh:true,filter:false)); - public MvxCommand RefreshFilteredScanCommand => new MvxCommand(() => TryStartScanning(refresh:true,filter:true)); + public MvxCommand RefreshCommand => new MvxCommand(() => TryStartScanning(refresh: true, filter: false)); + public MvxCommand RefreshFilteredScanCommand => new MvxCommand(() => TryStartScanning(refresh: true, filter: true)); public MvxCommand EmptyDevicesCommand => new MvxCommand(() => { @@ -349,7 +349,7 @@ private async Task ScanForDevicesFiltered() scanFilterOptions.ServiceUuids = list.ToArray(); } - await Adapter.StartScanningForDevicesAsync(scanFilterOptions,_cancellationTokenSource.Token); + await Adapter.StartScanningForDevicesAsync(scanFilterOptions, _cancellationTokenSource.Token); } private async Task UpdateConnectedDevices() diff --git a/Source/Plugin.BLE.Tests/CharacteristicBaseTests.cs b/Source/Plugin.BLE.Tests/CharacteristicBaseTests.cs index 010f6467..3fc01805 100644 --- a/Source/Plugin.BLE.Tests/CharacteristicBaseTests.cs +++ b/Source/Plugin.BLE.Tests/CharacteristicBaseTests.cs @@ -6,7 +6,7 @@ using Xunit; namespace Plugin.BLE.Tests -{ +{ public class CharacteristicBaseTests { [Theory(DisplayName = "Setting WriteType to not supported type throws InvalidOperationException")] diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index 8007cc58..6c5bd595 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -132,7 +132,7 @@ private void StartScanningNew(ScanFilterOptions scanFilterOptions) { Trace.Message($"Device address {deviceAddress} is invalid. The correct format is \"01:02:03:AB:CD:EF\""); } - + } } if (scanFilterOptions.HasDeviceNames) @@ -144,7 +144,7 @@ private void StartScanningNew(ScanFilterOptions scanFilterOptions) scanFilters.Add(sfb.Build()); } } - + } var ssb = new ScanSettings.Builder(); @@ -167,7 +167,7 @@ private void StartScanningNew(ScanFilterOptions scanFilterOptions) Trace.Message("Using ScanMatchMode Agressive"); } } - + #if NET6_0_OR_GREATER if (OperatingSystem.IsAndroidVersionAtLeast(26)) #else diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BluetoothStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BluetoothStatusBroadcastReceiver.cs index 641f7d86..443ed38d 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BluetoothStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BluetoothStatusBroadcastReceiver.cs @@ -30,7 +30,7 @@ public override void OnReceive(Context context, Intent intent) return; } - var btState = (State) state; + var btState = (State)state; _stateChangedHandler?.Invoke(btState.ToBluetoothState()); } } diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index efb8468a..d2853298 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -40,7 +40,7 @@ public class Device : DeviceBase /// public ConnectParameters ConnectParameters { get; private set; } - public Device(Adapter adapter, BluetoothDevice nativeDevice, BluetoothGatt gatt, int rssi = 0, byte[] advertisementData = null, bool isConnectable = true) + public Device(Adapter adapter, BluetoothDevice nativeDevice, BluetoothGatt gatt, int rssi = 0, byte[] advertisementData = null, bool isConnectable = true) : base(adapter, nativeDevice) { Update(nativeDevice, gatt); @@ -418,7 +418,8 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv public override bool IsConnectable { get; protected set; } - public override bool SupportsIsConnectable { + public override bool SupportsIsConnectable + { get => #if NET6_0_OR_GREATER OperatingSystem.IsAndroidVersionAtLeast(26); diff --git a/Source/Plugin.BLE/Android/Extensions/ScanMatchModeExtension.cs b/Source/Plugin.BLE/Android/Extensions/ScanMatchModeExtension.cs index ff71abad..6bad16de 100644 --- a/Source/Plugin.BLE/Android/Extensions/ScanMatchModeExtension.cs +++ b/Source/Plugin.BLE/Android/Extensions/ScanMatchModeExtension.cs @@ -8,7 +8,7 @@ internal static class ScanMatchModeExtension { public static BluetoothScanMatchMode ToNative(this ScanMatchMode matchMode) { - switch(matchMode) + switch (matchMode) { case ScanMatchMode.AGRESSIVE: return BluetoothScanMatchMode.Aggressive; diff --git a/Source/Plugin.BLE/Android/GattCallback.cs b/Source/Plugin.BLE/Android/GattCallback.cs index e55ebdf2..b73fed22 100644 --- a/Source/Plugin.BLE/Android/GattCallback.cs +++ b/Source/Plugin.BLE/Android/GattCallback.cs @@ -88,7 +88,7 @@ public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus stat } } else - { + { //connection must have been lost, because the callback was not triggered by calling disconnect Trace.Message($"Disconnected '{_device.Name}' by lost connection"); diff --git a/Source/Plugin.BLE/Android/Service.cs b/Source/Plugin.BLE/Android/Service.cs index 05f089a9..c0709e0c 100644 --- a/Source/Plugin.BLE/Android/Service.cs +++ b/Source/Plugin.BLE/Android/Service.cs @@ -16,7 +16,7 @@ public class Service : ServiceBase public override Guid Id => Guid.ParseExact(NativeService.Uuid.ToString(), "d"); public override bool IsPrimary => NativeService.Type == GattServiceType.Primary; - public Service(BluetoothGattService nativeService, BluetoothGatt gatt, IGattCallback gattCallback, IDevice device) + public Service(BluetoothGattService nativeService, BluetoothGatt gatt, IGattCallback gattCallback, IDevice device) : base(device, nativeService) { _gatt = gatt; diff --git a/Source/Plugin.BLE/Apple/BleCentralManagerDelegate.cs b/Source/Plugin.BLE/Apple/BleCentralManagerDelegate.cs index 408e3b3b..9c413706 100644 --- a/Source/Plugin.BLE/Apple/BleCentralManagerDelegate.cs +++ b/Source/Plugin.BLE/Apple/BleCentralManagerDelegate.cs @@ -20,7 +20,7 @@ public interface IBleCentralManagerDelegate public class BleCentralManagerDelegate : CBCentralManagerDelegate, IBleCentralManagerDelegate { -#region IBleCentralManagerDelegate events + #region IBleCentralManagerDelegate events private event EventHandler _willRestoreState; @@ -91,9 +91,9 @@ event EventHandler IBleCentralManagerDelegate.ConnectedPe remove => _connectedPeripheral -= value; } -#endregion + #endregion -#region Event wiring + #region Event wiring public override void WillRestoreState(CBCentralManager central, NSDictionary dict) { @@ -139,6 +139,6 @@ public override void ConnectedPeripheral(CBCentralManager central, CBPeripheral _connectedPeripheral?.Invoke(this, new CBPeripheralEventArgs(peripheral)); } -#endregion + #endregion } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Apple/Characteristic.cs b/Source/Plugin.BLE/Apple/Characteristic.cs index df16d63b..bb565481 100644 --- a/Source/Plugin.BLE/Apple/Characteristic.cs +++ b/Source/Plugin.BLE/Apple/Characteristic.cs @@ -34,14 +34,14 @@ public override byte[] Value { return new byte[0]; } - + return value.ToArray(); } - } + } public override CharacteristicPropertyType Properties => (CharacteristicPropertyType)(int)NativeCharacteristic.Properties; - public Characteristic(CBCharacteristic nativeCharacteristic, CBPeripheral parentDevice, IService service, IBleCentralManagerDelegate bleCentralManagerDelegate) + public Characteristic(CBCharacteristic nativeCharacteristic, CBPeripheral parentDevice, IService service, IBleCentralManagerDelegate bleCentralManagerDelegate) : base(service, nativeCharacteristic) { _parentDevice = parentDevice; @@ -134,7 +134,7 @@ protected override Task WriteNativeAsync(byte[] data, CharacteristicWriteTy if (writeType.ToNative() == CBCharacteristicWriteType.WithResponse) { task = TaskBuilder.FromEvent, EventHandler>( - execute: () => + execute: () => { if (_parentDevice.State != CBPeripheralState.Connected) throw exception; @@ -190,7 +190,8 @@ protected override Task WriteNativeAsync(byte[] data, CharacteristicWriteTy unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler); } - else { + else + { task = Task.FromResult(0); } } @@ -240,7 +241,7 @@ protected override Task StartUpdatesNativeAsync(CancellationToken cancellationTo reject(new Exception($"Device {Service.Device.Id} disconnected while starting updates for characteristic with {Id}.")); }), subscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral += handler, - unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler, + unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler, token: cancellationToken); } diff --git a/Source/Plugin.BLE/Apple/Descriptor.cs b/Source/Plugin.BLE/Apple/Descriptor.cs index bc243eaa..190420cc 100644 --- a/Source/Plugin.BLE/Apple/Descriptor.cs +++ b/Source/Plugin.BLE/Apple/Descriptor.cs @@ -35,7 +35,7 @@ public override byte[] Value private readonly CBPeripheral _parentDevice; private readonly IBleCentralManagerDelegate _bleCentralManagerDelegate; - public Descriptor(CBDescriptor nativeDescriptor, CBPeripheral parentDevice, ICharacteristic characteristic, IBleCentralManagerDelegate bleCentralManagerDelegate) + public Descriptor(CBDescriptor nativeDescriptor, CBPeripheral parentDevice, ICharacteristic characteristic, IBleCentralManagerDelegate bleCentralManagerDelegate) : base(characteristic, nativeDescriptor) { _parentDevice = parentDevice; diff --git a/Source/Plugin.BLE/Apple/Service.cs b/Source/Plugin.BLE/Apple/Service.cs index 47055263..7c515ccc 100644 --- a/Source/Plugin.BLE/Apple/Service.cs +++ b/Source/Plugin.BLE/Apple/Service.cs @@ -17,7 +17,7 @@ public class Service : ServiceBase public override Guid Id => NativeService.UUID.GuidFromUuid(); public override bool IsPrimary => NativeService.Primary; - public Service(CBService nativeService, IDevice device, IBleCentralManagerDelegate bleCentralManagerDelegate) + public Service(CBService nativeService, IDevice device, IBleCentralManagerDelegate bleCentralManagerDelegate) : base(device, nativeService) { _device = device.NativeDevice as CBPeripheral; diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index 8ea957af..b4562b9b 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -101,9 +101,9 @@ public bool IsScanning /// Starts scanning for BLE devices that fulfill the . /// DeviceDiscovered will only be called, if returns true for the discovered device. /// - public async Task StartScanningForDevicesAsync(ScanFilterOptions scanFilterOptions, - Func deviceFilter = null, - bool allowDuplicatesKey = false, + public async Task StartScanningForDevicesAsync(ScanFilterOptions scanFilterOptions, + Func deviceFilter = null, + bool allowDuplicatesKey = false, CancellationToken cancellationToken = default) { if (IsScanning) diff --git a/Source/Plugin.BLE/Shared/CharacteristicWriteType.cs b/Source/Plugin.BLE/Shared/CharacteristicWriteType.cs index ca3ed866..1f3b73d5 100644 --- a/Source/Plugin.BLE/Shared/CharacteristicWriteType.cs +++ b/Source/Plugin.BLE/Shared/CharacteristicWriteType.cs @@ -9,7 +9,7 @@ public enum CharacteristicWriteType /// Value should be written with response if supported, else without response. /// Default, - + /// /// Value should be written with response. /// diff --git a/Source/Plugin.BLE/Shared/ConnectionInterval.cs b/Source/Plugin.BLE/Shared/ConnectionInterval.cs index 6e1da3ed..2c487f90 100644 --- a/Source/Plugin.BLE/Shared/ConnectionInterval.cs +++ b/Source/Plugin.BLE/Shared/ConnectionInterval.cs @@ -24,6 +24,6 @@ public enum ConnectionInterval /// This is mapped to CONNECTION_PRIORITY_LOW_POWER, /// see https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER /// - Low = 2 + Low = 2 } } diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index 492f39f8..7b46c442 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -157,7 +157,7 @@ public interface IAdapter /// IMPORTANT: Only considered by iOS due to platform limitations. Filters devices by advertised services. SET THIS VALUE FOR ANY RESULTS /// List of IDevices connected to the OS. In case of no devices the list is empty. IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null); - + /// /// Returns a list of paired BLE devices for the given UUIDs. /// diff --git a/Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs b/Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs index a6b37eb7..34907fc7 100644 --- a/Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs +++ b/Source/Plugin.BLE/Shared/Contracts/ICharacteristic.cs @@ -69,7 +69,7 @@ public interface ICharacteristic /// Indicates wheter the characteristic supports notify or not. /// bool CanUpdate { get; } - + /// /// Returns the parent service. Use this to access the device. /// diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 89ddc700..76ff49a0 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs b/Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs index 8e8db5b8..1f4fd175 100644 --- a/Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs +++ b/Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs @@ -34,7 +34,7 @@ public static Task StartScanningForDevicesAsync(this IAdapter adapter, Cancellat /// A task that represents the asynchronous read operation. The Task will finish after the scan has ended. public static Task StartScanningForDevicesAsync(this IAdapter adapter, Guid[] serviceUuids, CancellationToken cancellationToken = default) { - return adapter.StartScanningForDevicesAsync(new ScanFilterOptions(){ServiceUuids = serviceUuids}, null, cancellationToken: cancellationToken); + return adapter.StartScanningForDevicesAsync(new ScanFilterOptions() { ServiceUuids = serviceUuids }, null, cancellationToken: cancellationToken); } /// @@ -115,7 +115,7 @@ public static async Task DiscoverDeviceAsync(this IAdapter adapter, Fun /// Thrown if the device connection fails. public static Task ConnectToDeviceAsync(this IAdapter adapter, IDevice device, ConnectParameters connectParameters, CancellationToken cancellationToken) { - return adapter.ConnectToDeviceAsync(device, connectParameters:connectParameters, cancellationToken: cancellationToken); + return adapter.ConnectToDeviceAsync(device, connectParameters: connectParameters, cancellationToken: cancellationToken); } } } \ No newline at end of file From 9dd6d65bb7d5b924a7b87b6b19c7faec53199bfb Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 3 Jul 2023 21:50:37 +0200 Subject: [PATCH 334/527] IAdapter: rename 'supportsExtendedAdvertising' and 'supportsCodedPHY' * use Pasal case, according to common C# coding style (see e.g. https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/coding-style.md) --- Source/Plugin.BLE/Android/Adapter.cs | 4 ++-- Source/Plugin.BLE/Apple/Adapter.cs | 2 +- Source/Plugin.BLE/Shared/AdapterBase.cs | 4 ++-- Source/Plugin.BLE/Shared/Contracts/IAdapter.cs | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index 6c5bd595..e2ecb128 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -274,7 +274,7 @@ public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) return devices.Where(item => ids.Contains(item.Id)).ToList(); } - public override bool supportsExtendedAdvertising() + public override bool SupportsExtendedAdvertising() { #if NET6_0_OR_GREATER if (OperatingSystem.IsAndroidVersionAtLeast(26)) @@ -290,7 +290,7 @@ public override bool supportsExtendedAdvertising() } } - public override bool supportsCodedPHY() + public override bool SupportsCodedPHY() { #if NET6_0_OR_GREATER if (OperatingSystem.IsAndroidVersionAtLeast(26)) diff --git a/Source/Plugin.BLE/Apple/Adapter.cs b/Source/Plugin.BLE/Apple/Adapter.cs index 98b18a5f..bfe85544 100644 --- a/Source/Plugin.BLE/Apple/Adapter.cs +++ b/Source/Plugin.BLE/Apple/Adapter.cs @@ -428,7 +428,7 @@ public static List ParseAdvertismentData(NSDictionary adver } #if NET6_0_OR_GREATER || __IOS__ - public override bool supportsExtendedAdvertising() + public override bool SupportsExtendedAdvertising() { #if NET6_0_OR_GREATER if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsTvOSVersionAtLeast(13) || OperatingSystem.IsMacCatalystVersionAtLeast(13)) diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index b4562b9b..869ee23a 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -360,11 +360,11 @@ public void HandleConnectionFail(IDevice device, string errorMessage) /// /// Indicates whether extended advertising (BLE5) is supported. /// - public virtual bool supportsExtendedAdvertising() => false; + public virtual bool SupportsExtendedAdvertising() => false; /// /// Indicates whether the Coded PHY feature (BLE5) is supported. /// - public virtual bool supportsCodedPHY() => false; + public virtual bool SupportsCodedPHY() => false; } } diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index 7b46c442..325b8d41 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -170,12 +170,12 @@ public interface IAdapter /// Indicates whether extended advertising (BLE5) is supported. /// /// true if extended advertising is supported, otherwise false. - bool supportsExtendedAdvertising(); + bool SupportsExtendedAdvertising(); /// /// Indicates whether the Coded PHY feature (BLE5) is supported. /// /// true if extended advertising is supported, otherwise false. - bool supportsCodedPHY(); + bool SupportsCodedPHY(); } } \ No newline at end of file From 0613a91553ee35fab1159650e51fde39191cec1a Mon Sep 17 00:00:00 2001 From: vitalii-vov <71486507+vitalii-vov@users.noreply.github.com> Date: Sun, 23 Jul 2023 11:23:37 +0300 Subject: [PATCH 335/527] Fixed crash with incorrect data in advertisement data on android (#719) * catch exceptions when parsing and print debug output * show device address in output * return the list of correctly parsed records even in case of errors --------- Co-authored-by: vitvov --- Source/Plugin.BLE/Android/Device.cs | 94 ++++++++++++++++------------- 1 file changed, 51 insertions(+), 43 deletions(-) diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index d2853298..d9773b1c 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -13,6 +13,7 @@ using Trace = Plugin.BLE.Abstractions.Trace; using System.Threading; using Java.Util; +using Plugin.BLE.Abstractions.Extensions; namespace Plugin.BLE.Android { @@ -255,64 +256,71 @@ private Guid ParseDeviceId() return new Guid(deviceGuid); } - public static List ParseScanRecord(byte[] scanRecord) + public List ParseScanRecord(byte[] scanRecord) { var records = new List(); if (scanRecord == null) return records; - int index = 0; - while (index < scanRecord.Length) + try { - byte length = scanRecord[index++]; - //Done once we run out of records - // 1 byte for type and length-1 bytes for data - if (length == 0) break; - - int type = scanRecord[index]; - //Done if our record isn't a valid type - if (type == 0) break; - - if (!Enum.IsDefined(typeof(AdvertisementRecordType), type)) + int index = 0; + while (index < scanRecord.Length) { - Trace.Message("Advertisment record type not defined: {0}", type); - break; - } + byte length = scanRecord[index++]; + //Done once we run out of records + // 1 byte for type and length-1 bytes for data + if (length == 0) break; - //data length is length -1 because type takes the first byte - byte[] data = new byte[length - 1]; - Array.Copy(scanRecord, index + 1, data, 0, length - 1); + int type = scanRecord[index]; + //Done if our record isn't a valid type + if (type == 0) break; - // don't forget that data is little endian so reverse - // Supplement to Bluetooth Core Specification 1 - // NOTE: all relevant devices are already little endian, so this is not necessary for any type except UUIDs - //var record = new AdvertisementRecord((AdvertisementRecordType)type, data.Reverse().ToArray()); - - switch ((AdvertisementRecordType)type) - { - case AdvertisementRecordType.ServiceDataUuid32Bit: - case AdvertisementRecordType.SsUuids128Bit: - case AdvertisementRecordType.SsUuids16Bit: - case AdvertisementRecordType.SsUuids32Bit: - case AdvertisementRecordType.UuidCom32Bit: - case AdvertisementRecordType.UuidsComplete128Bit: - case AdvertisementRecordType.UuidsComplete16Bit: - case AdvertisementRecordType.UuidsIncomple16Bit: - case AdvertisementRecordType.UuidsIncomplete128Bit: - Array.Reverse(data); + if (!Enum.IsDefined(typeof(AdvertisementRecordType), type)) + { + Trace.Message("Advertisment record type not defined: {0}", type); break; - } - var record = new AdvertisementRecord((AdvertisementRecordType)type, data); + } - Trace.Message(record.ToString()); + //data length is length -1 because type takes the first byte + byte[] data = new byte[length - 1]; + Array.Copy(scanRecord, index + 1, data, 0, length - 1); - records.Add(record); + // don't forget that data is little endian so reverse + // Supplement to Bluetooth Core Specification 1 + // NOTE: all relevant devices are already little endian, so this is not necessary for any type except UUIDs + //var record = new AdvertisementRecord((AdvertisementRecordType)type, data.Reverse().ToArray()); - //Advance - index += length; + switch ((AdvertisementRecordType)type) + { + case AdvertisementRecordType.ServiceDataUuid32Bit: + case AdvertisementRecordType.SsUuids128Bit: + case AdvertisementRecordType.SsUuids16Bit: + case AdvertisementRecordType.SsUuids32Bit: + case AdvertisementRecordType.UuidCom32Bit: + case AdvertisementRecordType.UuidsComplete128Bit: + case AdvertisementRecordType.UuidsComplete16Bit: + case AdvertisementRecordType.UuidsIncomple16Bit: + case AdvertisementRecordType.UuidsIncomplete128Bit: + Array.Reverse(data); + break; + } + var record = new AdvertisementRecord((AdvertisementRecordType)type, data); + + Trace.Message(record.ToString()); + + records.Add(record); + + //Advance + index += length; + } + } + catch(Exception) + { + //There may be a situation where scanRecord contains incorrect data. + Trace.Message("Failed to parse advertisementData. Device address: {0}, Data: {1}", NativeDevice.Address, scanRecord.ToHexString()); } - return records; } From 1ee84f4a8d23d3c8a309f2912eeeef053ea27699 Mon Sep 17 00:00:00 2001 From: travis012 Date: Mon, 24 Jul 2023 17:15:42 -0600 Subject: [PATCH 336/527] Fix windows connect/disconnect issues #528, #536, #423 --- Source/Plugin.BLE/Windows/Adapter.cs | 50 ++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 88e18ac9..43bdbd44 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -19,6 +19,7 @@ using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; +using System.Collections.Concurrent; namespace Plugin.BLE.UWP { @@ -28,6 +29,12 @@ public class Adapter : AdapterBase private BluetoothLEAdvertisementWatcher _bleWatcher; private DispatcherQueue _dq; + /// + /// Registry used to store device instances for pending operations : disconnect + /// Helps to detect connection lost events. + /// + private readonly IDictionary _deviceOperationRegistry = new ConcurrentDictionary(); + public Adapter(BluetoothLEHelper bluetoothHelper) { _bluetoothHelper = bluetoothHelper; @@ -82,7 +89,36 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect ConnectedDeviceRegistry[device.Id.ToString()] = device; + // TODO: ObservableBluetoothLEDevice.ConnectAsync needs updated to include a cancelation token param + // currently it is hardcoded to 5000ms. On windows users should not use cancellation tokens with + // timeouts that are <= 5000ms await nativeDevice.ConnectAsync(); + + if (nativeDevice.BluetoothLEDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) + { + // use DisconnectDeviceNative to clean up resources otherwise windows won't disconnect the device + // after a subsequent successful connection (#528, #536, #423) + DisconnectDeviceNative(device); + + // fire a connection failed event + HandleConnectionFail(device, "Failed connecting to device."); + + // this is normally done in Device_ConnectionStatusChanged but since nothing actually connected + // or disconnect, ConnectionStatusChanged will not fire. + ConnectedDeviceRegistry.TryRemove(device.Id.ToString(), out _); + } + else if (cancellationToken.IsCancellationRequested) + { + // connection attempt succeeded but was cancelled before it could be completed + // see TODO above. + + // cleanup resources + DisconnectDeviceNative(device); + } + else + { + _deviceOperationRegistry[device.Id.ToString()] = device; + } } private void Device_ConnectionStatusChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) @@ -106,7 +142,16 @@ private void Device_ConnectionStatusChanged(object sender, PropertyChangedEventA if (!nativeDevice.IsConnected && ConnectedDeviceRegistry.TryRemove(address, out var disconnectedDevice)) { - HandleDisconnectedDevice(true, disconnectedDevice); + bool isNormalDisconnect = !_deviceOperationRegistry.Remove(disconnectedDevice.Id.ToString()); + if (!isNormalDisconnect) + { + // device was powered off or went out of range. Call DisconnectDeviceNative to cleanup + // resources otherwise windows will not disconnect on a subsequent connect-disconnect. + DisconnectDeviceNative(disconnectedDevice); + } + + // fire the correct event (DeviceDisconnected or DeviceConnectionLost) + HandleDisconnectedDevice(isNormalDisconnect, disconnectedDevice); } } @@ -117,8 +162,9 @@ protected override void DisconnectDeviceNative(IDevice device) if (device.NativeDevice is ObservableBluetoothLEDevice) { + _deviceOperationRegistry.Remove(device.Id.ToString()); ((Device)device).ClearServices(); - device.Dispose(); + device.Dispose(); } } From e984ecc14c2d5c136f52beb4d4aca478c201000d Mon Sep 17 00:00:00 2001 From: travis012 Date: Tue, 25 Jul 2023 12:16:34 -0600 Subject: [PATCH 337/527] Don't use device.Dispose() on windows in DisconnectDeviceAsync to free resources. Fixes #620 --- Source/Plugin.BLE/Windows/Adapter.cs | 5 ++++- Source/Plugin.BLE/Windows/Device.cs | 21 +++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 43bdbd44..f79826de 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -164,7 +164,10 @@ protected override void DisconnectDeviceNative(IDevice device) { _deviceOperationRegistry.Remove(device.Id.ToString()); ((Device)device).ClearServices(); - device.Dispose(); + + // [TR 07-25-23] don't actually dispose the device. Dispose has special meaning on Windows. + // Once an object is "Disposed" it cannot be accessed in any way. + ((Device)device).FreeResources(); } } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 904cdc98..89e17eda 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -11,6 +11,7 @@ using CommunityToolkit.WinUI.Connectivity; #endif using Windows.Devices.Bluetooth; +using Windows.Devices.Enumeration; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; @@ -92,13 +93,29 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv public override void Dispose() { - NativeDevice.Services.ToList().ForEach(s => + FreeResources(false); + } + + internal void FreeResources(bool recreateNativeDevice = true) + { + NativeDevice?.Services?.ToList().ForEach(s => { s?.Service?.Session?.Dispose(); s?.Service?.Dispose(); }); - NativeDevice.BluetoothLEDevice?.Dispose(); + // save these so we can re-create ObservableBluetoothLEDevice if needed + var tempDevInfo = NativeDevice?.DeviceInfo; + var tempDq = NativeDevice?.DispatcherQueue; + + NativeDevice?.BluetoothLEDevice?.Dispose(); + + // the ObservableBluetoothLEDevice doesn't really support the BluetoothLEDevice + // being disposed so we need to recreate it. What we really need is to be able + // to set NativeDevice?.BluetoothLEDevice = null; + if (recreateNativeDevice) + NativeDevice = new ObservableBluetoothLEDevice(tempDevInfo, tempDq); + GC.Collect(); } From 75e0ced4eb5b6ff189ba6e16dc663ac246318848 Mon Sep 17 00:00:00 2001 From: Jeff Haynes Date: Sun, 30 Jul 2023 16:49:32 -0400 Subject: [PATCH 338/527] bonding working --- Source/Plugin.BLE/Android/Adapter.cs | 60 ++++++++++++++++--- .../BondStatusBroadcastReceiver.cs | 35 +++++------ Source/Plugin.BLE/Android/Device.cs | 19 ++++++ Source/Plugin.BLE/Apple/Adapter.cs | 5 ++ Source/Plugin.BLE/Shared/AdapterBase.cs | 2 + .../Plugin.BLE/Shared/Contracts/IAdapter.cs | 2 + .../DeviceBondStateChangedEventArgs.cs | 2 +- Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs | 5 ++ Source/Plugin.BLE/Windows/Adapter.cs | 5 ++ 9 files changed, 108 insertions(+), 27 deletions(-) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index e2ecb128..83e5c7cf 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -3,12 +3,15 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using Android.App; using Android.Bluetooth; using Android.Bluetooth.LE; +using Android.Content; using Android.OS; using Java.Util; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.BroadcastReceivers; using Plugin.BLE.Extensions; using Object = Java.Lang.Object; using Trace = Plugin.BLE.Abstractions.Trace; @@ -22,22 +25,37 @@ public class Adapter : AdapterBase private readonly Api18BleScanCallback _api18ScanCallback; private readonly Api21BleScanCallback _api21ScanCallback; + private readonly Dictionary> _bondingTcsForAddress = new(); + public Adapter(BluetoothManager bluetoothManager) { _bluetoothManager = bluetoothManager; _bluetoothAdapter = bluetoothManager.Adapter; + + var bondStatusBroadcastReceiver = new BondStatusBroadcastReceiver(); + Application.Context.RegisterReceiver(bondStatusBroadcastReceiver, + new IntentFilter(BluetoothDevice.ActionBondStateChanged)); + + //forward events from broadcast receiver + bondStatusBroadcastReceiver.BondStateChanged += (s, args) => + { + if (!_bondingTcsForAddress.TryGetValue(args.Address, out var tcs)) + { + return; + } + if (args.State == DeviceBondState.Bonding) + { + return; + } - // TODO: bonding - //var bondStatusBroadcastReceiver = new BondStatusBroadcastReceiver(); - //Application.Context.RegisterReceiver(bondStatusBroadcastReceiver, - // new IntentFilter(BluetoothDevice.ActionBondStateChanged)); + if (args.State == DeviceBondState.Bonded) + { + tcs.TrySetResult(true); + } - ////forward events from broadcast receiver - //bondStatusBroadcastReceiver.BondStateChanged += (s, args) => - //{ - // //DeviceBondStateChanged(this, args); - //}; + tcs.TrySetException(new Exception("Bonding failed.")); + }; if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { @@ -49,6 +67,30 @@ public Adapter(BluetoothManager bluetoothManager) } } + public override Task BondAsync(IDevice device) + { + if (device == null) + throw new ArgumentNullException(nameof(device)); + + if (!(device.NativeDevice is BluetoothDevice nativeDevice)) + throw new ArgumentException("Invalid device type"); + + if (nativeDevice.BondState == Bond.Bonded) + return Task.CompletedTask; + + var tcs = new TaskCompletionSource(); + + _bondingTcsForAddress.Add(nativeDevice.Address!, tcs); + + if (!nativeDevice.CreateBond()) + { + _bondingTcsForAddress.Remove(nativeDevice.Address); + throw new Exception("Bonding failed"); + } + + return tcs.Task; + } + protected override Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop) diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index 96bba489..68dae876 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -3,11 +3,9 @@ using Android.Content; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.EventArgs; -using Plugin.BLE.Android; namespace Plugin.BLE.BroadcastReceivers { - //[BroadcastReceiver] public class BondStatusBroadcastReceiver : BroadcastReceiver { public event EventHandler BondStateChanged; @@ -15,27 +13,30 @@ public class BondStatusBroadcastReceiver : BroadcastReceiver public override void OnReceive(Context context, Intent intent) { var bondState = (Bond)intent.GetIntExtra(BluetoothDevice.ExtraBondState, (int)Bond.None); - //ToDo - var device = new Device(null, (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice), null); - Console.WriteLine(bondState.ToString()); - if (BondStateChanged == null) return; + var device = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); - switch (bondState) + var address = device?.Address; + + if (address == null) { - case Bond.None: - BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.NotBonded }); - break; + return; + } - case Bond.Bonding: - BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.Bonding }); - break; + var state = Convert(bondState); - case Bond.Bonded: - BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Device = device, State = DeviceBondState.Bonded }); - break; + BondStateChanged?.Invoke(this, new DeviceBondStateChangedEventArgs { Address = address, State = state }); + } - } + private static DeviceBondState Convert(Bond state) + { + return state switch + { + Bond.None => DeviceBondState.NotBonded, + Bond.Bonding => DeviceBondState.Bonding, + Bond.Bonded => DeviceBondState.Bonded, + _ => DeviceBondState.NotBonded + }; } } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index d9773b1c..a8d29c9f 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -35,6 +35,8 @@ public class Device : DeviceBase /// the registration must be disposed to avoid disconnecting after a connection /// private CancellationTokenRegistration _connectCancellationTokenRegistration; + + private TaskCompletionSource _bondCompleteTaskCompletionSource; /// /// the connect paramaters used when connecting to this device @@ -144,6 +146,23 @@ public void Connect(ConnectParameters connectParameters, CancellationToken cance } } + public Task BondAsync() + { + _bondCompleteTaskCompletionSource = new TaskCompletionSource(); + NativeDevice.CreateBond(); + return _bondCompleteTaskCompletionSource.Task; + } + + internal void SetBondState(DeviceBondState state) + { + if (state != DeviceBondState.Bonded) + { + return; + } + + _bondCompleteTaskCompletionSource?.TrySetResult(true); + } + private void ConnectToGattForceBleTransportAPI(bool autoconnect, CancellationToken cancellationToken) { //This parameter is present from API 18 but only public from API 23 diff --git a/Source/Plugin.BLE/Apple/Adapter.cs b/Source/Plugin.BLE/Apple/Adapter.cs index bfe85544..7561f4fe 100644 --- a/Source/Plugin.BLE/Apple/Adapter.cs +++ b/Source/Plugin.BLE/Apple/Adapter.cs @@ -149,6 +149,11 @@ public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCe }; } + public override Task BondAsync(IDevice device) + { + throw new NotSupportedException(); + } + protected override async Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { #if NET6_0_OR_GREATER || MACCATALYST diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index 869ee23a..478771d3 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -327,6 +327,8 @@ public void HandleConnectionFail(IDevice device, string errorMessage) }); } + public abstract Task BondAsync(IDevice device); + /// /// Native implementation of StartScanningForDevicesAsync. /// diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index 325b8d41..4d5ca142 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -76,6 +76,8 @@ public interface IAdapter /// IReadOnlyList ConnectedDevices { get; } + public Task BondAsync(IDevice device); + /// /// Starts scanning for BLE devices that fulfill the . /// DeviceDiscovered will only be called, if returns true for the discovered device. diff --git a/Source/Plugin.BLE/Shared/EventArgs/DeviceBondStateChangedEventArgs.cs b/Source/Plugin.BLE/Shared/EventArgs/DeviceBondStateChangedEventArgs.cs index ff582c8c..4b596e3f 100644 --- a/Source/Plugin.BLE/Shared/EventArgs/DeviceBondStateChangedEventArgs.cs +++ b/Source/Plugin.BLE/Shared/EventArgs/DeviceBondStateChangedEventArgs.cs @@ -10,7 +10,7 @@ public class DeviceBondStateChangedEventArgs : System.EventArgs /// /// The device. /// - public IDevice Device { get; set; } + public string Address { get; set; } /// /// The bond state. /// diff --git a/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs b/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs index 79d2aa4a..d8589f3b 100644 --- a/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs +++ b/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs @@ -14,6 +14,11 @@ public override Task ConnectToKnownDeviceAsync(Guid deviceGuid, Connect return Task.FromResult(null); } + public override Task BondAsync(IDevice device) + { + return Task.FromResult(0); + } + protected override Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { TraceUnavailability(); diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 88e18ac9..17836fb9 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -34,6 +34,11 @@ public Adapter(BluetoothLEHelper bluetoothHelper) _dq = DispatcherQueue.GetForCurrentThread(); } + public override Task BondAsync(IDevice device) + { + throw new NotImplementedException(); + } + protected override Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { var serviceUuids = scanFilterOptions?.ServiceUuids; From 24d04942ccbe59ddd3501e966fc64492a7a79d1d Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 5 Aug 2023 15:58:08 +0200 Subject: [PATCH 339/527] Release 3.0.0-beta.5 * update version in csproj files * amend changelog.md --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- doc/changelog.md | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index f60b297b..07d6596c 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE - 3.0.0-beta.4 + 3.0.0-beta.5 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil MvvmCross.Plugin.BLE diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index bc9a933c..f114d371 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 Plugin.BLE Plugin.BLE - 3.0.0-beta.4 + 3.0.0-beta.5 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil Plugin.BLE diff --git a/doc/changelog.md b/doc/changelog.md index e80d09a7..54eadac9 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -2,6 +2,11 @@ ## 3.0 MAUI +#### 3.0.0-beta.5 +- #721 Fix Windows connect/disconnect issues (fixes #423, #528, #536, #620) +- #719 Fixed crash with incorrect data in advertisement data on Android (fixes #567, #713) +- #708 Coding style fixes (fixes #693) + #### 3.0.0-beta.4 - #669 Return error codes to application - #679 Querying adapter capabilities: extended advertisements & coded PHY From 2f71abc49c2dc6baae7a270eaf626a0855d5111f Mon Sep 17 00:00:00 2001 From: travis012 Date: Sat, 5 Aug 2023 10:02:04 -0600 Subject: [PATCH 340/527] Add WIndows support for RequestMtuAsync. #727 --- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 1 + Source/Plugin.BLE/Windows/Device.cs | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 76ff49a0..19537772 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -87,6 +87,7 @@ public interface IDevice : IDisposable /// Important: /// On Android: This function will only work with API level 21 and higher. Other API level will get an default value as function result. /// On iOS: Requesting MTU sizes is not supported by iOS. The function will return the current negotiated MTU between master / slave. + /// On Windows: Requesting MTU sizes is not directly supported. Windows will always try and negotiate the maximum MTU between master / slave. The function will return the current negotiated MTU between master / slave. /// /// /// A task that represents the asynchronous operation. The result contains the negotiated MTU size between master and slave diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 89e17eda..660ebefc 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -79,10 +79,11 @@ protected override DeviceState GetState() return NativeDevice.IsPaired ? DeviceState.Limited : DeviceState.Disconnected; } - protected override Task RequestMtuNativeAsync(int requestValue) + protected override async Task RequestMtuNativeAsync(int requestValue) { - Trace.Message("Request MTU not supported in UWP"); - return Task.FromResult(-1); + var devId = BluetoothDeviceId.FromId(NativeDevice.BluetoothLEDevice.DeviceId); + using var gattSession = await Windows.Devices.Bluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); + return gattSession.MaxPduSize; } protected override bool UpdateConnectionIntervalNative(ConnectionInterval interval) From 6c527470defa02f120cd40b80635daa43c487190 Mon Sep 17 00:00:00 2001 From: mos Date: Sun, 6 Aug 2023 18:10:52 +0200 Subject: [PATCH 341/527] Removed CreateBond and ForgetBond for the moment --- Source/Plugin.BLE/Android/Device.cs | 41 ------------------- Source/Plugin.BLE/Apple/Device.cs | 13 ------ Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 23 ----------- Source/Plugin.BLE/Shared/DeviceBase.cs | 5 --- Source/Plugin.BLE/Windows/Device.cs | 12 ------ 5 files changed, 94 deletions(-) diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index 7f8b5940..c3d01ee6 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -440,46 +440,5 @@ protected override DeviceBondState GetBondState() return NativeDevice.BondState.FromNative(); } - public override bool CreateBond() - { - if (NativeDevice == null) - { - Trace.Message($"[Warning]: Can't create bond for {Name}. BluetoothDevice is null."); - return false; - } - else - { - return NativeDevice.CreateBond(); - } - } - - public override bool ForgetBond() - { - if (NativeDevice == null) - { - Trace.Message($"[Warning]: Can't remove bond of {Name}. BluetoothDevice is null."); - return false; - } - - if (BondState == DeviceBondState.NotBonded) - { - Trace.Message($"Device {Name} is not bonded."); - return true; - } - - try - { - // removeBond is not part of the API but was always available together with CreateBond (just hidden). - var removeBond = NativeDevice.Class.GetMethod("removeBond"); - // calling removeBond will disconnect! - return (bool)removeBond.Invoke(NativeDevice); - } - catch (Exception ex) - { - Trace.Message($"RemoveBond of {Name} failed. {ex.Message}"); - return false; - } - } - } } diff --git a/Source/Plugin.BLE/Apple/Device.cs b/Source/Plugin.BLE/Apple/Device.cs index 5f6b5e0a..3f92af0c 100644 --- a/Source/Plugin.BLE/Apple/Device.cs +++ b/Source/Plugin.BLE/Apple/Device.cs @@ -185,18 +185,5 @@ protected override DeviceBondState GetBondState() return DeviceBondState.NotSupported; } - public override bool CreateBond() - { - Trace.Message("Cannot initiate a bonding request on iOS."); - return false; - } - - public override bool ForgetBond() - { - Trace.Message("Cannot forget bonding on iOS."); - return false; - } - - } } diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 4b2d0321..aecec1cb 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -127,28 +127,5 @@ public interface IDevice : IDisposable /// DeviceBondState BondState { get; } - /// - /// Initiates a bonding request. - /// To establish an additional security level in the commumication between server and client pairing or bonding is used. - /// Pairing does the key exchange and encryption/decryption for one connection between server and client. - /// Bonding does pairing and remembers the keys in a secure storage so that they can be used for the next connection. - /// You have to subscribe to Adapter.DeviceBondStateChanged to get the current state. Typically first bonding and later bonded. - /// Important: - /// On iOS: - /// Initiating a bonding request is not supported by iOS. The function simply returns false. - /// On Android: Added in API level 19. - /// Android system services will handle the necessary user interactions to confirm and complete the bonding process. - /// For apps targeting Build.VERSION_CODES#R or lower, this requires the Manifest.permission#BLUETOOTH_ADMIN permission - /// which can be gained with a simple ßuses-permissionß manifest tag. For apps targeting Build.VERSION_CODES#S or or higher, - /// this requires the Manifest.permission#BLUETOOTH_CONNECT permission which can be gained with Activity.requestPermissions(String[], int). - /// - /// True if bonding could be requested. On iOS it will always return false. - bool CreateBond(); - - /// - /// Forgets the bonding between server and client. - /// - /// - bool ForgetBond(); } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index b48ddfb6..98c0bd5a 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -260,10 +260,5 @@ public override int GetHashCode() public DeviceBondState BondState => GetBondState(); - public abstract bool CreateBond(); - - public abstract bool ForgetBond(); - - } } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 02045579..3e1bb651 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -112,17 +112,5 @@ protected override DeviceBondState GetBondState() return DeviceBondState.NotSupported; } - public override bool CreateBond() - { - Trace.Message("Cannot initiate a bonding request on iOS."); - return false; - } - - public override bool ForgetBond() - { - Trace.Message("Cannot forget bonding on iOS."); - return false; - } - } } From 7fd39192f6692ffda7f7f458eafe4f94a50bbaa4 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Wed, 9 Aug 2023 14:31:40 +0200 Subject: [PATCH 342/527] Add better summary --- Source/Plugin.BLE/Shared/Contracts/IAdapter.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index 54353e34..b26f5c7f 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -80,6 +80,21 @@ public interface IAdapter /// IReadOnlyList ConnectedDevices { get; } + /// + /// Initiates a bonding request. + /// To establish an additional security level in the commumication between server and client pairing or bonding is used. + /// Pairing does the key exchange and encryption/decryption for one connection between server and client. + /// Bonding does pairing and remembers the keys in a secure storage so that they can be used for the next connection. + /// You have to subscribe to Adapter.DeviceBondStateChanged to get the current state. Typically first bonding and later bonded. + /// Important: + /// On iOS: + /// Initiating a bonding request is not supported by iOS. The function simply returns false. + /// On Android: Added in API level 19. + /// Android system services will handle the necessary user interactions to confirm and complete the bonding process. + /// For apps targeting Build.VERSION_CODES#R or lower, this requires the Manifest.permission#BLUETOOTH_ADMIN permission + /// which can be gained with a simple 'uses-permission' manifest tag. For apps targeting Build.VERSION_CODES#S or or higher, + /// this requires the Manifest.permission#BLUETOOTH_CONNECT permission which can be gained with Activity.requestPermissions(String[], int). + /// public Task BondAsync(IDevice device); /// @@ -190,4 +205,4 @@ public interface IAdapter /// true if extended advertising is supported, otherwise false. bool SupportsCodedPHY(); } -} \ No newline at end of file +} From fe5c893c36cef7e960d9fa3eb0938d57860acd88 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Thu, 10 Aug 2023 00:09:33 +0200 Subject: [PATCH 343/527] Code styling --- Source/Plugin.BLE/Android/Adapter.cs | 15 +++++++++----- Source/Plugin.BLE/Android/Device.cs | 4 +--- Source/Plugin.BLE/Apple/Device.cs | 7 ++----- Source/Plugin.BLE/Shared/AdapterBase.cs | 8 +++----- .../Plugin.BLE/Shared/Contracts/IAdapter.cs | 4 ++-- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 7 ++----- Source/Plugin.BLE/Shared/DeviceBase.cs | 20 ++++++++++++++----- Source/Plugin.BLE/Windows/Device.cs | 4 +--- 8 files changed, 36 insertions(+), 33 deletions(-) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index 712f3b3f..c897fffa 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -76,13 +76,19 @@ public Adapter(BluetoothManager bluetoothManager) public override Task BondAsync(IDevice device) { if (device == null) - throw new ArgumentNullException(nameof(device)); + { + throw new ArgumentNullException(nameof(device)); + } if (!(device.NativeDevice is BluetoothDevice nativeDevice)) - throw new ArgumentException("Invalid device type"); + { + throw new ArgumentException("Invalid device type"); + } if (nativeDevice.BondState == Bond.Bonded) - return Task.CompletedTask; + { + return Task.CompletedTask; + } var tcs = new TaskCompletionSource(); @@ -445,7 +451,7 @@ public override void OnScanResult(ScanCallbackType callbackType, ScanResult resu (Build.VERSION.SdkInt >= BuildVersionCodes.O) #endif ? result.IsConnectable : true - ); ; + ); //Device device; //if (result.ScanRecord.ManufacturerSpecificData.Size() > 0) @@ -463,7 +469,6 @@ public override void OnScanResult(ScanCallbackType callbackType, ScanResult resu //} _adapter.HandleDiscoveredDevice(device); - } } } diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index 66019594..14e77534 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -455,8 +455,7 @@ public override bool SupportsIsConnectable (Build.VERSION.SdkInt >= BuildVersionCodes.O); #endif } - - + protected override DeviceBondState GetBondState() { if (NativeDevice == null) @@ -466,6 +465,5 @@ protected override DeviceBondState GetBondState() } return NativeDevice.BondState.FromNative(); } - } } diff --git a/Source/Plugin.BLE/Apple/Device.cs b/Source/Plugin.BLE/Apple/Device.cs index 3f92af0c..c16e3e53 100644 --- a/Source/Plugin.BLE/Apple/Device.cs +++ b/Source/Plugin.BLE/Apple/Device.cs @@ -173,17 +173,14 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv Trace.Message("Cannot update connection inteval on iOS."); return false; } - - + public override bool IsConnectable { get; protected set; } public override bool SupportsIsConnectable { get => true; } - - + protected override DeviceBondState GetBondState() { return DeviceBondState.NotSupported; } - } } diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index 37868436..cf25c3cf 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -74,8 +74,7 @@ public bool IsScanning /// Default: /// public ScanMode ScanMode { get; set; } = ScanMode.LowPower; - - + /// /// Scan match mode defines how agressively we look for adverts /// @@ -335,7 +334,8 @@ public void HandleConnectionFail(IDevice device, string errorMessage) ErrorMessage = errorMessage }); } - + + /// public abstract Task BondAsync(IDevice device); /// @@ -379,10 +379,8 @@ protected void HandleDeviceBondStateChanged(DeviceBondStateChangedEventArgs args /// /// Returns all BLE device bonded to the system. /// - /// protected abstract IReadOnlyList GetBondedDevices(); - /// /// Indicates whether extended advertising (BLE5) is supported. /// diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index b26f5c7f..bab0553d 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -82,7 +82,7 @@ public interface IAdapter /// /// Initiates a bonding request. - /// To establish an additional security level in the commumication between server and client pairing or bonding is used. + /// To establish an additional security level in the communication between server and client pairing or bonding is used. /// Pairing does the key exchange and encryption/decryption for one connection between server and client. /// Bonding does pairing and remembers the keys in a secure storage so that they can be used for the next connection. /// You have to subscribe to Adapter.DeviceBondStateChanged to get the current state. Typically first bonding and later bonded. @@ -165,7 +165,7 @@ public interface IAdapter /// /// Connection parameters. Contains platform specific parameters needed to achieved connection. The default value is None. /// The token to monitor for cancellation requests. The default value is None. - /// + /// The connected device. Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default); /// diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index aecec1cb..cd7398d3 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -107,7 +107,6 @@ public interface IDevice : IDisposable /// The requested interval (High/Low/Normal) bool UpdateConnectionInterval(ConnectionInterval interval); - /// /// Gets the information if the device has hinted during advertising that the device is connectable. /// This information is not pat of an advertising record. It's determined from the PDU header. @@ -120,12 +119,10 @@ public interface IDevice : IDisposable /// True, if device supports IsConnectable else False /// bool SupportsIsConnectable { get; } - - + /// /// Gets the bonding state of a device. /// DeviceBondState BondState { get; } - } -} \ No newline at end of file +} diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index 98c0bd5a..a3910392 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -202,8 +202,7 @@ public virtual void Dispose() public void ClearServices() { this.CancelEverythingAndReInitialize(); - - + lock (KnownServices) { foreach (var service in KnownServices) @@ -251,14 +250,25 @@ public override int GetHashCode() return Id.GetHashCode(); } + /// + /// Reflects if the device is connectable. + /// Only supported if is true. + /// public abstract bool IsConnectable { get; protected set; } + /// + /// Shows whether the device supports the . + /// public abstract bool SupportsIsConnectable { get; } - - + + /// + /// Gets the of the device. + /// protected abstract DeviceBondState GetBondState(); + /// + /// Gets the of the device. + /// public DeviceBondState BondState => GetBondState(); - } } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index b22675ed..9869bc18 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -122,12 +122,10 @@ internal void FreeResources(bool recreateNativeDevice = true) public override bool IsConnectable { get; protected set; } public override bool SupportsIsConnectable { get => true; } - - + protected override DeviceBondState GetBondState() { return DeviceBondState.NotSupported; } - } } From 8cfbba4dad07efdbb37df189a44c3e3a8b7377f2 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Thu, 10 Aug 2023 00:25:34 +0200 Subject: [PATCH 344/527] Use simple type --- .../Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index b151b346..cde9d50c 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -34,7 +34,7 @@ public override void OnReceive(Context context, Intent intent) return; } - DeviceBondState bondState = extraBondState.FromNative(); + var bondState = extraBondState.FromNative(); BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Address = address, Device = device, State = bondState }); ; } From 8db129675e57e3713362b9b24f05623bc5759aaa Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Thu, 10 Aug 2023 00:26:55 +0200 Subject: [PATCH 345/527] Remove unused method --- Source/Plugin.BLE/Android/Device.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index 14e77534..97f55b2e 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -154,16 +154,6 @@ public Task BondAsync() return _bondCompleteTaskCompletionSource.Task; } - internal void SetBondState(DeviceBondState state) - { - if (state != DeviceBondState.Bonded) - { - return; - } - - _bondCompleteTaskCompletionSource?.TrySetResult(true); - } - private void ConnectToGattForceBleTransportAPI(bool autoconnect, CancellationToken cancellationToken) { //This parameter is present from API 18 but only public from API 23 From c91c21325ade5ff9f78c8c6efad0d58aaf2e4c96 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Thu, 10 Aug 2023 01:01:11 +0200 Subject: [PATCH 346/527] Use non-obsoleted method if possible --- .../BondStatusBroadcastReceiver.cs | 49 ++++++++++++++----- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index cde9d50c..1a03d1e0 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -1,7 +1,7 @@ using System; using Android.Bluetooth; using Android.Content; -using Plugin.BLE.Abstractions; +using Android.OS; using Plugin.BLE.Abstractions.EventArgs; using Plugin.BLE.Android; using Plugin.BLE.Extensions; @@ -10,33 +10,56 @@ namespace Plugin.BLE.BroadcastReceivers { public class BondStatusBroadcastReceiver : BroadcastReceiver { - public event EventHandler BondStateChanged; + private readonly Adapter _broadcastAdapter; - Adapter BroadCastAdapter; + public event EventHandler BondStateChanged; public BondStatusBroadcastReceiver(Adapter adapter) { - BroadCastAdapter = adapter; + _broadcastAdapter = adapter; } public override void OnReceive(Context context, Intent intent) { - if (BondStateChanged == null) return; + if (BondStateChanged == null) + { + return; + } var extraBondState = (Bond)intent.GetIntExtra(BluetoothDevice.ExtraBondState, (int)Bond.None); - var bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); - var device = new Device(BroadCastAdapter, bluetoothDevice, null, 0); - - var address = bluetoothDevice?.Address; - if (address == null) + BluetoothDevice bluetoothDevice; + + // As older versions of .NET (pre7) don't include the Tiramisu version code, handle it manually. +#if NET7_0_OR_GREATER + if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu) +#else + if ((int)Build.VERSION.SdkInt >= 33) +#endif { - return; +#if NET7_0_OR_GREATER +#pragma warning disable CA1416 + bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice, Java.Lang.Class.FromType(typeof(BluetoothDevice))); +#pragma warning restore CA1416 +#else +#pragma warning disable CA1422 + bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); +#pragma warning restore CA1422 +#endif } + else + { +#pragma warning disable CA1422 + bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); +#pragma warning restore CA1422 + } + + var device = new Device(_broadcastAdapter, bluetoothDevice, null); + + var address = bluetoothDevice?.Address ?? string.Empty; var bondState = extraBondState.FromNative(); - BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Address = address, Device = device, State = bondState }); ; + BondStateChanged(this, new DeviceBondStateChangedEventArgs() { Address = address, Device = device, State = bondState }); } - } } From 8e74fcfdb7e62f90b754f4a0deb7069585122f88 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Thu, 10 Aug 2023 08:49:37 +0200 Subject: [PATCH 347/527] Remove warning disable --- .../BroadcastReceivers/BondStatusBroadcastReceiver.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index 1a03d1e0..1c96b214 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -38,20 +38,14 @@ public override void OnReceive(Context context, Intent intent) #endif { #if NET7_0_OR_GREATER -#pragma warning disable CA1416 bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice, Java.Lang.Class.FromType(typeof(BluetoothDevice))); -#pragma warning restore CA1416 #else -#pragma warning disable CA1422 bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); -#pragma warning restore CA1422 #endif } else { -#pragma warning disable CA1422 bluetoothDevice = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice); -#pragma warning restore CA1422 } var device = new Device(_broadcastAdapter, bluetoothDevice, null); From d13cdf3b1eb636579885c6d55e03da7a856b1698 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Thu, 10 Aug 2023 08:50:01 +0200 Subject: [PATCH 348/527] Use OperatingSystem.IsAndroidVersionAtLeast Instead of self-implemented check --- .../Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index 1c96b214..bc4a0ac5 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -34,7 +34,7 @@ public override void OnReceive(Context context, Intent intent) #if NET7_0_OR_GREATER if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu) #else - if ((int)Build.VERSION.SdkInt >= 33) + if (OperatingSystem.IsAndroidVersionAtLeast(33)) #endif { #if NET7_0_OR_GREATER From 6e8ae76eeffc725f63ecf38742063b40cfb1bb61 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Thu, 10 Aug 2023 10:06:34 +0200 Subject: [PATCH 349/527] Fix DisconnectAndClose method when Device is null See #725 --- Source/Plugin.BLE/Android/Device.cs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index 97f55b2e..37cfe97f 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -107,6 +107,11 @@ protected override async Task GetServiceNativeAsync(Guid id) private async Task> DiscoverServicesInternal() { + if (_gatt == null) + { + Trace.Message("[Warning]: Can't discover services {0}. Gatt is null.", Name); + } + return await TaskBuilder .FromEvent, EventHandler, EventHandler>( execute: () => @@ -118,7 +123,14 @@ private async Task> DiscoverServicesInternal() }, getCompleteHandler: (complete, reject) => ((sender, args) => { - complete(_gatt.Services.Select(service => new Service(service, _gatt, _gattCallback, this)).ToList()); + if (_gatt.Services == null) + { + complete(new List()); + } + else + { + complete(_gatt.Services.Select(service => new Service(service, _gatt, _gattCallback, this)).ToList()); + } }), subscribeComplete: handler => _gattCallback.ServicesDiscovered += handler, unsubscribeComplete: handler => _gattCallback.ServicesDiscovered -= handler, @@ -194,8 +206,8 @@ private void ConnectToGattForceBleTransportAPI(bool autoconnect, CancellationTok private void DisconnectAndClose(BluetoothGatt gatt) { - gatt.Disconnect(); - gatt.Close(); + gatt?.Disconnect(); + gatt?.Close(); } /// From 7654a6ec24ce0fa4145c2fcb28a16af76be1fe74 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Fri, 11 Aug 2023 02:45:07 +0200 Subject: [PATCH 350/527] Remove duplicated usings --- Source/Plugin.BLE/Android/Adapter.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index c897fffa..5180ea97 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -4,17 +4,14 @@ using System.Threading; using System.Threading.Tasks; using Android.App; -using Android.App; using Android.Bluetooth; using Android.Bluetooth.LE; using Android.Content; -using Android.Content; using Android.OS; using Java.Util; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.BroadcastReceivers; -using Plugin.BLE.BroadcastReceivers; using Plugin.BLE.Extensions; using Object = Java.Lang.Object; using Trace = Plugin.BLE.Abstractions.Trace; From 76f38571099a0673f30468c496ec9c9161a8568a Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Fri, 11 Aug 2023 02:45:13 +0200 Subject: [PATCH 351/527] Remove unused usings --- .../Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Source/Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs b/Source/Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs index 0bd444c0..b9d73c0c 100644 --- a/Source/Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs +++ b/Source/Plugin.BLE/Android/Extensions/DeviceBondStateExtension.cs @@ -1,8 +1,5 @@ using Android.Bluetooth; using Plugin.BLE.Abstractions; -using System; -using System.Collections.Generic; -using System.Text; namespace Plugin.BLE.Extensions { From e8636a2a4883e410c1428109908121cc29cc76c2 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Fri, 11 Aug 2023 02:46:03 +0200 Subject: [PATCH 352/527] Fix ci check warning (XML comment not on valid element) --- Source/Plugin.BLE/Shared/AdvertisementRecord.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Source/Plugin.BLE/Shared/AdvertisementRecord.cs b/Source/Plugin.BLE/Shared/AdvertisementRecord.cs index 6372fa07..8245731f 100644 --- a/Source/Plugin.BLE/Shared/AdvertisementRecord.cs +++ b/Source/Plugin.BLE/Shared/AdvertisementRecord.cs @@ -173,13 +173,7 @@ public enum AdvertisementRecordType /// /// «Manufacturer Specific Data» Bluetooth Core Specification: /// - ManufacturerSpecificData = 0xFF, - - /// - /// The is connectable flag. This is only reliable for the ios imlementation. The android stack does not expose this in the client. - /// - // obsolete - // IsConnectable = 0xAA + ManufacturerSpecificData = 0xFF } /// @@ -213,4 +207,4 @@ public override string ToString() return string.Format("Adv rec [Type {0}; Data {1}]", Type, Data.ToHexString()); } } -} \ No newline at end of file +} From 47ecaecfb8647cc4eba016760a337644bcebc823 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Fri, 11 Aug 2023 02:58:03 +0200 Subject: [PATCH 353/527] Add missing summaries --- Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs b/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs index d75c87cd..065f1757 100644 --- a/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs +++ b/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs @@ -4,6 +4,9 @@ namespace Plugin.BLE.Abstractions.Utils { + /// + /// Builder class to create event driven Tasks that may be marshalled onto the main thread. + /// public static class TaskBuilder { /// @@ -21,6 +24,9 @@ public static class TaskBuilder private static readonly SemaphoreSlim QueueSemaphore = new SemaphoreSlim(1); + /// + /// Creates an event driven chain of Actions. + /// public static async Task FromEvent( Action execute, Func, Action, TEventHandler> getCompleteHandler, @@ -55,6 +61,9 @@ public static async Task FromEvent + /// Queues the given onto the main thread and executes it. + /// public static Task EnqueueOnMainThreadAsync(Action execute, CancellationToken token = default) => SafeEnqueueAndExecute(execute, token); @@ -108,4 +117,4 @@ private static async Task SafeEnqueueAndExecute(Action execute return await (tcs?.Task ?? Task.FromResult(default(TReturn))); } } -} \ No newline at end of file +} From 60c128ffae28b31a3009804fd939c586acc8d7f5 Mon Sep 17 00:00:00 2001 From: "Kerkering, Tobias" Date: Sun, 13 Aug 2023 19:42:24 +0200 Subject: [PATCH 354/527] Cleanup dictionary --- Source/Plugin.BLE/Android/Adapter.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index 5180ea97..c0cfcee0 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -86,10 +86,17 @@ public override Task BondAsync(IDevice device) { return Task.CompletedTask; } - - var tcs = new TaskCompletionSource(); - - _bondingTcsForAddress.Add(nativeDevice.Address!, tcs); + + var deviceAddress = nativeDevice.Address!; + if (_bondingTcsForAddress.TryGetValue(deviceAddress, out var tcs)) + { + tcs.TrySetException(new Exception("Bonding failed on old try.")); + _bondingTcsForAddress.Remove(deviceAddress); + } + + var taskCompletionSource = new TaskCompletionSource(); + + _bondingTcsForAddress.Add(nativeDevice.Address!, taskCompletionSource); if (!nativeDevice.CreateBond()) { @@ -97,7 +104,7 @@ public override Task BondAsync(IDevice device) throw new Exception("Bonding failed"); } - return tcs.Task; + return taskCompletionSource.Task; } protected override Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) From ee8905fca57110607065bbbbad17f4dc0cd28bcf Mon Sep 17 00:00:00 2001 From: IanBUK <78267962+IanBUK@users.noreply.github.com> Date: Sat, 19 Aug 2023 16:26:42 +0100 Subject: [PATCH 355/527] Add Maui client Builds, runs and works on Samsung A8 tablet, crashes at startup on MacOS (M1 MacBook Air Ventura 13.5) --- .gitignore | 1 + Source/BLE.Client/BLE.Client.Maui/App.xaml | 15 + Source/BLE.Client/BLE.Client.Maui/App.xaml.cs | 21 + .../BLE.Client/BLE.Client.Maui/AppShell.xaml | 14 + .../BLE.Client.Maui/AppShell.xaml.cs | 10 + .../BLE.Client.Maui/BLE.Client.Maui.csproj | 85 ++++ .../Helpers/IPlatformHelpers.cs | 7 + .../BLE.Client/BLE.Client.Maui/MainPage.xaml | 47 ++ .../BLE.Client.Maui/MainPage.xaml.cs | 37 ++ .../BLE.Client/BLE.Client.Maui/MauiProgram.cs | 40 ++ .../BLE.Client.Maui/Models/BLEDevice.cs | 20 + .../BLE.Client.Maui/Models/BLEDevices.cs | 10 + .../BLE.Client.Maui/Models/DeviceState.cs | 30 ++ .../Platforms/Android/AndroidManifest.xml | 19 + .../Platforms/Android/DroidPlatformHelpers.cs | 48 +++ .../Platforms/Android/MainActivity.cs | 11 + .../Platforms/Android/MainApplication.cs | 16 + .../Android/Resources/values/colors.xml | 7 + .../Platforms/MacCatalyst/AppDelegate.cs | 10 + .../Platforms/MacCatalyst/Info.plist | 30 ++ .../Platforms/MacCatalyst/Program.cs | 16 + .../BLE.Client.Maui/Platforms/Tizen/Main.cs | 17 + .../Platforms/Tizen/tizen-manifest.xml | 15 + .../Platforms/Windows/App.xaml | 9 + .../Platforms/Windows/App.xaml.cs | 25 ++ .../Platforms/Windows/Package.appxmanifest | 47 ++ .../Platforms/Windows/app.manifest | 16 + .../Platforms/iOS/AppDelegate.cs | 10 + .../BLE.Client.Maui/Platforms/iOS/Info.plist | 32 ++ .../BLE.Client.Maui/Platforms/iOS/Program.cs | 16 + .../Properties/launchSettings.json | 8 + .../Resources/AppIcon/appicon.svg | 5 + .../Resources/AppIcon/appiconfg.svg | 8 + .../Resources/Fonts/OpenSans-Regular.ttf | Bin 0 -> 107184 bytes .../Resources/Fonts/OpenSans-Semibold.ttf | Bin 0 -> 111076 bytes .../Resources/Images/dotnet_bot.svg | 95 ++++ .../Resources/Images/scanning.gif | Bin 0 -> 1687672 bytes .../Resources/Images/spinner.gif | Bin 0 -> 562943 bytes .../Resources/Raw/AboutAssets.txt | 17 + .../Resources/Splash/splash.svg | 9 + .../Resources/Styles/Colors.xaml | 44 ++ .../Resources/Styles/Styles.xaml | 406 ++++++++++++++++++ .../BLE.Client.Maui/Services/AlertService.cs | 48 +++ .../BLE.Client.Maui/Services/IAlertService.cs | 17 + .../ViewModels/BLEDeviceViewModel.cs | 134 ++++++ .../ViewModels/BLEScannerViewModel.cs | 337 +++++++++++++++ .../BLE.Client.Maui/Views/BLEScanner.xaml | 52 +++ .../BLE.Client.Maui/Views/BLEScanner.xaml.cs | 15 + Source/BLE.Mac.Maui.sln | 324 ++++++++++++++ .../MvvmCross.Plugins.BLE.csproj | 2 +- 50 files changed, 2201 insertions(+), 1 deletion(-) create mode 100644 Source/BLE.Client/BLE.Client.Maui/App.xaml create mode 100644 Source/BLE.Client/BLE.Client.Maui/App.xaml.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/AppShell.xaml create mode 100644 Source/BLE.Client/BLE.Client.Maui/AppShell.xaml.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj create mode 100644 Source/BLE.Client/BLE.Client.Maui/Helpers/IPlatformHelpers.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/MainPage.xaml create mode 100644 Source/BLE.Client/BLE.Client.Maui/MainPage.xaml.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Models/BLEDevice.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Models/BLEDevices.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Models/DeviceState.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Android/AndroidManifest.xml create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Android/DroidPlatformHelpers.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Android/MainActivity.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Android/MainApplication.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Android/Resources/values/colors.xml create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/MacCatalyst/AppDelegate.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/MacCatalyst/Info.plist create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/MacCatalyst/Program.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Tizen/Main.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Tizen/tizen-manifest.xml create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/App.xaml create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/App.xaml.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/Package.appxmanifest create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/app.manifest create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/iOS/AppDelegate.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/iOS/Info.plist create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/iOS/Program.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Properties/launchSettings.json create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/AppIcon/appicon.svg create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/AppIcon/appiconfg.svg create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Fonts/OpenSans-Semibold.ttf create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Images/dotnet_bot.svg create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Images/scanning.gif create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Images/spinner.gif create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Raw/AboutAssets.txt create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Splash/splash.svg create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Styles/Colors.xaml create mode 100644 Source/BLE.Client/BLE.Client.Maui/Resources/Styles/Styles.xaml create mode 100644 Source/BLE.Client/BLE.Client.Maui/Services/AlertService.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Services/IAlertService.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEDeviceViewModel.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs create mode 100644 Source/BLE.Client/BLE.Client.Maui/Views/BLEScanner.xaml create mode 100644 Source/BLE.Client/BLE.Client.Maui/Views/BLEScanner.xaml.cs create mode 100644 Source/BLE.Mac.Maui.sln diff --git a/.gitignore b/.gitignore index c989a7f6..7d953152 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ bld/ FAKE* !FAKE*.cs .fake/ +.idea/ # Visual Studo 2015 cache/options directory .vs/ diff --git a/Source/BLE.Client/BLE.Client.Maui/App.xaml b/Source/BLE.Client/BLE.Client.Maui/App.xaml new file mode 100644 index 00000000..b1298e26 --- /dev/null +++ b/Source/BLE.Client/BLE.Client.Maui/App.xaml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/Source/BLE.Client/BLE.Client.Maui/App.xaml.cs b/Source/BLE.Client/BLE.Client.Maui/App.xaml.cs new file mode 100644 index 00000000..00fa7886 --- /dev/null +++ b/Source/BLE.Client/BLE.Client.Maui/App.xaml.cs @@ -0,0 +1,21 @@ +using BLE.Client.Helpers; +using BLE.Client.Maui.Services; + +namespace BLE.Client.Maui; + +public partial class App : Application +{ + public static IServiceProvider Services; + public static IAlertService AlertSvc; + public static IPlatformHelpers PlatformHelper; + public App(IServiceProvider provider) + { + InitializeComponent(); + + Services = provider; + AlertSvc = Services.GetService(); + PlatformHelper = Services.GetService(); + MainPage = new AppShell(); + } +} + diff --git a/Source/BLE.Client/BLE.Client.Maui/AppShell.xaml b/Source/BLE.Client/BLE.Client.Maui/AppShell.xaml new file mode 100644 index 00000000..628beba1 --- /dev/null +++ b/Source/BLE.Client/BLE.Client.Maui/AppShell.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/Source/BLE.Client/BLE.Client.Maui/AppShell.xaml.cs b/Source/BLE.Client/BLE.Client.Maui/AppShell.xaml.cs new file mode 100644 index 00000000..65d43bf8 --- /dev/null +++ b/Source/BLE.Client/BLE.Client.Maui/AppShell.xaml.cs @@ -0,0 +1,10 @@ +namespace BLE.Client.Maui; + +public partial class AppShell : Shell +{ + public AppShell() + { + InitializeComponent(); + } +} + diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj new file mode 100644 index 00000000..c43078b2 --- /dev/null +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -0,0 +1,85 @@ + + + + net7.0-android;net7.0-ios;net7.0-maccatalyst + Exe + BLE.Client.Maui + true + true + enable + + + BLE.Client.Maui + + + com.companyname.ble.client.maui + a401d899-314c-4522-b345-bdf1731f57a5 + + + 1.0 + 1 + + 11.0 + 13.1 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 + + + + false + + + false + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/BLE.Client/BLE.Client.Maui/Helpers/IPlatformHelpers.cs b/Source/BLE.Client/BLE.Client.Maui/Helpers/IPlatformHelpers.cs new file mode 100644 index 00000000..d1130c7e --- /dev/null +++ b/Source/BLE.Client/BLE.Client.Maui/Helpers/IPlatformHelpers.cs @@ -0,0 +1,7 @@ +namespace BLE.Client.Helpers +{ + public interface IPlatformHelpers + { + Task CheckAndRequestBluetoothPermissions(); + } +} diff --git a/Source/BLE.Client/BLE.Client.Maui/MainPage.xaml b/Source/BLE.Client/BLE.Client.Maui/MainPage.xaml new file mode 100644 index 00000000..294dbcdb --- /dev/null +++ b/Source/BLE.Client/BLE.Client.Maui/MainPage.xaml @@ -0,0 +1,47 @@ + + + + + + + + + /// The to known device async. /// Device GUID. - public override async Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default(ConnectParameters), CancellationToken cancellationToken = default(CancellationToken)) + public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters = default(ConnectParameters), CancellationToken cancellationToken = default(CancellationToken)) { #if NET6_0_OR_GREATER || MACCATALYST await WaitForState(CBManagerState.PoweredOn, cancellationToken, true); @@ -230,7 +230,7 @@ private static Guid ParseDeviceGuid(CBPeripheral peripherial) #endif if (cancellationToken.IsCancellationRequested) - throw new TaskCanceledException("ConnectToKnownDeviceAsync cancelled"); + throw new TaskCanceledException("ConnectToKnownDeviceNativeAsync cancelled"); //FYI attempted to use tobyte array insetead of string but there was a problem with byte ordering Guid->NSUui var uuid = new NSUuid(deviceGuid.ToString()); @@ -256,7 +256,7 @@ private static Guid ParseDeviceGuid(CBPeripheral peripherial) ); if (peripherial == null) - throw new Exception($"[Adapter] Device {deviceGuid} not found."); + throw new Abstractions.Exceptions.DeviceConnectionException(deviceGuid, "", $"[Adapter] Device {deviceGuid} not found."); } diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index 869ee23a..239837d1 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -327,6 +327,24 @@ public void HandleConnectionFail(IDevice device, string errorMessage) }); } + /// + /// Connects to a device with a known GUID without scanning and if in range. Does not scan for devices. + /// + public async Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) + { + if (DiscoveredDevicesRegistry.TryGetValue(deviceGuid, out IDevice discoveredDevice)) + { + await ConnectToDeviceAsync(discoveredDevice, connectParameters, cancellationToken); + return discoveredDevice; + } + + var connectedDevice = await ConnectToKnownDeviceNativeAsync(deviceGuid, connectParameters, cancellationToken); + if (!DiscoveredDevicesRegistry.ContainsKey(deviceGuid)) + DiscoveredDevicesRegistry.TryAdd(deviceGuid, connectedDevice); + + return connectedDevice; + } + /// /// Native implementation of StartScanningForDevicesAsync. /// @@ -345,9 +363,9 @@ public void HandleConnectionFail(IDevice device, string errorMessage) protected abstract void DisconnectDeviceNative(IDevice device); /// - /// Connects to a device with a known GUID without scanning and if in range. Does not scan for devices. + /// Native implementation of ConnectToKnownDeviceAsync. /// - public abstract Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default); + public abstract Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default); /// /// Returns all BLE devices connected to the system. /// diff --git a/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs b/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs index 79d2aa4a..18f6003f 100644 --- a/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs +++ b/Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs @@ -8,7 +8,7 @@ namespace Plugin.BLE.Abstractions.Utils { internal class FakeAdapter : AdapterBase { - public override Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters, CancellationToken cancellationToken) + public override Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters, CancellationToken cancellationToken) { TraceUnavailability(); return Task.FromResult(null); diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index f79826de..10e19413 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -171,12 +171,15 @@ protected override void DisconnectDeviceNative(IDevice device) } } - public override async Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) + public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) { //convert GUID to string and take last 12 characters as MAC address var guidString = deviceGuid.ToString("N").Substring(20); var bluetoothAddress = Convert.ToUInt64(guidString, 16); var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bluetoothAddress); + if (nativeDevice == null) + throw new Abstractions.Exceptions.DeviceConnectionException(deviceGuid, "", $"[Adapter] Device {deviceGuid} not found."); + var knownDevice = new Device(this, nativeDevice, 0, deviceGuid, _dq); await ConnectToDeviceAsync(knownDevice, cancellationToken: cancellationToken); From a34f4b8359459fc03dc1dff5f159d6c1b62c337f Mon Sep 17 00:00:00 2001 From: IanBUK <78267962+IanBUK@users.noreply.github.com> Date: Wed, 30 Aug 2023 21:49:42 +0100 Subject: [PATCH 369/527] Fix colours, remove extraneous solution file. --- .../BLE.Client.Maui/Models/BLEDevice.cs | 11 +- .../ViewModels/BLEScannerViewModel.cs | 5 +- .../BLE.Client.Maui/Views/BLEScanner.xaml | 23 +- Source/BLE.Mac.Maui.sln | 324 ------------------ Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- 5 files changed, 34 insertions(+), 331 deletions(-) delete mode 100644 Source/BLE.Mac.Maui.sln diff --git a/Source/BLE.Client/BLE.Client.Maui/Models/BLEDevice.cs b/Source/BLE.Client/BLE.Client.Maui/Models/BLEDevice.cs index 2b8be584..e4bf7f59 100644 --- a/Source/BLE.Client/BLE.Client.Maui/Models/BLEDevice.cs +++ b/Source/BLE.Client/BLE.Client.Maui/Models/BLEDevice.cs @@ -14,7 +14,14 @@ public class BLEDevice public bool IsConnectable { get; set; } - public DeviceState State { get; set; } - } + public DeviceState State { get; set; } + + + public override string ToString() + { + return $"{Name}: {DeviceId}: {Rssi}: {State}"; + + } + } } diff --git a/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs b/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs index 59099880..50117460 100644 --- a/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs +++ b/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs @@ -14,7 +14,7 @@ namespace BLE.Client.Maui.ViewModels public class BLEScannerViewModel : INotifyPropertyChanged { - private IBluetoothLE _bluetoothManager; + private IBluetoothLE _bluetoothManager; protected IAdapter Adapter; public bool IsStateOn => _bluetoothManager.IsOn; public string StateText => GetStateText(); @@ -27,10 +27,9 @@ public class BLEScannerViewModel : INotifyPropertyChanged public IAsyncRelayCommand StartScan { get; } - private ObservableCollection _devices = new ObservableCollection(); + public ObservableCollection BLEDevices { get; private set;} = new ObservableCollection(); private ObservableCollection _messages = new ObservableCollection(); - public IList BLEDevices { get { DebugMessage("Getting BLEDevices"); return _devices; } } public IList Messages { get { DebugMessage("Getting messages"); return _messages; } } private string _lastMessage = string.Empty; diff --git a/Source/BLE.Client/BLE.Client.Maui/Views/BLEScanner.xaml b/Source/BLE.Client/BLE.Client.Maui/Views/BLEScanner.xaml index 1d76ff19..f61fea6f 100644 --- a/Source/BLE.Client/BLE.Client.Maui/Views/BLEScanner.xaml +++ b/Source/BLE.Client/BLE.Client.Maui/Views/BLEScanner.xaml @@ -45,7 +45,28 @@ /// The bluetooth advertisement watcher currently being used /// The advertisement recieved by the watcher - private async void DeviceFoundAsync(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs btAdv) + private void AdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs btAdv) { - var deviceId = ParseDeviceId(btAdv.BluetoothAddress); + var deviceId = btAdv.BluetoothAddress.ParseDeviceId(); if (DiscoveredDevicesRegistry.TryGetValue(deviceId, out var device)) { - Trace.Message("AdvertisdedPeripheral: {0} Id: {1}, Rssi: {2}", device.Name, device.Id, btAdv.RawSignalStrengthInDBm); + Trace.Message("AdvertisementReceived - Old Device: {0}", btAdv.ToDetailedString()); (device as Device)?.Update(btAdv.RawSignalStrengthInDBm, ParseAdvertisementData(btAdv.Advertisement)); this.HandleDiscoveredDevice(device); } else { - var bluetoothLeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); + Trace.Message("AdvertisementReceived - New Device: {0}", btAdv.ToDetailedString()); + var bluetoothLeDevice = BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress).AsTask().Result; + //var bluetoothLeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); if (bluetoothLeDevice != null) //make sure advertisement bluetooth address actually returns a device { - device = new Device(this, bluetoothLeDevice, btAdv.RawSignalStrengthInDBm, deviceId, _dq, ParseAdvertisementData(btAdv.Advertisement), btAdv.IsConnectable); - Trace.Message("DiscoveredPeripheral: {0} Id: {1}, Rssi: {2}", device.Name, device.Id, btAdv.RawSignalStrengthInDBm); + device = new Device( + this, + bluetoothLeDevice, + btAdv.RawSignalStrengthInDBm, + deviceId, + ParseAdvertisementData(btAdv.Advertisement), + btAdv.IsConnectable); this.HandleDiscoveredDevice(device); } } } - /// - /// Method to parse the bluetooth address as a hex string to a UUID - /// - /// BluetoothLEDevice native device address - /// a GUID that is padded left with 0 and the last 6 bytes are the bluetooth address - private static Guid ParseDeviceId(ulong bluetoothAddress) - { - var macWithoutColons = bluetoothAddress.ToString("x"); - macWithoutColons = macWithoutColons.PadLeft(12, '0'); //ensure valid length - var deviceGuid = new byte[16]; - Array.Clear(deviceGuid, 0, 16); - var macBytes = Enumerable.Range(0, macWithoutColons.Length) - .Where(x => x % 2 == 0) - .Select(x => Convert.ToByte(macWithoutColons.Substring(x, 2), 16)) - .ToArray(); - macBytes.CopyTo(deviceGuid, 10); - return new Guid(deviceGuid); - } - public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) { // TODO: implement this diff --git a/Source/Plugin.BLE/Windows/BleImplementation.cs b/Source/Plugin.BLE/Windows/BleImplementation.cs index 94d2c986..b7c64b85 100644 --- a/Source/Plugin.BLE/Windows/BleImplementation.cs +++ b/Source/Plugin.BLE/Windows/BleImplementation.cs @@ -1,13 +1,10 @@ using Windows.Devices.Bluetooth; -#if WINDOWS_UWP -using Microsoft.Toolkit.Uwp.Connectivity; -#else -using CommunityToolkit.WinUI.Connectivity; -#endif - using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.UWP; +using System; +using System.Threading.Tasks; +using Windows.Devices.Radios; namespace Plugin.BLE { @@ -19,31 +16,37 @@ public class BleImplementation : BleImplementationBase public static BluetoothCacheMode CacheModeGetCharacteristics { get; set; } = BluetoothCacheMode.Cached; public static BluetoothCacheMode CacheModeGetServices { get; set; } = BluetoothCacheMode.Cached; - private BluetoothLEHelper _bluetoothHelper; - protected override IAdapter CreateNativeAdapter() { - return new Adapter(_bluetoothHelper); + return new Adapter(); } protected override BluetoothState GetInitialStateNative() { - //The only way to get the state of bluetooth through windows is by - //getting the radios for a device. This operation is asynchronous - //and thus cannot be called in this method. Thus, we are just - //returning "On" as long as the BluetoothLEHelper is initialized - if (_bluetoothHelper == null) + try + { + BluetoothAdapter btAdapter = BluetoothAdapter.GetDefaultAsync().AsTask().Result; + var radio = btAdapter.GetRadioAsync().AsTask().Result; + switch (radio.State) + { + case RadioState.On: + return BluetoothState.On; + case RadioState.Off: + return BluetoothState.Off; + default: + return BluetoothState.Unavailable; + } + } + catch (Exception ex) { + Trace.Message("GetInitialStateNativeAsync exception:{0}", ex.Message); return BluetoothState.Unavailable; } - return BluetoothState.On; } protected override void InitializeNative() { - //create local helper using the app context - var localHelper = BluetoothLEHelper.Context; - _bluetoothHelper = localHelper; + } } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 660ebefc..112e47ba 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -2,26 +2,18 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; - -#if WINDOWS_UWP -using Windows.System; -using Microsoft.Toolkit.Uwp.Connectivity; -#else -using Microsoft.UI.Dispatching; -using CommunityToolkit.WinUI.Connectivity; -#endif using Windows.Devices.Bluetooth; -using Windows.Devices.Enumeration; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; namespace Plugin.BLE.UWP { - public class Device : DeviceBase + public class Device : DeviceBase { - public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id, DispatcherQueue dq, IReadOnlyList advertisementRecords = null, bool isConnectable = true) - : base(adapter, new ObservableBluetoothLEDevice(nativeDevice.DeviceInformation, dq)) + public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id, + IReadOnlyList advertisementRecords = null, bool isConnectable = true) + : base(adapter, nativeDevice) { Rssi = rssi; Id = id; @@ -48,10 +40,10 @@ public override Task UpdateRssiAsync() protected override async Task> GetServicesNativeAsync() { - if (NativeDevice?.BluetoothLEDevice == null) + if (NativeDevice == null) return new List(); - var result = await NativeDevice.BluetoothLEDevice.GetGattServicesAsync(BleImplementation.CacheModeGetServices); + var result = await NativeDevice.GetGattServicesAsync(BleImplementation.CacheModeGetServices); result?.ThrowIfError(); return result?.Services? @@ -62,7 +54,7 @@ protected override async Task> GetServicesNativeAsync() protected override async Task GetServiceNativeAsync(Guid id) { - var result = await NativeDevice.BluetoothLEDevice.GetGattServicesForUuidAsync(id, BleImplementation.CacheModeGetServices); + var result = await NativeDevice.GetGattServicesForUuidAsync(id, BleImplementation.CacheModeGetServices); result.ThrowIfError(); var nativeService = result.Services?.FirstOrDefault(); @@ -71,17 +63,16 @@ protected override async Task GetServiceNativeAsync(Guid id) protected override DeviceState GetState() { - if (NativeDevice.IsConnected) + if (NativeDevice.ConnectionStatus == BluetoothConnectionStatus.Connected) { return DeviceState.Connected; - } - - return NativeDevice.IsPaired ? DeviceState.Limited : DeviceState.Disconnected; + } + return NativeDevice.WasSecureConnectionUsedForPairing ? DeviceState.Limited : DeviceState.Disconnected; } protected override async Task RequestMtuNativeAsync(int requestValue) { - var devId = BluetoothDeviceId.FromId(NativeDevice.BluetoothLEDevice.DeviceId); + var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); using var gattSession = await Windows.Devices.Bluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); return gattSession.MaxPduSize; } @@ -93,32 +84,38 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv } public override void Dispose() - { - FreeResources(false); - } - - internal void FreeResources(bool recreateNativeDevice = true) - { - NativeDevice?.Services?.ToList().ForEach(s => + { + if (NativeDevice != null) { - s?.Service?.Session?.Dispose(); - s?.Service?.Dispose(); - }); - - // save these so we can re-create ObservableBluetoothLEDevice if needed - var tempDevInfo = NativeDevice?.DeviceInfo; - var tempDq = NativeDevice?.DispatcherQueue; - - NativeDevice?.BluetoothLEDevice?.Dispose(); + Trace.Message("Disposing {0} with id = {1}", Name, Id.ToString()); + NativeDevice.Dispose(); + NativeDevice = null; + } + //FreeResources(false); + } - // the ObservableBluetoothLEDevice doesn't really support the BluetoothLEDevice - // being disposed so we need to recreate it. What we really need is to be able - // to set NativeDevice?.BluetoothLEDevice = null; - if (recreateNativeDevice) - NativeDevice = new ObservableBluetoothLEDevice(tempDevInfo, tempDq); + //internal void FreeResources(bool recreateNativeDevice = true) + //{ + // NativeDevice?.Services?.ToList().ForEach(s => + // { + // s?.Service?.Session?.Dispose(); + // s?.Service?.Dispose(); + // }); + + // // save these so we can re-create ObservableBluetoothLEDevice if needed + // var tempDevInfo = NativeDevice?.DeviceInfo; + // var tempDq = NativeDevice?.DispatcherQueue; + + // NativeDevice?.BluetoothLEDevice?.Dispose(); + + // // the ObservableBluetoothLEDevice doesn't really support the BluetoothLEDevice + // // being disposed so we need to recreate it. What we really need is to be able + // // to set NativeDevice?.BluetoothLEDevice = null; + // if (recreateNativeDevice) + // NativeDevice = new ObservableBluetoothLEDevice(tempDevInfo, tempDq); - GC.Collect(); - } + // GC.Collect(); + //} public override bool IsConnectable { get; protected set; } diff --git a/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs b/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs new file mode 100644 index 00000000..4f96f51f --- /dev/null +++ b/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Windows.Devices.Bluetooth.GenericAttributeProfile; +namespace Plugin.BLE.Extensions; + +// +// This code has been copied from CommunityToolkit.WinUI.Connectivity +// +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + + +/// +/// Helper function when working with +/// +public static class GattProtocolErrorParser +{ + /// + /// Helper to convert an Gatt error value into a string + /// + /// the byte error value. + /// String representation of the error + public static string GetErrorString(this byte? errorValue) + { + var errorString = "Protocol Error"; + + if (errorValue.HasValue == false) + { + return errorString; + } + + if (errorValue == GattProtocolError.AttributeNotFound) + { + return "Attribute Not Found"; + } + + if (errorValue == GattProtocolError.AttributeNotLong) + { + return "Attribute Not Long"; + } + + if (errorValue == GattProtocolError.InsufficientAuthentication) + { + return "Insufficient Authentication"; + } + + if (errorValue == GattProtocolError.InsufficientAuthorization) + { + return "Insufficient Authorization"; + } + + if (errorValue == GattProtocolError.InsufficientEncryption) + { + return "Insufficient Encryption"; + } + + if (errorValue == GattProtocolError.InsufficientEncryptionKeySize) + { + return "Insufficient Encryption Key Size"; + } + + if (errorValue == GattProtocolError.InsufficientResources) + { + return "Insufficient Resources"; + } + + if (errorValue == GattProtocolError.InvalidAttributeValueLength) + { + return "Invalid Attribute Value Length"; + } + + if (errorValue == GattProtocolError.InvalidHandle) + { + return "Invalid Handle"; + } + + if (errorValue == GattProtocolError.InvalidOffset) + { + return "Invalid Offset"; + } + + if (errorValue == GattProtocolError.InvalidPdu) + { + return "Invalid Pdu"; + } + + if (errorValue == GattProtocolError.PrepareQueueFull) + { + return "Prepare Queue Full"; + } + + if (errorValue == GattProtocolError.ReadNotPermitted) + { + return "Read Not Permitted"; + } + + if (errorValue == GattProtocolError.RequestNotSupported) + { + return "Request Not Supported"; + } + + if (errorValue == GattProtocolError.UnlikelyError) + { + return "UnlikelyError"; + } + + if (errorValue == GattProtocolError.UnsupportedGroupType) + { + return "Unsupported Group Type"; + } + + if (errorValue == GattProtocolError.WriteNotPermitted) + { + return "Write Not Permitted"; + } + + return errorString; + } +} + diff --git a/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs b/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs index 658577f2..387161cc 100644 --- a/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs +++ b/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs @@ -2,11 +2,6 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Devices.Bluetooth.GenericAttributeProfile; -#if WINDOWS_UWP -using Microsoft.Toolkit.Uwp.Connectivity; -#else -using CommunityToolkit.WinUI.Connectivity; -#endif using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Exceptions; @@ -48,7 +43,7 @@ public static void ThrowIfError(this GattCommunicationStatus status, [CallerMemb } private static string GetErrorMessage(this GattCommunicationStatus status, string tag, byte? protocolError) - { + { switch (status) { //output trace message with status of update @@ -56,7 +51,7 @@ private static string GetErrorMessage(this GattCommunicationStatus status, strin Trace.Message($"[{tag}] success."); return null; case GattCommunicationStatus.ProtocolError when protocolError != null: - return $"[{tag}] failed with status: {status} and protocol error {protocolError.GetErrorString()}"; + return $"[{tag}] failed with status: {status} and protocol error {protocolError.GetErrorString()}"; case GattCommunicationStatus.AccessDenied: case GattCommunicationStatus.ProtocolError: case GattCommunicationStatus.Unreachable: diff --git a/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs b/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs new file mode 100644 index 00000000..323605e7 --- /dev/null +++ b/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Versioning; +using System.Text; +using System.Threading.Tasks; +using Windows.Devices.Bluetooth; +using Windows.Devices.Bluetooth.Advertisement; + +namespace Plugin.BLE.Extensions; + +public static class TextHelpers +{ + public static string ToDetailedString(this BluetoothLEAdvertisementReceivedEventArgs btAdv) + { + string hexadr = btAdv.BluetoothAddress.ToHexBleAddress(); + StringBuilder sb = new StringBuilder(); + sb.Append(hexadr).Append(", Rssi:").Append(btAdv.RawSignalStrengthInDBm) + .Append(", Type: ").Append(btAdv.BluetoothAddressType); + if (btAdv.IsConnectable) + { + sb.Append(", Connectable"); + } + if (btAdv.IsScannable) + { + sb.Append(", Scannable"); + } + if (btAdv.IsScanResponse) + { + sb.Append(", ScanResponse"); + } + if (btAdv.IsDirected) + { + sb.Append(", Directed"); + } + return sb.ToString(); + } + + /// + /// Get a string of the BLE address: 48 bit = 6 bytes = 12 Hex chars + /// + /// + /// + public static string ToHexBleAddress(this Guid id) + { + return id.ToString("N").Substring(20); + //return id.ToString()[^12..].ToUpperInvariant(); //Not for netstandard2.0 + } + + + /// + /// Get a string of the BLE address: 48 bit = 6 bytes = 12 Hex chars + /// + /// + /// + public static string ToHexBleAddress(this ulong bluetoothAddress) + { + return bluetoothAddress.ToString("X12"); + } + + /// + /// Method to parse the bluetooth address as a hex string to a UUID + /// + /// BluetoothLEDevice native device address + /// a GUID that is padded left with 0 and the last 6 bytes are the bluetooth address + public static Guid ParseDeviceId(this ulong bluetoothAddress) + { + var macWithoutColons = bluetoothAddress.ToString("x"); + macWithoutColons = macWithoutColons.PadLeft(12, '0'); //ensure valid length + var deviceGuid = new byte[16]; + Array.Clear(deviceGuid, 0, 16); + var macBytes = Enumerable.Range(0, macWithoutColons.Length) + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(macWithoutColons.Substring(x, 2), 16)) + .ToArray(); + macBytes.CopyTo(deviceGuid, 10); + return new Guid(deviceGuid); + } +} From 7f43b1876f1d614bdd213ae41d6a1bdb3c44a773 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 19 Sep 2023 10:35:22 +0200 Subject: [PATCH 387/527] Revert changes to project files --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 4 +- Source/BLE.sln | 166 +++++++++--------- 2 files changed, 84 insertions(+), 86 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index f011bf48..ecaf0c82 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -96,8 +96,6 @@ {83f1dffb-a653-45dd-be81-c02374c6db07} MvvmCross.Plugins.BLE - Android - false {951ed11d-d026-449c-90dc-5027bc41fb3b} @@ -141,4 +139,4 @@ - \ No newline at end of file + diff --git a/Source/BLE.sln b/Source/BLE.sln index b7510a80..80318c98 100644 --- a/Source/BLE.sln +++ b/Source/BLE.sln @@ -44,9 +44,9 @@ Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "BLE.Client.macOS", "BLE.Cli EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.UWP", "BLE.Client\BLE.Client.UWP\BLE.Client.UWP.csproj", "{25E04E05-F867-4F64-813D-AAFE0BA171B0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BLE.Client.Maui", "BLE.Client\BLE.Client.Maui\BLE.Client.Maui.csproj", "{D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.Maui", "BLE.Client\BLE.Client.Maui\BLE.Client.Maui.csproj", "{D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BLE.Client.WinConsole", "BLE.Client\BLE.Client.WinConsole\BLE.Client.WinConsole.csproj", "{3F90E6DE-1311-4728-9184-63376F3C05DE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BLE.Client.WinConsole", "BLE.Client\BLE.Client.WinConsole\BLE.Client.WinConsole.csproj", "{39287F60-65DE-4077-90F2-57CF725E92B6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -418,34 +418,34 @@ Global {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|x64.ActiveCfg = Release|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|x86.ActiveCfg = Release|iPhone - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM.Build.0 = Release|Any CPU {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x64.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x86.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|Any CPU.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM.Build.0 = Debug|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|Any CPU.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM.Build.0 = Release|Any CPU {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM64.ActiveCfg = Debug|Any CPU {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM64.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhone.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhone.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x64.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x64.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x86.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x86.Build.0 = Debug|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhone.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x64.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x64.Build.0 = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x86.ActiveCfg = Release|Any CPU + {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x86.Build.0 = Release|Any CPU {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|Any CPU.Build.0 = Debug|Any CPU {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -600,62 +600,62 @@ Global {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x64.Build.0 = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x86.ActiveCfg = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x86.Build.0 = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|x64.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Ad-Hoc|x86.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|Any CPU.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|ARM.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|ARM.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|ARM64.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|ARM64.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|iPhone.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|iPhone.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|x64.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|x64.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|x86.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.AppStore|x86.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|ARM.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|ARM.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|ARM64.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|iPhone.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|x64.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|x64.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|x86.ActiveCfg = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Debug|x86.Build.0 = Debug|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|Any CPU.Build.0 = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|ARM.ActiveCfg = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|ARM.Build.0 = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|ARM64.ActiveCfg = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|ARM64.Build.0 = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|iPhone.ActiveCfg = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|iPhone.Build.0 = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|x64.ActiveCfg = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|x64.Build.0 = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|x86.ActiveCfg = Release|Any CPU - {3F90E6DE-1311-4728-9184-63376F3C05DE}.Release|x86.Build.0 = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|ARM.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|ARM64.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|iPhone.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|x64.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|x64.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|x86.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.AppStore|x86.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|ARM.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|ARM.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|ARM64.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|iPhone.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|x64.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|x64.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|x86.ActiveCfg = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Debug|x86.Build.0 = Debug|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|Any CPU.Build.0 = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|ARM.ActiveCfg = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|ARM.Build.0 = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|ARM64.ActiveCfg = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|ARM64.Build.0 = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|iPhone.ActiveCfg = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|iPhone.Build.0 = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|x64.ActiveCfg = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|x64.Build.0 = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|x86.ActiveCfg = Release|Any CPU + {39287F60-65DE-4077-90F2-57CF725E92B6}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -667,7 +667,7 @@ Global {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B} = {A06042F5-F69D-4191-875E-5ADE9CF42075} {25E04E05-F867-4F64-813D-AAFE0BA171B0} = {A06042F5-F69D-4191-875E-5ADE9CF42075} {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E} = {A06042F5-F69D-4191-875E-5ADE9CF42075} - {3F90E6DE-1311-4728-9184-63376F3C05DE} = {A06042F5-F69D-4191-875E-5ADE9CF42075} + {39287F60-65DE-4077-90F2-57CF725E92B6} = {A06042F5-F69D-4191-875E-5ADE9CF42075} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B5D5105C-EA52-467B-8CCC-6777900C3B95} From a45e1f46bca527f5abba4e2d4d9d189ac83ce77d Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 19 Sep 2023 13:21:00 +0200 Subject: [PATCH 388/527] Improved console output Cleaned up the code in the adapter --- .../BLE.Client.WinConsole/BleDemo.cs | 2 +- .../BLE.Client.WinConsole/ConsoleTracer.cs | 34 +++++++++++-------- .../BLE.Client.WinConsole/Program.cs | 1 + Source/Plugin.BLE/Windows/Adapter.cs | 13 +++---- .../Windows/Extensions/TextHelpers.cs | 8 +++-- 5 files changed, 33 insertions(+), 25 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs index d6aaeb30..f7abeb6d 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs @@ -30,7 +30,7 @@ private void Write(string format, params object[] args) writer?.Invoke(format, args); } - public async Task DoTheScanning(ScanMode scanMode = ScanMode.Passive, int time_ms = 2000) + public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ms = 2000) { if (!bluetoothLE.IsOn) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs index 7e87eb83..38633420 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs @@ -8,6 +8,9 @@ namespace BLE.Client.WinConsole { + /// + /// A class, which can log trace to the console without blocking the caller + /// public class ConsoleTracer { record Entry @@ -19,21 +22,25 @@ object[] Args private readonly DateTime time0; private readonly Stopwatch stopwatch; - private readonly object mutex; + private readonly Task worker; + private readonly object mutex; private readonly AutoResetEvent newEntry = new AutoResetEvent(false); ConcurrentQueue entries = new ConcurrentQueue(); - public ConsoleTracer() + public ConsoleTracer() { mutex = new object(); time0 = DateTime.Now; stopwatch = Stopwatch.StartNew(); - new Thread(WriteWorker) - { - IsBackground = true, - }.Start(); + worker = new Task(WriteWorker); + worker.Start(); } + /// + /// Trace something to the console - adding to queue - not blocking the caller + /// + /// + /// public void Trace(string format, params object[] args) { var time = GetTime(); @@ -43,20 +50,17 @@ public void Trace(string format, params object[] args) void WriteWorker() { - while (newEntry.WaitOne(1000)) + while (newEntry.WaitOne()) { - StringBuilder sb = new StringBuilder(); while (entries.TryDequeue(out Entry entry)) - { - sb.AppendLine(); - //Console.WriteLine(entry.Time.ToString("yyyy-MM-ddTHH:mm:ss.fff ") + string.Format(entry.Format, entry.Args) + " "); - Console.WriteLine(entry.Time.ToString("yyyy-MM-ddTHH:mm:ss.fff ") + entry.Format + " ", entry.Args); - } - //Console.Write(sb.ToString()); + { + //Console.WriteLine(entry.Time.ToString("yyyy-MM-ddTHH:mm:ss.fff ") + entry.Format + " ", entry.Args); + Console.WriteLine(entry.Time.ToString("HH:mm:ss.fff ") + entry.Format + " ", entry.Args); + } } } - private DateTime GetTime() + private DateTime GetTime() { return time0.AddTicks(stopwatch.ElapsedTicks); } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index 3bd820e8..a54387a4 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -9,3 +9,4 @@ await demo.ConnectTest("egoo"); + diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 177ff8bf..ae9aebb5 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -7,11 +7,11 @@ using System.Threading.Tasks; using Windows.Devices.Bluetooth; using Windows.Devices.Bluetooth.Advertisement; - using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; using System.Collections.Concurrent; +using Windows.Devices.Bluetooth.GenericAttributeProfile; namespace Plugin.BLE.UWP { @@ -70,13 +70,14 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect Trace.Message("ConnectToDeviceNativeAsync {0} Named: {1} Connected: {2}", device.Id.ToHexBleAddress(), device.Name, nativeDevice.ConnectionStatus); ConnectedDeviceRegistry[device.Id.ToString()] = device; - nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; - - var gats = await nativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); + nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; + nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; - Trace.Message("ConnectToDeviceNativeAsync DONE {0} Named: {1} Connected: {2}", device.Id.ToHexBleAddress(), device.Name, nativeDevice.ConnectionStatus); - if (nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) + var gattServiceResult = await nativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); + + if (gattServiceResult.Status != GattCommunicationStatus.Success + || nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) { // use DisconnectDeviceNative to clean up resources otherwise windows won't disconnect the device // after a subsequent successful connection (#528, #536, #423) diff --git a/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs b/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs index 323605e7..c5bbc1a8 100644 --- a/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs +++ b/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs @@ -15,8 +15,11 @@ public static string ToDetailedString(this BluetoothLEAdvertisementReceivedEvent { string hexadr = btAdv.BluetoothAddress.ToHexBleAddress(); StringBuilder sb = new StringBuilder(); - sb.Append(hexadr).Append(", Rssi:").Append(btAdv.RawSignalStrengthInDBm) - .Append(", Type: ").Append(btAdv.BluetoothAddressType); + sb.Append(hexadr) + .Append(", ").Append(btAdv.BluetoothAddressType) + .Append(", ").Append(btAdv.RawSignalStrengthInDBm) + .Append(", ").Append(btAdv.AdvertisementType); + if (btAdv.IsConnectable) { sb.Append(", Connectable"); @@ -47,7 +50,6 @@ public static string ToHexBleAddress(this Guid id) //return id.ToString()[^12..].ToUpperInvariant(); //Not for netstandard2.0 } - /// /// Get a string of the BLE address: 48 bit = 6 bytes = 12 Hex chars /// From 60d70b052ab41779389919651c23cfe259aa13e4 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 19 Sep 2023 15:09:34 +0200 Subject: [PATCH 389/527] Improved Advertisement output --- .../BLE.Client.WinConsole/BleDemo.cs | 37 ++++++++++++++----- .../BLE.Client.WinConsole/ConsoleTracer.cs | 14 +++++-- .../BLE.Client.WinConsole/Program.cs | 7 ++-- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs index f7abeb6d..7c462c9e 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs @@ -2,6 +2,7 @@ using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Abstractions.Extensions; +using Plugin.BLE.Extensions; using System; using System.Collections.Generic; using System.Linq; @@ -15,11 +16,11 @@ internal class BleDemo private readonly IBluetoothLE bluetoothLE; private readonly IAdapter adapter; private readonly Action? writer; - private readonly List foundDevices; + private readonly List discoveredDevices; public BleDemo(Action? writer = null) { - foundDevices = new List(); + discoveredDevices = new List(); bluetoothLE = CrossBluetoothLE.Current; adapter = CrossBluetoothLE.Current.Adapter; this.writer = writer; @@ -41,27 +42,45 @@ public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ Write("Bluetooth is on"); Write("Scanning now for " + time_ms + " ms..."); var cancellationTokenSource = new CancellationTokenSource(time_ms); - foundDevices.Clear(); + discoveredDevices.Clear(); adapter.DeviceDiscovered += (s, a) => { var dev = a.Device; - Write("Found: {0} with Name = {1} Connectable: {2}", dev.Id.ToString()[^12..], dev.Name, dev.IsConnectable); - foundDevices.Add(a.Device); + Write("DeviceDiscovered: {0} with Name = {1}", dev.Id.ToHexBleAddress(), dev.Name); + discoveredDevices.Add(a.Device); }; adapter.ScanMode = scanMode; await adapter.StartScanningForDevicesAsync(cancellationToken: cancellationTokenSource.Token); } - public async Task ConnectTest(string subname) + void WriteAdvertisementRecords(IDevice device) { - foreach(var device in foundDevices) + Write("Device.State: {0} with {1} AdvertisementRecords", device.State, device.AdvertisementRecords.Count); + foreach (var ar in device.AdvertisementRecords) { - if (device.Name.Contains(subname)) + switch (ar.Type) + { + case AdvertisementRecordType.CompleteLocalName: + Write(ar.ToString() + " = " + Encoding.UTF8.GetString(ar.Data)); + break; + default: + Write(ar.ToString()); + break; + } + } + } + + public async Task ConnectTest(string name) + { + Thread.Sleep(10); + foreach(var device in discoveredDevices) + { + if (device.Name.Contains(name)) { await adapter.ConnectToDeviceAsync(device); - Write("Device.State: {0}", device.State); + WriteAdvertisementRecords(device); } } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs index 38633420..5c1e1b71 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs @@ -11,7 +11,7 @@ namespace BLE.Client.WinConsole /// /// A class, which can log trace to the console without blocking the caller /// - public class ConsoleTracer + public class ConsoleTracer : IDisposable { record Entry ( @@ -23,13 +23,12 @@ object[] Args private readonly DateTime time0; private readonly Stopwatch stopwatch; private readonly Task worker; - private readonly object mutex; + private bool disposing = false; private readonly AutoResetEvent newEntry = new AutoResetEvent(false); ConcurrentQueue entries = new ConcurrentQueue(); public ConsoleTracer() { - mutex = new object(); time0 = DateTime.Now; stopwatch = Stopwatch.StartNew(); worker = new Task(WriteWorker); @@ -50,7 +49,7 @@ public void Trace(string format, params object[] args) void WriteWorker() { - while (newEntry.WaitOne()) + while (!disposing && newEntry.WaitOne()) { while (entries.TryDequeue(out Entry entry)) { @@ -58,11 +57,18 @@ void WriteWorker() Console.WriteLine(entry.Time.ToString("HH:mm:ss.fff ") + entry.Format + " ", entry.Args); } } + Console.WriteLine("Bye"); } private DateTime GetTime() { return time0.AddTicks(stopwatch.ElapsedTicks); } + + public void Dispose() + { + disposing = true; + worker.Wait(1000); + } } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index a54387a4..04843ceb 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -1,12 +1,13 @@ using BLE.Client.WinConsole; using Plugin.BLE; +using Plugin.BLE.Abstractions.Contracts; Console.WriteLine("Hello, BLE World!"); var ct = new ConsoleTracer(); Plugin.BLE.Abstractions.Trace.TraceImplementation = ct.Trace; var demo = new BleDemo(ct.Trace); -await demo.DoTheScanning(); -await demo.ConnectTest("egoo"); - +await demo.DoTheScanning(ScanMode.LowPower); +await demo.ConnectTest("Shure"); +ct.Dispose(); From e8898f6bc6da68ce89baf50ae7a7f23bbbac4aff Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Wed, 20 Sep 2023 09:41:47 +0200 Subject: [PATCH 390/527] Connect to known in console demo --- Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs index 7c462c9e..a447c2e6 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Windows.Devices.Bluetooth; namespace BLE.Client.WinConsole { @@ -31,6 +32,12 @@ private void Write(string format, params object[] args) writer?.Invoke(format, args); } + public void ConnectToKnown(Guid id) + { + IDevice dev = adapter.ConnectToKnownDeviceAsync(id).Result; + WriteAdvertisementRecords(dev); + } + public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ms = 2000) { @@ -57,7 +64,12 @@ public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ void WriteAdvertisementRecords(IDevice device) { - Write("Device.State: {0} with {1} AdvertisementRecords", device.State, device.AdvertisementRecords.Count); + if (device.AdvertisementRecords is null) + { + Write("{0} {1} has no AdvertisementRecords...", device.Name, device.State); + return; + } + Write("{0} {1} with {2} AdvertisementRecords", device.Name, device.State, device.AdvertisementRecords.Count); foreach (var ar in device.AdvertisementRecords) { switch (ar.Type) From c0142d9d30519a61cf941e7d5f909c4af4d5eb2c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 21 Sep 2023 22:26:58 +0200 Subject: [PATCH 391/527] Release 3.0.0-rc.1 * update version in csproj files * amend changelog.md --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- doc/changelog.md | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 0c252573..3209e2c2 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE - 3.0.0-beta.6 + 3.0.0-rc.1 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil MvvmCross.Plugin.BLE diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index c973ccd1..d4e19970 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 Plugin.BLE Plugin.BLE - 3.0.0-beta.6 + 3.0.0-rc.1 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil Plugin.BLE diff --git a/doc/changelog.md b/doc/changelog.md index 8a896838..1f7e0d2d 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -2,6 +2,10 @@ ## 3.0 MAUI +#### 3.0.0-rc.1 +- #730 Bonding on Android (fixes #690) +- #740 Target Android 13 everywhere + #### 3.0.0-beta.6 - #728 Add Windows support for RequestMtuAsync (fixes #727) - #735 Fix DisconnectAsync hangs on Windows and Android after scanning then connecting with ConnectToKnownDeviceAsync (fixes #734) From 3cd8a1bad15fb513d47bf615e7d91a69aba67731 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 26 Sep 2023 16:34:57 +0200 Subject: [PATCH 392/527] Improved Connect/Disconnect/Connect/Disconnect --- .../BLE.Client.WinConsole/BleDemo.cs | 19 +++++- .../BLE.Client.WinConsole/ConsoleTracer.cs | 2 +- Source/Plugin.BLE/Windows/Adapter.cs | 57 ++++++++++------- Source/Plugin.BLE/Windows/Device.cs | 61 ++++++++++--------- .../Windows/Extensions/TextHelpers.cs | 28 ++++++++- 5 files changed, 113 insertions(+), 54 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs index a447c2e6..5311616c 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs @@ -4,6 +4,7 @@ using Plugin.BLE.Abstractions.Extensions; using Plugin.BLE.Extensions; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; @@ -18,10 +19,12 @@ internal class BleDemo private readonly IAdapter adapter; private readonly Action? writer; private readonly List discoveredDevices; + private readonly IDictionary connectedDevices; public BleDemo(Action? writer = null) { discoveredDevices = new List(); + connectedDevices = new ConcurrentDictionary(); bluetoothLE = CrossBluetoothLE.Current; adapter = CrossBluetoothLE.Current.Adapter; this.writer = writer; @@ -32,10 +35,17 @@ private void Write(string format, params object[] args) writer?.Invoke(format, args); } - public void ConnectToKnown(Guid id) + public IDevice ConnectToKnown(Guid id) { IDevice dev = adapter.ConnectToKnownDeviceAsync(id).Result; - WriteAdvertisementRecords(dev); + connectedDevices[id] = dev; + return dev; + } + + public IDevice ConnectToKnown(string bleaddress) + { + var id = bleaddress.ToBleDeviceGuid(); + return ConnectToKnown(id); } public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ms = 2000) @@ -96,5 +106,10 @@ public async Task ConnectTest(string name) } } } + + internal Task Disconnect(IDevice dev) + { + return adapter.DisconnectDeviceAsync(dev); + } } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs index 5c1e1b71..1e64eb2b 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs @@ -57,7 +57,7 @@ void WriteWorker() Console.WriteLine(entry.Time.ToString("HH:mm:ss.fff ") + entry.Format + " ", entry.Args); } } - Console.WriteLine("Bye"); + Console.WriteLine("Bye bye says the Console Tracer."); } private DateTime GetTime() diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index ae9aebb5..d09ee389 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -17,13 +17,13 @@ namespace Plugin.BLE.UWP { public class Adapter : AdapterBase { - private BluetoothLEAdvertisementWatcher _bleWatcher; + private BluetoothLEAdvertisementWatcher _bleWatcher; /// /// Registry used to store device instances for pending operations : disconnect /// Helps to detect connection lost events. /// - private readonly IDictionary _deviceOperationRegistry = new ConcurrentDictionary(); + private readonly IDictionary _deviceOperationRegistry = new ConcurrentDictionary(); public Adapter() { @@ -65,7 +65,11 @@ protected override void StopScanNative() protected override async Task ConnectToDeviceNativeAsync(IDevice device, ConnectParameters connectParameters, CancellationToken cancellationToken) { - + var dev = device as Device; + if (dev.NativeDevice == null) + { + await dev.RecreateNativeDevice(); + } var nativeDevice = device.NativeDevice as BluetoothLEDevice; Trace.Message("ConnectToDeviceNativeAsync {0} Named: {1} Connected: {2}", device.Id.ToHexBleAddress(), device.Name, nativeDevice.ConnectionStatus); @@ -74,10 +78,13 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; - var gattServiceResult = await nativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); - - if (gattServiceResult.Status != GattCommunicationStatus.Success - || nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) + // Calling the GetGattServicesAsync on the BluetoothLEDevice with uncached property causes the device to connect + BluetoothCacheMode restoremode = BleImplementation.CacheModeGetServices; + BleImplementation.CacheModeGetServices = BluetoothCacheMode.Uncached; + var services = device.GetServicesAsync(cancellationToken).Result; + BleImplementation.CacheModeGetServices = restoremode; + + if (!services.Any() || nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) { // use DisconnectDeviceNative to clean up resources otherwise windows won't disconnect the device // after a subsequent successful connection (#528, #536, #423) @@ -101,12 +108,17 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect else { _deviceOperationRegistry[device.Id.ToString()] = device; - } + } } private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, object args) - { - var id = nativeDevice.BluetoothAddress.ParseDeviceId().ToString(); + { + Trace.Message("Device_ConnectionStatusChanged {0} {1} {2}", + nativeDevice.BluetoothAddress.ToHexBleAddress(), + nativeDevice.Name, + nativeDevice.ConnectionStatus); + var id = nativeDevice.BluetoothAddress.ParseDeviceId().ToString(); + if (nativeDevice.ConnectionStatus == BluetoothConnectionStatus.Connected && ConnectedDeviceRegistry.TryGetValue(id, out var connectedDevice)) { @@ -127,26 +139,29 @@ private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, obje // fire the correct event (DeviceDisconnected or DeviceConnectionLost) HandleDisconnectedDevice(isNormalDisconnect, disconnectedDevice); - } + if (isNormalDisconnect) + { + nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; + } + } } protected override void DisconnectDeviceNative(IDevice device) { // Windows doesn't support disconnecting, so currently just dispose of the device - Trace.Message($"Disconnected from device with ID: {device.Id}"); + Trace.Message($"DisconnectDeviceNative from device with ID: {device.Id.ToHexBleAddress()}"); if (device.NativeDevice is BluetoothLEDevice nativeDevice) - { - _deviceOperationRegistry.Remove(device.Id.ToString()); - nativeDevice.Dispose(); - } + { + _deviceOperationRegistry.Remove(device.Id.ToString()); + ((Device)device).ClearServices(); + ((Device)device).DisposeNativeDevice(); + } } public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) - { - //convert GUID to string and take last 12 characters as MAC address - var guidString = deviceGuid.ToString("N").Substring(20); - var bluetoothAddress = Convert.ToUInt64(guidString, 16); - var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bluetoothAddress); + { + var bleAddress = deviceGuid.ToBleAddress(); + var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bleAddress); if (nativeDevice == null) throw new Abstractions.Exceptions.DeviceConnectionException(deviceGuid, "", $"[Adapter] Device {deviceGuid} not found."); diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 112e47ba..ddde18fa 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -6,11 +6,17 @@ using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; +using System.Threading; +using System.Collections.Concurrent; namespace Plugin.BLE.UWP { public class Device : DeviceBase - { + { + private ConcurrentBag asyncOperations = new(); + private readonly Mutex opMutex = new Mutex(false); + private readonly SemaphoreSlim opSemaphore = new SemaphoreSlim(1); + public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id, IReadOnlyList advertisementRecords = null, bool isConnectable = true) : base(adapter, nativeDevice) @@ -33,11 +39,27 @@ public override Task UpdateRssiAsync() //No current method to update the Rssi of a device //In future implementations, maybe listen for device's advertisements - Trace.Message("Request RSSI not supported in UWP"); + Trace.Message("Request RSSI not supported in UWP"); return Task.FromResult(true); } + public void DisposeNativeDevice() + { + if (NativeDevice is not null) + { + NativeDevice.Dispose(); + NativeDevice = null; + } + } + + public async Task RecreateNativeDevice() + { + DisposeNativeDevice(); + var bleAddress = Id.ToBleAddress(); + NativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bleAddress); + } + protected override async Task> GetServicesNativeAsync() { if (NativeDevice == null) @@ -50,6 +72,7 @@ protected override async Task> GetServicesNativeAsync() .Select(nativeService => new Service(nativeService, this)) .Cast() .ToList() ?? new List(); + } protected override async Task GetServiceNativeAsync(Guid id) @@ -63,6 +86,10 @@ protected override async Task GetServiceNativeAsync(Guid id) protected override DeviceState GetState() { + if (NativeDevice is null) + { + return DeviceState.Disconnected; + } if (NativeDevice.ConnectionStatus == BluetoothConnectionStatus.Connected) { return DeviceState.Connected; @@ -81,42 +108,18 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv { Trace.Message("Update Connection Interval not supported in UWP"); return false; - } + } public override void Dispose() { if (NativeDevice != null) { - Trace.Message("Disposing {0} with id = {1}", Name, Id.ToString()); + Trace.Message("Disposing {0} with name = {1}", Id.ToHexBleAddress(), Name); NativeDevice.Dispose(); - NativeDevice = null; + NativeDevice = null; } - //FreeResources(false); } - //internal void FreeResources(bool recreateNativeDevice = true) - //{ - // NativeDevice?.Services?.ToList().ForEach(s => - // { - // s?.Service?.Session?.Dispose(); - // s?.Service?.Dispose(); - // }); - - // // save these so we can re-create ObservableBluetoothLEDevice if needed - // var tempDevInfo = NativeDevice?.DeviceInfo; - // var tempDq = NativeDevice?.DispatcherQueue; - - // NativeDevice?.BluetoothLEDevice?.Dispose(); - - // // the ObservableBluetoothLEDevice doesn't really support the BluetoothLEDevice - // // being disposed so we need to recreate it. What we really need is to be able - // // to set NativeDevice?.BluetoothLEDevice = null; - // if (recreateNativeDevice) - // NativeDevice = new ObservableBluetoothLEDevice(tempDevInfo, tempDq); - - // GC.Collect(); - //} - public override bool IsConnectable { get; protected set; } public override bool SupportsIsConnectable { get => true; } diff --git a/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs b/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs index c5bbc1a8..1544420b 100644 --- a/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs +++ b/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs @@ -46,7 +46,7 @@ public static string ToDetailedString(this BluetoothLEAdvertisementReceivedEvent /// public static string ToHexBleAddress(this Guid id) { - return id.ToString("N").Substring(20); + return id.ToString("N").Substring(20).ToUpperInvariant(); //return id.ToString()[^12..].ToUpperInvariant(); //Not for netstandard2.0 } @@ -78,4 +78,30 @@ public static Guid ParseDeviceId(this ulong bluetoothAddress) macBytes.CopyTo(deviceGuid, 10); return new Guid(deviceGuid); } + + /// + /// Covert 12 chars hex string = 6 bytes = 48 bits to Guid used in this plugin + /// + /// + /// + public static Guid ToBleDeviceGuid(this string macWithoutColons) + { + macWithoutColons = macWithoutColons.PadLeft(12, '0'); //ensure valid length + var deviceGuid = new byte[16]; + Array.Clear(deviceGuid, 0, 16); + var macBytes = Enumerable.Range(0, macWithoutColons.Length) + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(macWithoutColons.Substring(x, 2), 16)) + .ToArray(); + macBytes.CopyTo(deviceGuid, 10); + return new Guid(deviceGuid); + } + + public static ulong ToBleAddress(this Guid deviceGuid) + { + //convert GUID to string and take last 12 characters as MAC address + var guidString = deviceGuid.ToString("N").Substring(20); + var bluetoothAddress = Convert.ToUInt64(guidString, 16); + return bluetoothAddress; + } } From ea78b31896573ae71ee003832e663c1cf25bf8ae Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 7 Oct 2023 22:07:59 +0200 Subject: [PATCH 393/527] update MvvmCross to 9.1.1 * for .NET 6 upwards * the Xamarin targets stay at 8.0.2 (because they are not supported by v9) --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 3209e2c2..c2fddfbf 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -82,7 +82,7 @@ - + @@ -93,7 +93,7 @@ - + @@ -105,7 +105,7 @@ - + @@ -113,7 +113,7 @@ - + From 8b138ae76d6e4de52a1688c9a0f758d9f8ec4b88 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 8 Oct 2023 13:02:14 +0200 Subject: [PATCH 394/527] Release 3.0.0 * update version in csproj files * amend changelog.md --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- doc/changelog.md | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index c2fddfbf..ab3afe17 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE - 3.0.0-rc.1 + 3.0.0 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil MvvmCross.Plugin.BLE diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index d4e19970..82544821 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 Plugin.BLE Plugin.BLE - 3.0.0-rc.1 + 3.0.0 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil Plugin.BLE diff --git a/doc/changelog.md b/doc/changelog.md index 1f7e0d2d..5fc7b495 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -2,6 +2,11 @@ ## 3.0 MAUI +#### 3.0.0 +- Add support for MAUI (.NET 6 and 7), while keeping compatibility with Xamarin +- Add support for Windows (UWP & WinUI, experimental) +- Various improvements and bugfixes (see beta- and pre-releases) + #### 3.0.0-rc.1 - #730 Bonding on Android (fixes #690) - #740 Target Android 13 everywhere From 0b92d0eab2cafc20c84051595876aad18e5ac962 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 9 Oct 2023 12:37:28 +0200 Subject: [PATCH 395/527] Improved BLE adapter detection --- Source/Plugin.BLE/Windows/BleImplementation.cs | 8 ++++++-- .../Windows/Extensions/GattProtocolErrorParser.cs | 2 +- .../Plugin.BLE/Windows/Extensions/GattResultExtensions.cs | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Source/Plugin.BLE/Windows/BleImplementation.cs b/Source/Plugin.BLE/Windows/BleImplementation.cs index b7c64b85..f9883045 100644 --- a/Source/Plugin.BLE/Windows/BleImplementation.cs +++ b/Source/Plugin.BLE/Windows/BleImplementation.cs @@ -26,10 +26,14 @@ protected override BluetoothState GetInitialStateNative() try { BluetoothAdapter btAdapter = BluetoothAdapter.GetDefaultAsync().AsTask().Result; - var radio = btAdapter.GetRadioAsync().AsTask().Result; + if (!btAdapter.IsLowEnergySupported) + { + return BluetoothState.Unavailable; + } + var radio = btAdapter.GetRadioAsync().AsTask().Result; switch (radio.State) { - case RadioState.On: + case RadioState.On: return BluetoothState.On; case RadioState.Off: return BluetoothState.Off; diff --git a/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs b/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs index 4f96f51f..e988b7e5 100644 --- a/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs +++ b/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs @@ -18,7 +18,7 @@ namespace Plugin.BLE.Extensions; /// /// Helper function when working with /// -public static class GattProtocolErrorParser +internal static class GattProtocolErrorParser { /// /// Helper to convert an Gatt error value into a string diff --git a/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs b/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs index 387161cc..9f8112c3 100644 --- a/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs +++ b/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs @@ -7,7 +7,7 @@ namespace Plugin.BLE.Extensions { - public static class GattResultExtensions + internal static class GattResultExtensions { public static void ThrowIfError(this GattWriteResult result, [CallerMemberName]string tag = null) => result.Status.ThrowIfError(tag, result.ProtocolError); From 498c1e84a8725e1f7cf3498e6a9032fc3e283a67 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 20 Oct 2023 21:48:33 +0200 Subject: [PATCH 396/527] BLE.Client.Maui: add a target framework for Windows10 --- Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index 81f3e115..a0b23afd 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -2,6 +2,7 @@ net7.0-android33.0;net7.0-ios;net7.0-maccatalyst + $(TargetFrameworks);net7.0-windows10.0.19041 Exe BLE.Client.Maui true From 16f6d774246308a50b38ee8d6eb8226f20963762 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 20 Oct 2023 21:59:59 +0200 Subject: [PATCH 397/527] BLE.sln: deploy project BLE.Client.Maui * so that it can be debugged --- Source/BLE.sln | 128 ++++++++++++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 59 deletions(-) diff --git a/Source/BLE.sln b/Source/BLE.sln index 93ec24bb..15cc01f0 100644 --- a/Source/BLE.sln +++ b/Source/BLE.sln @@ -40,11 +40,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.Droid", "BLE.Cli EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.iOS", "BLE.Client\BLE.Client.iOS\BLE.Client.iOS.csproj", "{D0FBE2BA-799B-4071-A45D-8FB037006C9C}" EndProject -Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "BLE.Client.macOS", "BLE.Client\BLE.Client.macOS\BLE.Client.macOS.csproj", "{08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.macOS", "BLE.Client\BLE.Client.macOS\BLE.Client.macOS.csproj", "{B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.UWP", "BLE.Client\BLE.Client.UWP\BLE.Client.UWP.csproj", "{25E04E05-F867-4F64-813D-AAFE0BA171B0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.Maui", "BLE.Client\BLE.Client.Maui\BLE.Client.Maui.csproj", "{D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BLE.Client.Maui", "BLE.Client\BLE.Client.Maui\BLE.Client.Maui.csproj", "{D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -416,62 +416,62 @@ Global {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|x64.ActiveCfg = Release|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|x86.ActiveCfg = Release|iPhone - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x64.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Ad-Hoc|x86.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|Any CPU.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM64.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|ARM64.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhone.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x64.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x64.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x86.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.AppStore|x86.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|ARM.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|ARM.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|ARM64.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|iPhone.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|x64.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|x64.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|x86.ActiveCfg = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Debug|x86.Build.0 = Debug|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|Any CPU.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|ARM.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|ARM.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|ARM64.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|ARM64.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|iPhone.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|iPhone.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|x64.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|x64.Build.0 = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|x86.ActiveCfg = Release|Any CPU - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B}.Release|x86.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|Any CPU.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|ARM.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|ARM.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|ARM64.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|iPhone.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|x64.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|x64.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|x86.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|x86.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|ARM.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|ARM.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|ARM64.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|iPhone.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|x64.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|x64.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|x86.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|x86.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|Any CPU.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|ARM.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|ARM.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|ARM64.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|ARM64.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|iPhone.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|iPhone.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|x64.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|x64.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|x86.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|x86.Build.0 = Release|Any CPU {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|Any CPU.Build.0 = Release|x64 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 @@ -572,32 +572,42 @@ Global {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.AppStore|x86.Build.0 = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|ARM.ActiveCfg = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|ARM.Build.0 = Debug|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|ARM.Deploy.0 = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|ARM64.ActiveCfg = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|ARM64.Build.0 = Debug|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|ARM64.Deploy.0 = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|iPhone.ActiveCfg = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|iPhone.Build.0 = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|x64.ActiveCfg = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|x64.Build.0 = Debug|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|x64.Deploy.0 = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|x86.ActiveCfg = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|x86.Build.0 = Debug|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Debug|x86.Deploy.0 = Debug|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|Any CPU.ActiveCfg = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|Any CPU.Build.0 = Release|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|Any CPU.Deploy.0 = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|ARM.ActiveCfg = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|ARM.Build.0 = Release|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|ARM.Deploy.0 = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|ARM64.ActiveCfg = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|ARM64.Build.0 = Release|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|ARM64.Deploy.0 = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|iPhone.ActiveCfg = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|iPhone.Build.0 = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x64.ActiveCfg = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x64.Build.0 = Release|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x64.Deploy.0 = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x86.ActiveCfg = Release|Any CPU {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x86.Build.0 = Release|Any CPU + {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E}.Release|x86.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -606,7 +616,7 @@ Global {DFE97BE0-070B-43AD-BF37-50FD42B542D1} = {A06042F5-F69D-4191-875E-5ADE9CF42075} {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7} = {A06042F5-F69D-4191-875E-5ADE9CF42075} {D0FBE2BA-799B-4071-A45D-8FB037006C9C} = {A06042F5-F69D-4191-875E-5ADE9CF42075} - {08364CFC-8328-4CE0-9A15-91CB3EAA9B0B} = {A06042F5-F69D-4191-875E-5ADE9CF42075} + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED} = {A06042F5-F69D-4191-875E-5ADE9CF42075} {25E04E05-F867-4F64-813D-AAFE0BA171B0} = {A06042F5-F69D-4191-875E-5ADE9CF42075} {D04F2D04-A33F-4E09-9EE2-29D7B2A6CD4E} = {A06042F5-F69D-4191-875E-5ADE9CF42075} EndGlobalSection From 42db04dc04ee62c48b49b2928d70709f7b4dee3d Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 20 Oct 2023 22:18:06 +0200 Subject: [PATCH 398/527] BLE.Client.Maui: implement IPlatformHelpers on Windows --- Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs | 2 ++ .../Platforms/Windows/WindowsPlatformHelpers.cs | 10 ++++++++++ 2 files changed, 12 insertions(+) create mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/WindowsPlatformHelpers.cs diff --git a/Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs b/Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs index 9a4ef7dd..d2286027 100644 --- a/Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs +++ b/Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs @@ -42,6 +42,8 @@ private static void AddPlatformSpecificItems(MauiAppBuilder builder) builder.Services.AddSingleton(); #elif MACCATALYST builder.Services.AddSingleton(); +#elif WINDOWS + builder.Services.AddSingleton(); #endif } } diff --git a/Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/WindowsPlatformHelpers.cs b/Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/WindowsPlatformHelpers.cs new file mode 100644 index 00000000..349fcda5 --- /dev/null +++ b/Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/WindowsPlatformHelpers.cs @@ -0,0 +1,10 @@ +namespace BLE.Client.Helpers +{ + public class WindowsPlatformHelpers : IPlatformHelpers + { + public Task CheckAndRequestBluetoothPermissions() + { + return Task.FromResult(PermissionStatus.Granted); + } + } +} From 4a5f987296f6e6cabc91b2951ab1223607eadb22 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 21 Oct 2023 09:21:56 +0200 Subject: [PATCH 399/527] BLE.Client.Maui: fix a runtime exception on Windows System.Runtime.InteropServices.COMException: 'The application called an interface that was marshalled for a different thread. (0x8001010E (RPC_E_WRONG_THREAD))' --- .../BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs b/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs index 52b9fe6b..5547f033 100644 --- a/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs +++ b/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs @@ -215,7 +215,8 @@ private void AddOrUpdateDevice(IDevice device) else { DebugMessage($"Add Device: {device.Id}"); - BLEDevices.Add(new BLEDeviceViewModel(device)); + vm = new BLEDeviceViewModel(device); + MainThread.BeginInvokeOnMainThread(() => BLEDevices.Add(vm)); OnPropertyChanged(nameof(BLEDevices)); } DebugMessage($"Device Found: '{device.Id}' done"); From 79802286faec73a813f3f60015b970c04629985c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 21 Oct 2023 14:23:31 +0200 Subject: [PATCH 400/527] GHA: build BLE.Client.Maui on Mac * and remove the "setup-nuget" action (unnecessary) --- .github/workflows/dotnet.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 40662c8a..fa6f41a2 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -75,7 +75,6 @@ jobs: - uses: actions/checkout@v3 with: fetch-depth: 0 - - uses: nuget/setup-nuget@v1 - name: Setup .NET uses: actions/setup-dotnet@v3 with: @@ -89,3 +88,5 @@ jobs: run: dotnet build ./Source/Plugin.BLE/Plugin.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false - name: Build MVVMCross.Plugins.BLE NuGet run: dotnet build ./Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false + - name: Build MAUI sample + run: dotnet build ./Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj /p:Configuration=Release /t:restore,build /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false From 2590003758ea9cdaf674e287e61238bd1f925c2f Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 21 Oct 2023 16:11:59 +0200 Subject: [PATCH 401/527] GHA: run on Mac OS 13 * to fix strange warnings and errors in BLE.Client.Maui (see below) * macos-latest is currently at 12.7 ILLINK : warning MT0079: The recommended Xcode version for Microsoft.iOS 16.4.7107 is Xcode 14.3 or later. The current Xcode version (found in /Applications/Xcode_14.2.app/Contents/Developer) is 14.2. [/Users/runner/work/dotnet-bluetooth-le/dotnet-bluetooth-le/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj::TargetFramework=net7.0-ios] ILLINK : warning MT0079: The recommended Xcode version for Microsoft.MacCatalyst 16.4.7107 is Xcode 14.3 or later. The current Xcode version (found in /Applications/Xcode_14.2.app/Contents/Developer) is 14.2. [/Users/runner/work/dotnet-bluetooth-le/dotnet-bluetooth-le/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj::TargetFramework=net7.0-maccatalyst] ILLink : unknown error IL7000: An error occured while executing the custom linker steps. Please review the build log for more information. [/Users/runner/work/dotnet-bluetooth-le/dotnet-bluetooth-le/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj::TargetFramework=net7.0-ios] ILLINK : error MT0180: This version of Microsoft.iOS requires the iOS 16.4 SDK (shipped with Xcode 14.3). Either upgrade Xcode to get the required header files or set the managed linker behaviour to Link Framework SDKs Only in your project's iOS Build Options > Linker Behavior (to try to avoid the new APIs). [/Users/runner/work/dotnet-bluetooth-le/dotnet-bluetooth-le/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj::TargetFramework=net7.0-ios] ILLINK : error MT2301: The linker step 'Setup' failed during processing: This version of Microsoft.iOS requires the iOS 16.4 SDK (shipped with Xcode 14.3). Either upgrade Xcode to get the required header files or set the managed linker behaviour to Link Framework SDKs Only in your project's iOS Build Options > Linker Behavior (to try to avoid the new APIs). [/Users/runner/work/dotnet-bluetooth-le/dotnet-bluetooth-le/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj::TargetFramework=net7.0-ios] Error: /Users/runner/.dotnet/sdk/7.0.402/Sdks/Microsoft.NET.ILLink.Tasks/build/Microsoft.NET.ILLink.targets(86,5): error NETSDK1144: Optimizing assemblies for size failed. Optimization can be disabled by setting the PublishTrimmed property to false. [/Users/runner/work/dotnet-bluetooth-le/dotnet-bluetooth-le/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj::TargetFramework=net7.0-ios] --- .github/workflows/dotnet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index fa6f41a2..c086a327 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -70,7 +70,7 @@ jobs: path: ./Source/*/nuget/*Plugin.BLE*.nupkg macBuild: - runs-on: macos-latest + runs-on: macos-13 steps: - uses: actions/checkout@v3 with: From a9353003ba3936cce5eb3feb773cbbc8e5d7d143 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 21 Oct 2023 21:45:47 +0200 Subject: [PATCH 402/527] Plugin.BLE.Tests: update Microsoft.NET.Test.Sdk and xunit --- Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj index 111927c8..e037de93 100644 --- a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj +++ b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj @@ -4,13 +4,13 @@ false - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive From ea4e53dfa1a222e2b49859e0a1c032b60b1b6b0d Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 21 Oct 2023 22:01:50 +0200 Subject: [PATCH 403/527] BLE.Client: update Xamarin.Forms to 5.0.0.2612 --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 2 +- Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj | 4 ++-- Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj | 4 ++-- Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj | 2 +- Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index ecaf0c82..56646670 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -123,7 +123,7 @@ 0.2.0.64 - 5.0.0.2478 + 5.0.0.2612 1.2.5.4 diff --git a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj index fb0c1de0..668fc015 100644 --- a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj +++ b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj @@ -192,7 +192,7 @@ 2.0.0 - 5.0.0.2478 + 5.0.0.2612 @@ -217,4 +217,4 @@ --> - + \ No newline at end of file diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index f4589537..4c2bc096 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -198,9 +198,9 @@ 0.2.0.64 - 5.0.0.2478 + 5.0.0.2612 - + \ No newline at end of file diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index e5bd9132..d46482af 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -105,7 +105,7 @@ 8.0.2 - 5.0.0.2478 + 5.0.0.2612 diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 4b035576..37c04c08 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -14,7 +14,7 @@ - + From 0249457b7266cd25765c7425323ea2d1c422332a Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 21 Oct 2023 22:15:48 +0200 Subject: [PATCH 404/527] BLE.Client: update Xamarin.Essentials to 1.8.0 --- Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 37c04c08..b2dbf771 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -15,7 +15,7 @@ - + From 6d74b9ffbd69cdfb70f6cbada582cf058803ef91 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 22 Oct 2023 10:26:15 +0200 Subject: [PATCH 405/527] BLE.Client: update Microsoft.Extensions.Logging to 7.0.0 --- Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj | 2 +- Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj index 668fc015..999a4246 100644 --- a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj +++ b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj @@ -171,7 +171,7 @@ 7.1.0.514 - 6.0.0 + 7.0.0 6.2.14 diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index b2dbf771..a566de6f 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -11,7 +11,7 @@ - + From 3dfbda8a7c3cc73b62814d4c13fa9e4803f090d6 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 22 Oct 2023 10:52:24 +0200 Subject: [PATCH 406/527] BLE.Client: update Serilog packages --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 4 ++-- Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj | 4 ++-- Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index 56646670..bd387c8e 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -117,10 +117,10 @@ 8.0.2 - 3.1.0 + 7.0.0 - 0.2.0.64 + 1.0.0 5.0.0.2612 diff --git a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj index 999a4246..2cc3a446 100644 --- a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj +++ b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj @@ -183,10 +183,10 @@ 8.0.2 - 2.11.0 + 3.0.1 - 3.1.0 + 7.0.0 2.0.0 diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index 4c2bc096..b8570709 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -192,10 +192,10 @@ 8.0.2 - 3.1.0 + 7.0.0 - 0.2.0.64 + 1.0.0 5.0.0.2612 From 2e6ecde002f2a7873a2a77bc50d9c0d9b61c4c72 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 22 Oct 2023 11:12:53 +0200 Subject: [PATCH 407/527] BLE.Client.Droid: update AndroidX packages --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index bd387c8e..6aea4786 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -126,17 +126,17 @@ 5.0.0.2612 - 1.2.5.4 + 1.6.0.1 - 1.0.0.12 + 1.0.0.21 - 1.2.1.5 + 1.3.1.2 - 1.1.1.13 + 1.2.1.2 - + \ No newline at end of file From 74d4f89052746326c1c21380a10d1747b9dda9d9 Mon Sep 17 00:00:00 2001 From: Aidan Riley Date: Wed, 25 Oct 2023 12:08:21 +0100 Subject: [PATCH 408/527] ReadAsync updates characteristic value on Windows --- Source/Plugin.BLE/Windows/Characteristic.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Windows/Characteristic.cs b/Source/Plugin.BLE/Windows/Characteristic.cs index acac08bf..c6e726d0 100644 --- a/Source/Plugin.BLE/Windows/Characteristic.cs +++ b/Source/Plugin.BLE/Windows/Characteristic.cs @@ -50,7 +50,7 @@ protected override async Task> GetDescriptorsNativeAs protected override async Task<(byte[] data, int resultCode)> ReadNativeAsync() { var readResult = await NativeCharacteristic.ReadValueAsync(BleImplementation.CacheModeCharacteristicRead); - var _value = readResult.GetValueOrThrowIfError(); + _value = readResult.GetValueOrThrowIfError(); return (_value, (int)readResult.Status); } From 63554278a1f8075c97e73f3377c874b0b2d64618 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 25 Oct 2023 21:37:01 +0200 Subject: [PATCH 409/527] Update README.md --- README.md | 53 ++++++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 6cf6636c..588a0f8e 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,9 @@ Install-Package MvvmCross.Plugin.BLE Install-Package MvvmCross.Plugin.BLE -Pre ``` -**Android** +## Permissions + +### Android Add these permissions to AndroidManifest.xml. For Marshmallow and above, please follow [Requesting Runtime Permissions in Android Marshmallow](https://devblogs.microsoft.com/xamarin/requesting-runtime-permissions-in-android-marshmallow/) and don't forget to prompt the user for the location permission. @@ -60,45 +62,46 @@ Android 12 and above may require one or more of the following additional runtime - ``` - Add this line to your manifest if you want to declare that your app is available to BLE-capable devices **only**: ```xml ```` -**iOS** +### iOS On iOS you must add the following keys to your `Info.plist` - UIBackgroundModes - - - bluetooth-central - - - bluetooth-peripheral - - - - NSBluetoothPeripheralUsageDescription - YOUR CUSTOM MESSAGE - - - NSBluetoothAlwaysUsageDescription - YOUR CUSTOM MESSAGE +```xml +UIBackgroundModes + + + bluetooth-central + + bluetooth-peripheral + + + +NSBluetoothPeripheralUsageDescription +YOUR CUSTOM MESSAGE + + +NSBluetoothAlwaysUsageDescription +YOUR CUSTOM MESSAGE +```` -**MacOS** +### MacOS On MacOS (version 11 and above) you must add the following keys to your `Info.plist`: - - NSBluetoothAlwaysUsageDescription - YOUR CUSTOM MESSAGE +```xml + +NSBluetoothAlwaysUsageDescription +YOUR CUSTOM MESSAGE +```` -**UWP** +### UWP Add this line to the Package Manifest (.appxmanifest): From 4fca5e389052ecc988f85d3bb939f1bfd84ad72e Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sat, 28 Oct 2023 13:51:11 +0200 Subject: [PATCH 410/527] Improve logging when receiving advertisements --- .../BLE.Client/BLE.Client.WinConsole/BleDemo.cs | 12 +++++++++++- Source/Plugin.BLE/Windows/Adapter.cs | 15 ++++++++++----- .../Plugin.BLE/Windows/Extensions/TextHelpers.cs | 15 ++++++++++++--- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs index 5311616c..65001504 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs @@ -72,7 +72,7 @@ public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ } - void WriteAdvertisementRecords(IDevice device) + private void WriteAdvertisementRecords(IDevice device) { if (device.AdvertisementRecords is null) { @@ -107,6 +107,16 @@ public async Task ConnectTest(string name) } } + public void ShowGetSystemConnectedOrPairedDevices() + { + IReadOnlyList devs = adapter.GetSystemConnectedOrPairedDevices(); + Write("GetSystemConnectedOrPairedDevices found {0} devices.", devs.Count); + foreach(var dev in devs) + { + Write("{0}: {1}", dev.Id.ToHexBleAddress(), dev.Name); + } + } + internal Task Disconnect(IDevice dev) { return adapter.DisconnectDeviceAsync(dev); diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 7a55195d..0e63b4de 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -12,6 +12,7 @@ using Plugin.BLE.Extensions; using System.Collections.Concurrent; using Windows.Devices.Bluetooth.GenericAttributeProfile; +using Windows.Devices.Enumeration; namespace Plugin.BLE.UWP { @@ -210,17 +211,15 @@ private void AdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, Blue { var deviceId = btAdv.BluetoothAddress.ParseDeviceId(); - if (DiscoveredDevicesRegistry.TryGetValue(deviceId, out var device)) + if (DiscoveredDevicesRegistry.TryGetValue(deviceId, out var device) && device != null) { - Trace.Message("AdvertisementReceived - Old Device: {0}", btAdv.ToDetailedString()); + Trace.Message("AdvReceived - Old: {0}", btAdv.ToDetailedString(device.Name)); (device as Device)?.Update(btAdv.RawSignalStrengthInDBm, ParseAdvertisementData(btAdv.Advertisement)); this.HandleDiscoveredDevice(device); } - else + if (device == null) { - Trace.Message("AdvertisementReceived - New Device: {0}", btAdv.ToDetailedString()); var bluetoothLeDevice = BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress).AsTask().Result; - //var bluetoothLeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); if (bluetoothLeDevice != null) //make sure advertisement bluetooth address actually returns a device { device = new Device( @@ -230,8 +229,14 @@ private void AdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, Blue deviceId, ParseAdvertisementData(btAdv.Advertisement), btAdv.IsConnectable); + Trace.Message("AdvReceived - New: {0}", btAdv.ToDetailedString(device.Name)); + _ = DiscoveredDevicesRegistry.TryRemove(deviceId, out _); this.HandleDiscoveredDevice(device); } + else + { + DiscoveredDevicesRegistry[deviceId] = null; + } } } diff --git a/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs b/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs index 1544420b..83cbfda4 100644 --- a/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs +++ b/Source/Plugin.BLE/Windows/Extensions/TextHelpers.cs @@ -11,11 +11,12 @@ namespace Plugin.BLE.Extensions; public static class TextHelpers { - public static string ToDetailedString(this BluetoothLEAdvertisementReceivedEventArgs btAdv) + public static string ToDetailedString(this BluetoothLEAdvertisementReceivedEventArgs btAdv, string name = "na") { string hexadr = btAdv.BluetoothAddress.ToHexBleAddress(); StringBuilder sb = new StringBuilder(); sb.Append(hexadr) + .Append(", ").Append(name) .Append(", ").Append(btAdv.BluetoothAddressType) .Append(", ").Append(btAdv.RawSignalStrengthInDBm) .Append(", ").Append(btAdv.AdvertisementType); @@ -37,7 +38,7 @@ public static string ToDetailedString(this BluetoothLEAdvertisementReceivedEvent sb.Append(", Directed"); } return sb.ToString(); - } + } /// /// Get a string of the BLE address: 48 bit = 6 bytes = 12 Hex chars @@ -80,7 +81,7 @@ public static Guid ParseDeviceId(this ulong bluetoothAddress) } /// - /// Covert 12 chars hex string = 6 bytes = 48 bits to Guid used in this plugin + /// Convert 12 chars hex string = 6 bytes = 48 bits to Guid used in this plugin /// /// /// @@ -97,6 +98,14 @@ public static Guid ToBleDeviceGuid(this string macWithoutColons) return new Guid(deviceGuid); } + public static Guid ToBleDeviceGuidFromId(this string idWithColons) + { + //example: Bluetooth#Bluetoothe4:aa:ea:cd:28:00-70:bf:92:06:e1:9e + var nocolons = idWithColons.Replace(":", ""); + return ToBleDeviceGuid(nocolons.Substring(nocolons.Length-12, 12)); + } + + public static ulong ToBleAddress(this Guid deviceGuid) { //convert GUID to string and take last 12 characters as MAC address From a77893cadba3977ef4d85feee82a897f5d4af843 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sat, 28 Oct 2023 14:44:27 +0200 Subject: [PATCH 411/527] Added comments in the GattProtocolErrorParser.cs file --- .../Extensions/GattProtocolErrorParser.cs | 223 +++++++++--------- 1 file changed, 111 insertions(+), 112 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs b/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs index e988b7e5..d17f9216 100644 --- a/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs +++ b/Source/Plugin.BLE/Windows/Extensions/GattProtocolErrorParser.cs @@ -1,125 +1,124 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using Windows.Devices.Bluetooth.GenericAttributeProfile; -namespace Plugin.BLE.Extensions; - -// -// This code has been copied from CommunityToolkit.WinUI.Connectivity -// // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -/// -/// Helper function when working with -/// -internal static class GattProtocolErrorParser +// This file has been copied from CommunityToolkit.WinUI.Connectivity +// https://github.com/CommunityToolkit/WindowsCommunityToolkit/blob/main/Microsoft.Toolkit.Uwp.Connectivity/BluetoothLEHelper/GattProtocolErrorParser.cs +// Date: 2023-10-28 with these changes applied: +// 1. These comments are added +// 2. namespace Microsoft.Toolkit.Uwp.Connectivity -> Plugin.BLE.Extensions +// 3. public static class GattProtocolErrorParser -> internal static class GattProtocolErrorParser + +using Windows.Devices.Bluetooth.GenericAttributeProfile; + +namespace Plugin.BLE.Extensions { /// - /// Helper to convert an Gatt error value into a string + /// Helper function when working with /// - /// the byte error value. - /// String representation of the error - public static string GetErrorString(this byte? errorValue) + internal static class GattProtocolErrorParser { - var errorString = "Protocol Error"; + /// + /// Helper to convert an Gatt error value into a string + /// + /// the byte error value. + /// String representation of the error + public static string GetErrorString(this byte? errorValue) + { + var errorString = "Protocol Error"; + + if (errorValue.HasValue == false) + { + return errorString; + } + + if (errorValue == GattProtocolError.AttributeNotFound) + { + return "Attribute Not Found"; + } + + if (errorValue == GattProtocolError.AttributeNotLong) + { + return "Attribute Not Long"; + } + + if (errorValue == GattProtocolError.InsufficientAuthentication) + { + return "Insufficient Authentication"; + } + + if (errorValue == GattProtocolError.InsufficientAuthorization) + { + return "Insufficient Authorization"; + } + + if (errorValue == GattProtocolError.InsufficientEncryption) + { + return "Insufficient Encryption"; + } + + if (errorValue == GattProtocolError.InsufficientEncryptionKeySize) + { + return "Insufficient Encryption Key Size"; + } + + if (errorValue == GattProtocolError.InsufficientResources) + { + return "Insufficient Resources"; + } + + if (errorValue == GattProtocolError.InvalidAttributeValueLength) + { + return "Invalid Attribute Value Length"; + } + + if (errorValue == GattProtocolError.InvalidHandle) + { + return "Invalid Handle"; + } + + if (errorValue == GattProtocolError.InvalidOffset) + { + return "Invalid Offset"; + } + + if (errorValue == GattProtocolError.InvalidPdu) + { + return "Invalid Pdu"; + } + + if (errorValue == GattProtocolError.PrepareQueueFull) + { + return "Prepare Queue Full"; + } + + if (errorValue == GattProtocolError.ReadNotPermitted) + { + return "Read Not Permitted"; + } + + if (errorValue == GattProtocolError.RequestNotSupported) + { + return "Request Not Supported"; + } + + if (errorValue == GattProtocolError.UnlikelyError) + { + return "UnlikelyError"; + } + + if (errorValue == GattProtocolError.UnsupportedGroupType) + { + return "Unsupported Group Type"; + } + + if (errorValue == GattProtocolError.WriteNotPermitted) + { + return "Write Not Permitted"; + } - if (errorValue.HasValue == false) - { return errorString; } - - if (errorValue == GattProtocolError.AttributeNotFound) - { - return "Attribute Not Found"; - } - - if (errorValue == GattProtocolError.AttributeNotLong) - { - return "Attribute Not Long"; - } - - if (errorValue == GattProtocolError.InsufficientAuthentication) - { - return "Insufficient Authentication"; - } - - if (errorValue == GattProtocolError.InsufficientAuthorization) - { - return "Insufficient Authorization"; - } - - if (errorValue == GattProtocolError.InsufficientEncryption) - { - return "Insufficient Encryption"; - } - - if (errorValue == GattProtocolError.InsufficientEncryptionKeySize) - { - return "Insufficient Encryption Key Size"; - } - - if (errorValue == GattProtocolError.InsufficientResources) - { - return "Insufficient Resources"; - } - - if (errorValue == GattProtocolError.InvalidAttributeValueLength) - { - return "Invalid Attribute Value Length"; - } - - if (errorValue == GattProtocolError.InvalidHandle) - { - return "Invalid Handle"; - } - - if (errorValue == GattProtocolError.InvalidOffset) - { - return "Invalid Offset"; - } - - if (errorValue == GattProtocolError.InvalidPdu) - { - return "Invalid Pdu"; - } - - if (errorValue == GattProtocolError.PrepareQueueFull) - { - return "Prepare Queue Full"; - } - - if (errorValue == GattProtocolError.ReadNotPermitted) - { - return "Read Not Permitted"; - } - - if (errorValue == GattProtocolError.RequestNotSupported) - { - return "Request Not Supported"; - } - - if (errorValue == GattProtocolError.UnlikelyError) - { - return "UnlikelyError"; - } - - if (errorValue == GattProtocolError.UnsupportedGroupType) - { - return "Unsupported Group Type"; - } - - if (errorValue == GattProtocolError.WriteNotPermitted) - { - return "Write Not Permitted"; - } - - return errorString; } -} - +} \ No newline at end of file From c40b9fbd1be12781002856b54db1d5b202e63bb1 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sat, 28 Oct 2023 14:54:09 +0200 Subject: [PATCH 412/527] Formatted GattResultExtensions.cs --- .../Windows/Extensions/GattResultExtensions.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs b/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs index 9f8112c3..2d27d34b 100644 --- a/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs +++ b/Source/Plugin.BLE/Windows/Extensions/GattResultExtensions.cs @@ -9,20 +9,19 @@ namespace Plugin.BLE.Extensions { internal static class GattResultExtensions { - public static void ThrowIfError(this GattWriteResult result, [CallerMemberName]string tag = null) + public static void ThrowIfError(this GattWriteResult result, [CallerMemberName] string tag = null) => result.Status.ThrowIfError(tag, result.ProtocolError); - public static void ThrowIfError(this GattCharacteristicsResult result, [CallerMemberName]string tag = null) + public static void ThrowIfError(this GattCharacteristicsResult result, [CallerMemberName] string tag = null) => result.Status.ThrowIfError(tag, result.ProtocolError); - public static void ThrowIfError(this GattDescriptorsResult result, [CallerMemberName]string tag = null) + public static void ThrowIfError(this GattDescriptorsResult result, [CallerMemberName] string tag = null) => result.Status.ThrowIfError(tag, result.ProtocolError); - public static void ThrowIfError(this GattDeviceServicesResult result, [CallerMemberName]string tag = null) + public static void ThrowIfError(this GattDeviceServicesResult result, [CallerMemberName] string tag = null) => result.Status.ThrowIfError(tag, result.ProtocolError); - - public static byte[] GetValueOrThrowIfError(this GattReadResult result, [CallerMemberName]string tag = null) + public static byte[] GetValueOrThrowIfError(this GattReadResult result, [CallerMemberName] string tag = null) { var errorMessage = result.Status.GetErrorMessage(tag, result.ProtocolError); if (!string.IsNullOrEmpty(errorMessage)) @@ -33,7 +32,7 @@ public static byte[] GetValueOrThrowIfError(this GattReadResult result, [CallerM return result.Value?.ToArray() ?? new byte[0]; } - public static void ThrowIfError(this GattCommunicationStatus status, [CallerMemberName]string tag = null, byte? protocolError = null) + public static void ThrowIfError(this GattCommunicationStatus status, [CallerMemberName] string tag = null, byte? protocolError = null) { var errorMessage = status.GetErrorMessage(tag, protocolError); if (!string.IsNullOrEmpty(errorMessage)) @@ -43,7 +42,7 @@ public static void ThrowIfError(this GattCommunicationStatus status, [CallerMemb } private static string GetErrorMessage(this GattCommunicationStatus status, string tag, byte? protocolError) - { + { switch (status) { //output trace message with status of update From ca458e5a293ed5c815027e26e64db38fe6d9a0fc Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sat, 28 Oct 2023 17:59:02 +0200 Subject: [PATCH 413/527] namespace Plugin.BLE.Windows --- Source/Plugin.BLE/Windows/Adapter.cs | 5 +---- Source/Plugin.BLE/Windows/BleImplementation.cs | 2 +- Source/Plugin.BLE/Windows/Characteristic.cs | 2 +- Source/Plugin.BLE/Windows/Descriptor.cs | 2 +- Source/Plugin.BLE/Windows/Device.cs | 8 ++++---- Source/Plugin.BLE/Windows/Service.cs | 2 +- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 0e63b4de..650be2c7 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using System.Threading; @@ -11,10 +10,8 @@ using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; using System.Collections.Concurrent; -using Windows.Devices.Bluetooth.GenericAttributeProfile; -using Windows.Devices.Enumeration; -namespace Plugin.BLE.UWP +namespace Plugin.BLE.Windows { public class Adapter : AdapterBase { diff --git a/Source/Plugin.BLE/Windows/BleImplementation.cs b/Source/Plugin.BLE/Windows/BleImplementation.cs index f9883045..32deeb73 100644 --- a/Source/Plugin.BLE/Windows/BleImplementation.cs +++ b/Source/Plugin.BLE/Windows/BleImplementation.cs @@ -1,7 +1,7 @@ using Windows.Devices.Bluetooth; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; -using Plugin.BLE.UWP; +using Plugin.BLE.Windows; using System; using System.Threading.Tasks; using Windows.Devices.Radios; diff --git a/Source/Plugin.BLE/Windows/Characteristic.cs b/Source/Plugin.BLE/Windows/Characteristic.cs index acac08bf..07c899bb 100644 --- a/Source/Plugin.BLE/Windows/Characteristic.cs +++ b/Source/Plugin.BLE/Windows/Characteristic.cs @@ -11,7 +11,7 @@ using Plugin.BLE.Abstractions.EventArgs; using Plugin.BLE.Extensions; -namespace Plugin.BLE.UWP +namespace Plugin.BLE.Windows { public class Characteristic : CharacteristicBase { diff --git a/Source/Plugin.BLE/Windows/Descriptor.cs b/Source/Plugin.BLE/Windows/Descriptor.cs index d4220825..f42114d0 100644 --- a/Source/Plugin.BLE/Windows/Descriptor.cs +++ b/Source/Plugin.BLE/Windows/Descriptor.cs @@ -6,7 +6,7 @@ using Windows.Security.Cryptography; using Plugin.BLE.Extensions; -namespace Plugin.BLE.UWP +namespace Plugin.BLE.Windows { public class Descriptor : DescriptorBase { diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index e11dbe8c..ec7b3b52 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -9,7 +9,7 @@ using System.Threading; using System.Collections.Concurrent; -namespace Plugin.BLE.UWP +namespace Plugin.BLE.Windows { public class Device : DeviceBase { @@ -39,7 +39,7 @@ public override Task UpdateRssiAsync() //No current method to update the Rssi of a device //In future implementations, maybe listen for device's advertisements - Trace.Message("Request RSSI not supported in UWP"); + Trace.Message("Request RSSI not supported in Windows"); return Task.FromResult(true); } @@ -100,13 +100,13 @@ protected override DeviceState GetState() protected override async Task RequestMtuNativeAsync(int requestValue) { var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); - using var gattSession = await Windows.Devices.Bluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); + using var gattSession = await global::Windows.Devices.Bluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); return gattSession.MaxPduSize; } protected override bool UpdateConnectionIntervalNative(ConnectionInterval interval) { - Trace.Message("Update Connection Interval not supported in UWP"); + Trace.Message("Update Connection Interval not supported in Windows"); return false; } diff --git a/Source/Plugin.BLE/Windows/Service.cs b/Source/Plugin.BLE/Windows/Service.cs index c85e0d9b..ec8ce0c2 100644 --- a/Source/Plugin.BLE/Windows/Service.cs +++ b/Source/Plugin.BLE/Windows/Service.cs @@ -7,7 +7,7 @@ using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; -namespace Plugin.BLE.UWP +namespace Plugin.BLE.Windows { public class Service : ServiceBase { From 46383d2f68bb93d97ab3a2d4261ae873b8b85bcc Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sat, 28 Oct 2023 18:05:25 +0200 Subject: [PATCH 414/527] using WBluetooth = global::Windows.Devices.Bluetooth --- Source/Plugin.BLE/Windows/Device.cs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index ec7b3b52..deca8605 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -8,18 +8,19 @@ using Plugin.BLE.Extensions; using System.Threading; using System.Collections.Concurrent; +using WBluetooth = global::Windows.Devices.Bluetooth; namespace Plugin.BLE.Windows { public class Device : DeviceBase - { + { private ConcurrentBag asyncOperations = new(); private readonly Mutex opMutex = new Mutex(false); private readonly SemaphoreSlim opSemaphore = new SemaphoreSlim(1); public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id, - IReadOnlyList advertisementRecords = null, bool isConnectable = true) - : base(adapter, nativeDevice) + IReadOnlyList advertisementRecords = null, bool isConnectable = true) + : base(adapter, nativeDevice) { Rssi = rssi; Id = id; @@ -39,7 +40,7 @@ public override Task UpdateRssiAsync() //No current method to update the Rssi of a device //In future implementations, maybe listen for device's advertisements - Trace.Message("Request RSSI not supported in Windows"); + Trace.Message("Request RSSI not supported in Windows"); return Task.FromResult(true); } @@ -47,7 +48,7 @@ public override Task UpdateRssiAsync() public void DisposeNativeDevice() { if (NativeDevice is not null) - { + { NativeDevice.Dispose(); NativeDevice = null; } @@ -93,14 +94,14 @@ protected override DeviceState GetState() if (NativeDevice.ConnectionStatus == BluetoothConnectionStatus.Connected) { return DeviceState.Connected; - } + } return NativeDevice.WasSecureConnectionUsedForPairing ? DeviceState.Limited : DeviceState.Disconnected; } protected override async Task RequestMtuNativeAsync(int requestValue) { var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); - using var gattSession = await global::Windows.Devices.Bluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); + using var gattSession = await WBluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); return gattSession.MaxPduSize; } @@ -108,22 +109,22 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv { Trace.Message("Update Connection Interval not supported in Windows"); return false; - } + } public override void Dispose() - { + { if (NativeDevice != null) { - Trace.Message("Disposing {0} with name = {1}", Id.ToHexBleAddress(), Name); + Trace.Message("Disposing {0} with name = {1}", Id.ToHexBleAddress(), Name); NativeDevice.Dispose(); - NativeDevice = null; + NativeDevice = null; } } public override bool IsConnectable { get; protected set; } public override bool SupportsIsConnectable { get => true; } - + protected override DeviceBondState GetBondState() { return DeviceBondState.NotSupported; From 0d4bd0e36e99f57b10ac572d4a79aac1f9c74a11 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 30 Oct 2023 05:50:28 +0100 Subject: [PATCH 415/527] Implemented GetSystemConnectedOrPairedDevices --- Source/Plugin.BLE/Windows/Adapter.cs | 64 +++++++++++++++++++--------- 1 file changed, 45 insertions(+), 19 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 650be2c7..1358c96f 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -10,18 +10,19 @@ using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; using System.Collections.Concurrent; +using Windows.Devices.Enumeration; namespace Plugin.BLE.Windows { public class Adapter : AdapterBase - { + { private BluetoothLEAdvertisementWatcher _bleWatcher; /// /// Registry used to store device instances for pending operations : disconnect /// Helps to detect connection lost events. /// - private readonly IDictionary _deviceOperationRegistry = new ConcurrentDictionary(); + private readonly IDictionary _deviceOperationRegistry = new ConcurrentDictionary(); public Adapter() { @@ -61,7 +62,7 @@ protected override void StopScanNative() if (_bleWatcher != null) { Trace.Message("Stopping the scan for devices"); - _bleWatcher.Stop(); + _bleWatcher.Stop(); _bleWatcher = null; } } @@ -83,7 +84,7 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect // Calling the GetGattServicesAsync on the BluetoothLEDevice with uncached property causes the device to connect BluetoothCacheMode restoremode = BleImplementation.CacheModeGetServices; - BleImplementation.CacheModeGetServices = BluetoothCacheMode.Uncached; + BleImplementation.CacheModeGetServices = BluetoothCacheMode.Uncached; var services = device.GetServicesAsync(cancellationToken).Result; BleImplementation.CacheModeGetServices = restoremode; @@ -111,25 +112,25 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect else { _deviceOperationRegistry[device.Id.ToString()] = device; - } + } } private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, object args) - { + { Trace.Message("Device_ConnectionStatusChanged {0} {1} {2}", nativeDevice.BluetoothAddress.ToHexBleAddress(), nativeDevice.Name, nativeDevice.ConnectionStatus); - var id = nativeDevice.BluetoothAddress.ParseDeviceId().ToString(); + var id = nativeDevice.BluetoothAddress.ParseDeviceId().ToString(); - if (nativeDevice.ConnectionStatus == BluetoothConnectionStatus.Connected + if (nativeDevice.ConnectionStatus == BluetoothConnectionStatus.Connected && ConnectedDeviceRegistry.TryGetValue(id, out var connectedDevice)) { HandleConnectedDevice(connectedDevice); return; } - if (nativeDevice.ConnectionStatus == BluetoothConnectionStatus.Disconnected + if (nativeDevice.ConnectionStatus == BluetoothConnectionStatus.Disconnected && ConnectedDeviceRegistry.TryRemove(id, out var disconnectedDevice)) { bool isNormalDisconnect = !_deviceOperationRegistry.Remove(disconnectedDevice.Id.ToString()); @@ -146,7 +147,7 @@ private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, obje { nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; } - } + } } protected override void DisconnectDeviceNative(IDevice device) @@ -154,16 +155,16 @@ protected override void DisconnectDeviceNative(IDevice device) // Windows doesn't support disconnecting, so currently just dispose of the device Trace.Message($"DisconnectDeviceNative from device with ID: {device.Id.ToHexBleAddress()}"); if (device.NativeDevice is BluetoothLEDevice nativeDevice) - { + { _deviceOperationRegistry.Remove(device.Id.ToString()); ((Device)device).ClearServices(); - ((Device)device).DisposeNativeDevice(); - } + ((Device)device).DisposeNativeDevice(); + } } public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) - { - var bleAddress = deviceGuid.ToBleAddress(); + { + var bleAddress = deviceGuid.ToBleAddress(); var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bleAddress); if (nativeDevice == null) throw new Abstractions.Exceptions.DeviceConnectionException(deviceGuid, "", $"[Adapter] Device {deviceGuid} not found."); @@ -176,10 +177,35 @@ public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceG public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null) { - //currently no way to retrieve paired and connected devices on windows without using an - //async method. - Trace.Message("Returning devices connected by this app only"); - return ConnectedDevices; + string pairedSelector = BluetoothDevice.GetDeviceSelectorFromPairingState(true); + DeviceInformationCollection pairedDevices = DeviceInformation.FindAllAsync(pairedSelector).GetAwaiter().GetResult(); + List devlist = ConnectedDevices.ToList(); + List ids = ConnectedDevices.Select(d => d.Id).ToList(); + foreach (var dev in pairedDevices) + { + Guid id = dev.Id.ToBleDeviceGuidFromId(); + ulong bleaddress = id.ToBleAddress(); + if (!ids.Contains(id)) + { + var bluetoothLeDevice = BluetoothLEDevice.FromBluetoothAddressAsync(bleaddress).AsTask().Result; + if (bluetoothLeDevice != null) + { + var device = new Device( + this, + bluetoothLeDevice, + 0, id); + devlist.Add(device); + ids.Add(id); + Trace.Message("GetSystemConnectedOrPairedDevices: {0}: {1}", dev.Id, dev.Name); + } + else + { + Trace.Message("GetSystemConnectedOrPairedDevices: {0}: {1}, BluetoothLEDevice == null", dev.Id, dev.Name); + } + + } + } + return devlist; } protected override IReadOnlyList GetBondedDevices() From baaf4bcfdd799f1d53c1a826ea2be86c314d4d6b Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 3 Nov 2023 22:12:44 +0100 Subject: [PATCH 416/527] remove the net6.0 targets for android, ios and maccatalyst * this gets rid of the following warnings: warning NETSDK1202: The workload 'android' is out of support and will not receive security updates in the future. Please refer to https://aka.ms/maui-support-policy for more information about the support policy. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\Plugin.BLE\Plugin.BLE.csproj::TargetFramework=net6.0-android33.0] warning NETSDK1202: The workload 'ios' is out of support and will not receive security updates in the future. Please refer to https://aka.ms/maui-support-policy for more information about the support policy. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\Plugin.BLE\Plugin.BLE.csproj::TargetFramework=net6.0-ios] warning NETSDK1202: The workload 'maccatalyst' is out of support and will not receive security updates in the future. Please refer to https://aka.ms/maui-support-policy for more information about the support policy. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\Plugin.BLE\Plugin.BLE.csproj::TargetFramework=net6.0-maccatalyst] * .NET MAUI 6 is out of support since May 8, 2023, see: https://dotnet.microsoft.com/en-us/platform/support/policy/maui --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index ab3afe17..461ec956 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -1,6 +1,6 @@  - net6.0-android33.0;net6.0-ios;net6.0-maccatalyst;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst + net7.0-android33.0;net7.0-ios;net7.0-maccatalyst $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 46b0533a..1667d998 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -1,6 +1,6 @@  - netstandard2.0;net6.0-android33.0;net6.0-ios;net6.0-maccatalyst;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst + netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 Plugin.BLE Plugin.BLE @@ -75,11 +75,11 @@ - + - + From 091142fdb84cd6ebf159ef0f5ef83347748b22e4 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 4 Nov 2023 23:13:06 +0100 Subject: [PATCH 417/527] remove the net6.0 target for windows * in principle .NET 6 is still supported for another year: https://dotnet.microsoft.com/en-us/platform/support/policy * but since the other .NET (MAUI) targets are out of support, there is not much reason to keep this one --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 461ec956..c05effb1 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -1,7 +1,7 @@  net7.0-android33.0;net7.0-ios;net7.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE 3.0.0 diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 1667d998..f089e81b 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -1,7 +1,7 @@  netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041 Plugin.BLE Plugin.BLE 3.0.0 From c90dcd2a378c3579786dc6993a3ae334ea22c526 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 5 Nov 2023 10:17:44 +0100 Subject: [PATCH 418/527] replace references to 'UWP' by 'Windows' * where applicable * the library does not only support UWP, but Windows in general by now --- README.md | 2 +- .../MvvmCross.Plugins.BLE.csproj | 6 +++--- Source/Plugin.BLE/Plugin.BLE.csproj | 7 +++---- Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs | 2 +- doc/characteristics.md | 12 ++++++------ doc/scanmode_mapping.md | 4 ++-- 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 588a0f8e..497aea84 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Build status: [![Build status](https://github.com/dotnet-bluetooth-le/dotnet-blu | Xamarin.iOS | 7.0 | | | Xamarin.Mac | 10.9 (Mavericks) | >= 2.1.0 | | Xamarin.UWP | 1709 - 10.0.16299 | >= 2.2.0 | -| MAUI (all 4 OS) | | >= 3.0.0 | +| MAUI (Android, iOS, Mac, WinUI) | | >= 3.0.0 | ## Nuget Packages diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index c05effb1..9132ae0a 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -14,13 +14,13 @@ Apache-2.0 Adrian Seceleanu, Sven-Michael Stübe, Janus Weil https://github.com/dotnet-bluetooth-le/dotnet-bluetooth-le/ - MVVMCross Plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS, and UWP. + MVVMCross Plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS, and Windows. - xamarin, maui, pcl, xam.pcl, uwp, bluetooth, ble, .net maui, xamarin.forms, ios + xamarin, maui, pcl, xam.pcl, bluetooth, ble, .net maui, xamarin.forms, android, ios MVVMCross Bluetooth Low Energy (BLE) Plugin for .NET MAUI and Xamarin - MVVMCross Plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS, and UWP. + MVVMCross Plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS, and Windows. Read the full documentation on the projects page. Apache-2.0 diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index f089e81b..63235fc3 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -14,14 +14,13 @@ Apache-2.0 Adrian Seceleanu, Sven-Michael Stübe, Janus Weil https://github.com/dotnet-bluetooth-le/dotnet-bluetooth-le/ - Plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS, and UWP. + Plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS, and Windows. - xamarin, maui, pcl, xam.pcl, uwp, bluetooth, ble, .net maui, xamarin.forms, ios + xamarin, maui, pcl, xam.pcl, bluetooth, ble, .net maui, xamarin.forms, android, ios Bluetooth Low Energy (BLE) Plugin for .NET MAUI and Xamarin - Xamarin and MAUI plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS, and UWP. - Read the full documentation on the projects page. + Xamarin and MAUI plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS, and Windows. Apache-2.0 https://github.com/dotnet-bluetooth-le/dotnet-bluetooth-le/ diff --git a/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs b/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs index 065f1757..e2e7b976 100644 --- a/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs +++ b/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs @@ -18,7 +18,7 @@ public static class TaskBuilder /// Platform specific main thread invocation. Useful to avoid GATT 133 errors on Android. /// Set this to NULL in order to disable main thread queued invocations. /// Android: already implemented and set by default - /// UWP, iOS, macOS: NULL by default - not needed, turning this on is redundant as it's already handled internaly by the platform + /// Windows, iOS, macOS: NULL by default - not needed, turning this on is redundant as it's already handled internaly by the platform /// public static Action MainThreadInvoker { get; set; } diff --git a/doc/characteristics.md b/doc/characteristics.md index a420b28f..3630c463 100644 --- a/doc/characteristics.md +++ b/doc/characteristics.md @@ -7,7 +7,7 @@ Plugin iOS Android - UWP + Windows 0 @@ -66,10 +66,10 @@ -Specification: [Core 4.2 Vol.3 3.3.1.1](https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=286439) -UWP: [GattCharacteristicProperties](https://msdn.microsoft.com/en-in/library/windows/apps/windows.devices.bluetooth.genericattributeprofile.gattcharacteristicproperties) -Android: [GattProperty](https://developer.xamarin.com/api/type/Android.Bluetooth.GattProperty/) -iOS: [CBCharacteristicProperties](https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCharacteristic_Class/#//apple_ref/c/tdef/CBCharacteristicProperties) +- Specification: [Core 4.2 Vol.3 3.3.1.1](https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=286439) +- Windows: [GattCharacteristicProperties](https://msdn.microsoft.com/en-in/library/windows/apps/windows.devices.bluetooth.genericattributeprofile.gattcharacteristicproperties) +- Android: [GattProperty](https://developer.xamarin.com/api/type/Android.Bluetooth.GattProperty/) +- iOS: [CBCharacteristicProperties](https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCharacteristic_Class/#//apple_ref/c/tdef/CBCharacteristicProperties) From 1 to 128 all platforms are using the values from the specification. -iOS and UWP are using the values 256, and 512. On UWP they are mapped to extended properties (Core 4.2 §3.3.3.1). iOS is using it for non standard (4.2) values. +iOS and Windows are using the values 256, and 512. On Windows they are mapped to extended properties (Core 4.2 §3.3.3.1). iOS is using it for non standard (4.2) values. diff --git a/doc/scanmode_mapping.md b/doc/scanmode_mapping.md index 2d1dfa89..1017277b 100644 --- a/doc/scanmode_mapping.md +++ b/doc/scanmode_mapping.md @@ -5,7 +5,7 @@ Value iOS/macOS Android - UWP + Windows Passive @@ -33,4 +33,4 @@ - iOS: Not supported. [Passive Mode will be used automatically in background mode](https://lists.apple.com/archives/bluetooth-dev/2012/May/msg00041.html) (caution: very old information!)) - Android: [ScanSettings](https://developer.android.com/reference/android/bluetooth/le/ScanSettings.html). Falls back to system default for all scan modes, if Android < Lollipop. -- UWP: [BluetoothLEScanningMode](https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.advertisement.bluetoothlescanningmode) +- Windows: [BluetoothLEScanningMode](https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.advertisement.bluetoothlescanningmode) From 62b9c111e3428b429d37fbaaa7a20063c5e66dea Mon Sep 17 00:00:00 2001 From: Jan Marek Date: Wed, 8 Nov 2023 16:12:09 +0100 Subject: [PATCH 419/527] Added BroadcastName to AdvertisementRecordType to parse data correctly #772 --- Source/Plugin.BLE/Shared/AdvertisementRecord.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Plugin.BLE/Shared/AdvertisementRecord.cs b/Source/Plugin.BLE/Shared/AdvertisementRecord.cs index 8245731f..83a1824d 100644 --- a/Source/Plugin.BLE/Shared/AdvertisementRecord.cs +++ b/Source/Plugin.BLE/Shared/AdvertisementRecord.cs @@ -165,6 +165,11 @@ public enum AdvertisementRecordType /// SecureConnectionsRandomValue = 0x23, + /// + /// «Broadcast Name» Public Broadcast Profile v1.0 or later + /// + BroadcastName = 0x30, + /// /// «3D Information Data» ​3D Synchronization Profile, v1.0 or later /// From 75a4bf14aea701bc373b9c42745d40ab6054e5c9 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 8 Nov 2023 21:57:18 +0100 Subject: [PATCH 420/527] disable MainThreadInvoker in Adapter.ConnectToDeviceAsync --- Source/Plugin.BLE/Shared/AdapterBase.cs | 2 +- Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index e8d33a37..d2d3ab45 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -218,7 +218,7 @@ await TaskBuilder.FromEvent, EventHandler DeviceConnectionError += handler, unsubscribeReject: handler => DeviceConnectionError -= handler, - token: cts.Token); + token: cts.Token, mainthread: false); } } diff --git a/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs b/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs index e2e7b976..43bdc8db 100644 --- a/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs +++ b/Source/Plugin.BLE/Shared/Utils/TaskBuilder.cs @@ -35,7 +35,8 @@ public static async Task FromEvent, TRejectHandler> getRejectHandler, Action subscribeReject, Action unsubscribeReject, - CancellationToken token = default) + CancellationToken token = default, + bool mainthread = true) { var tcs = new TaskCompletionSource(); void Complete(TReturn args) => tcs.TrySetResult(args); @@ -51,7 +52,7 @@ public static async Task FromEvent tcs.TrySetCanceled(), false)) { - return await SafeEnqueueAndExecute(execute, token, tcs); + return await SafeEnqueueAndExecute(execute, token, tcs, mainthread); } } finally @@ -64,13 +65,13 @@ public static async Task FromEvent /// Queues the given onto the main thread and executes it. /// - public static Task EnqueueOnMainThreadAsync(Action execute, CancellationToken token = default) - => SafeEnqueueAndExecute(execute, token); + public static Task EnqueueOnMainThreadAsync(Action execute, CancellationToken token = default, bool mainthread = true) + => SafeEnqueueAndExecute(execute, token, mainthread: mainthread); - private static async Task SafeEnqueueAndExecute(Action execute, CancellationToken token, TaskCompletionSource tcs = null) + private static async Task SafeEnqueueAndExecute(Action execute, CancellationToken token, TaskCompletionSource tcs = null, bool mainthread = true) { - if (MainThreadInvoker != null) + if (MainThreadInvoker != null && mainthread) { var shouldReleaseSemaphore = false; var shouldCompleteTask = tcs == null; From 90caa8a8e5dfcdf72b2ee4bea7efbafae8950332 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sat, 11 Nov 2023 06:51:07 +0100 Subject: [PATCH 421/527] Implemented StateChanged for Windows --- .../Plugin.BLE/Windows/BleImplementation.cs | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/Source/Plugin.BLE/Windows/BleImplementation.cs b/Source/Plugin.BLE/Windows/BleImplementation.cs index 32deeb73..793f976d 100644 --- a/Source/Plugin.BLE/Windows/BleImplementation.cs +++ b/Source/Plugin.BLE/Windows/BleImplementation.cs @@ -30,16 +30,9 @@ protected override BluetoothState GetInitialStateNative() { return BluetoothState.Unavailable; } - var radio = btAdapter.GetRadioAsync().AsTask().Result; - switch (radio.State) - { - case RadioState.On: - return BluetoothState.On; - case RadioState.Off: - return BluetoothState.Off; - default: - return BluetoothState.Unavailable; - } + var radio = btAdapter.GetRadioAsync().AsTask().Result; + radio.StateChanged += Radio_StateChanged; + return ToBluetoothState(radio.State); } catch (Exception ex) { @@ -48,6 +41,24 @@ protected override BluetoothState GetInitialStateNative() } } + private static BluetoothState ToBluetoothState(RadioState radioState) + { + switch (radioState) + { + case RadioState.On: + return BluetoothState.On; + case RadioState.Off: + return BluetoothState.Off; + default: + return BluetoothState.Unavailable; + } + } + + private void Radio_StateChanged(Radio radio, object args) + { + State = ToBluetoothState(radio.State); + } + protected override void InitializeNative() { From 024b8a9f22957c6db12d12f384de01cca7a0b9e6 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 14 Nov 2023 18:45:35 +0100 Subject: [PATCH 422/527] add net8.0 targets to Plugin.BLE and MvvmCross.Plugins.BLE --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 4 ++-- Source/Plugin.BLE/Plugin.BLE.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 9132ae0a..3b9097c5 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -1,7 +1,7 @@  - net7.0-android33.0;net7.0-ios;net7.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041 + net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android33.0;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE 3.0.0 diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 63235fc3..9d614db8 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041 + netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android33.0;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 Plugin.BLE Plugin.BLE 3.0.0 From 465d0fe153c5a34eff7bd4821c2698fa8b4eed5c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 14 Nov 2023 18:53:50 +0100 Subject: [PATCH 423/527] GHA: update .NET version to 8.0 --- .github/workflows/dotnet.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index c086a327..934218dc 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -20,7 +20,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Install .NET MAUI shell: pwsh run: | @@ -78,7 +78,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Install .NET MAUI run: | dotnet nuget locals all --clear From 1e7d5584751d7d522cc56f30767ea8f79be29fa8 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 14 Nov 2023 19:54:39 +0100 Subject: [PATCH 424/527] .NET 8: update Android target to SDK version 34 /Users/runner/.dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1181: Error getting pack version: Pack 'Microsoft.Android.Ref.33' was not present in workload manifests. [/Users/runner/work/dotnet-bluetooth-le/dotnet-bluetooth-le/Source/Plugin.BLE/Plugin.BLE.csproj::TargetFramework=net8.0-android33.0] --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 3b9097c5..62af1d05 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -1,6 +1,6 @@  - net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android33.0;net8.0-ios;net8.0-maccatalyst + net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android34.0;net8.0-ios;net8.0-maccatalyst $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 9d614db8..651351a5 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -1,6 +1,6 @@  - netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android33.0;net8.0-ios;net8.0-maccatalyst + netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android34.0;net8.0-ios;net8.0-maccatalyst $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 Plugin.BLE Plugin.BLE From 3a074aa3149b70bde53347c4689f33656121ed58 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 14 Nov 2023 20:42:31 +0100 Subject: [PATCH 425/527] try to fix build errors on Windows Error: C:\Program Files\dotnet\sdk\8.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1083: The specified RuntimeIdentifier 'win10-arm' is not recognized. See https://aka.ms/netsdk1083 for more information. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj::TargetFramework=net8.0-windows10.0.19041] Error: C:\Program Files\dotnet\sdk\8.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1083: The specified RuntimeIdentifier 'win10-arm-aot' is not recognized. See https://aka.ms/netsdk1083 for more information. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj::TargetFramework=net8.0-windows10.0.19041] Error: C:\Program Files\dotnet\sdk\8.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1083: The specified RuntimeIdentifier 'win10-arm64-aot' is not recognized. See https://aka.ms/netsdk1083 for more information. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj::TargetFramework=net8.0-windows10.0.19041] Error: C:\Program Files\dotnet\sdk\8.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1083: The specified RuntimeIdentifier 'win10-x86' is not recognized. See https://aka.ms/netsdk1083 for more information. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj::TargetFramework=net8.0-windows10.0.19041] Error: C:\Program Files\dotnet\sdk\8.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1083: The specified RuntimeIdentifier 'win10-x86-aot' is not recognized. See https://aka.ms/netsdk1083 for more information. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj::TargetFramework=net8.0-windows10.0.19041] Error: C:\Program Files\dotnet\sdk\8.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1083: The specified RuntimeIdentifier 'win10-x64' is not recognized. See https://aka.ms/netsdk1083 for more information. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj::TargetFramework=net8.0-windows10.0.19041] Error: C:\Program Files\dotnet\sdk\8.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1083: The specified RuntimeIdentifier 'win10-x64-aot' is not recognized. See https://aka.ms/netsdk1083 for more information. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj::TargetFramework=net8.0-windows10.0.19041] --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 62af1d05..4a5fd0ba 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -52,6 +52,11 @@ $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + + win10-x64;win10-x86;win10-arm64 + true + + all From 5ba225d5d55bf5b3bbeb9c02b1278c90fb079bab Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 14 Nov 2023 22:48:08 +0100 Subject: [PATCH 426/527] update Plugin.BLE.Tests to net8.0 --- Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj index e037de93..e5e7bdc4 100644 --- a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj +++ b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj @@ -1,6 +1,6 @@  - net7.0 + net8.0 false @@ -21,4 +21,4 @@ - \ No newline at end of file + From db0dbcbc78492e6c0e3ed24313f7a41e7f55a655 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 15 Nov 2023 08:49:37 +0100 Subject: [PATCH 427/527] update BLE.Client.Maui to net8.0 * targeting Android SDK level 34, because .NET 8 does not support 33 --- .../BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index a0b23afd..fb1287e6 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -1,8 +1,8 @@  - net7.0-android33.0;net7.0-ios;net7.0-maccatalyst - $(TargetFrameworks);net7.0-windows10.0.19041 + net8.0-android34.0;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);net8.0-windows10.0.19041 Exe BLE.Client.Maui true @@ -28,16 +28,13 @@ 6.5 - - false - - + false 4 - + false Mac Developer 3rd Party Mac Developer Installer From edf2f86ec7a9b9230d10a7a9d9218debe7b9ecfb Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 15 Nov 2023 18:06:22 +0100 Subject: [PATCH 428/527] GHA: use XCode 15 --- .github/workflows/dotnet.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 934218dc..b7dda90a 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -79,6 +79,10 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x + - name: Setup XCode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15' - name: Install .NET MAUI run: | dotnet nuget locals all --clear From 8619d1e15a058fc2b466760c7d9e1ca5f1d8c82c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 16 Nov 2023 08:45:41 +0100 Subject: [PATCH 429/527] Plugin.BLE.csproj: clean up some Windows-specific config * copy from MvvmCross.Plugins.BLE.csproj --- Source/Plugin.BLE/Plugin.BLE.csproj | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 651351a5..046f225e 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -43,14 +43,21 @@ 10.0.17763.0 - - true - true - $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb - - - - + + + true + + true + + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + + + + + all + runtime; build; native; contentfiles; analyzers + + true From d40f99fd1c30013e1f691db021e562f706732d89 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 17 Nov 2023 20:49:47 +0100 Subject: [PATCH 430/527] GHA: use Java 11 on Windows * the current Windows image seems to use Java 8 by default * the build failed with these errors: error XA0031: Java SDK 11.0 or above is required when using .NET 6 or higher. Download the latest JDK at: https://aka.ms/msopenjdk [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\Plugin.BLE\Plugin.BLE.csproj::TargetFramework=net7.0-android33.0] error XA0031: Java SDK 11.0 or above is required when using $(TargetFrameworkVersion) v13.0. [D:\a\dotnet-bluetooth-le\dotnet-bluetooth-le\Source\Plugin.BLE\Plugin.BLE.csproj::TargetFramework=MonoAndroid13.0] --- .github/workflows/dotnet.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index b7dda90a..11d19d78 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -21,6 +21,11 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' - name: Install .NET MAUI shell: pwsh run: | From b3fae9e137de45a63b5f61ce59bf1bc8fd690dc9 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Fri, 10 Nov 2023 22:30:14 +0100 Subject: [PATCH 431/527] Demo Number of services after reconnect is not working as expected for windows --- .../BLE.Client.WinConsole/BleDemo.cs | 66 +++++++++++++++---- .../BLE.Client.WinConsole/ConsoleTracer.cs | 17 ++++- .../BLE.Client.WinConsole/Program.cs | 13 ++-- 3 files changed, 75 insertions(+), 21 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs index 65001504..af174100 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs @@ -3,6 +3,7 @@ using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Abstractions.Extensions; using Plugin.BLE.Extensions; +using Plugin.BLE.Windows; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -16,17 +17,18 @@ namespace BLE.Client.WinConsole internal class BleDemo { private readonly IBluetoothLE bluetoothLE; - private readonly IAdapter adapter; + public IAdapter Adapter { get; } private readonly Action? writer; private readonly List discoveredDevices; private readonly IDictionary connectedDevices; + private bool scanningDone = false; public BleDemo(Action? writer = null) { discoveredDevices = new List(); connectedDevices = new ConcurrentDictionary(); bluetoothLE = CrossBluetoothLE.Current; - adapter = CrossBluetoothLE.Current.Adapter; + Adapter = CrossBluetoothLE.Current.Adapter; this.writer = writer; } @@ -37,7 +39,7 @@ private void Write(string format, params object[] args) public IDevice ConnectToKnown(Guid id) { - IDevice dev = adapter.ConnectToKnownDeviceAsync(id).Result; + IDevice dev = Adapter.ConnectToKnownDeviceAsync(id).Result; connectedDevices[id] = dev; return dev; } @@ -61,15 +63,15 @@ public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ var cancellationTokenSource = new CancellationTokenSource(time_ms); discoveredDevices.Clear(); - adapter.DeviceDiscovered += (s, a) => + Adapter.DeviceDiscovered += (s, a) => { var dev = a.Device; Write("DeviceDiscovered: {0} with Name = {1}", dev.Id.ToHexBleAddress(), dev.Name); discoveredDevices.Add(a.Device); }; - adapter.ScanMode = scanMode; - await adapter.StartScanningForDevicesAsync(cancellationToken: cancellationTokenSource.Token); - + Adapter.ScanMode = scanMode; + await Adapter.StartScanningForDevicesAsync(cancellationToken: cancellationTokenSource.Token); + scanningDone = true; } private void WriteAdvertisementRecords(IDevice device) @@ -94,22 +96,34 @@ private void WriteAdvertisementRecords(IDevice device) } } - public async Task ConnectTest(string name) + /// + /// Connect to a device with a specific name + /// Assumes that DoTheScanning has been called and that the device is advertising + /// + /// + /// + public async Task ConnectTest(string name) { + if (!scanningDone) + { + Write("ConnectTest({0}) Failed - Call the DoTheScanning() method first!"); + return null; + } Thread.Sleep(10); foreach(var device in discoveredDevices) { if (device.Name.Contains(name)) { - await adapter.ConnectToDeviceAsync(device); - WriteAdvertisementRecords(device); + await Adapter.ConnectToDeviceAsync(device); + return device; } } + return null; } public void ShowGetSystemConnectedOrPairedDevices() { - IReadOnlyList devs = adapter.GetSystemConnectedOrPairedDevices(); + IReadOnlyList devs = Adapter.GetSystemConnectedOrPairedDevices(); Write("GetSystemConnectedOrPairedDevices found {0} devices.", devs.Count); foreach(var dev in devs) { @@ -117,9 +131,37 @@ public void ShowGetSystemConnectedOrPairedDevices() } } + /// + /// This demonstrates a bug where the known services is not cleared at disconnect (2023-11-03) + /// + /// 12 hex char ble address + public async Task ShowNumberOfServices(string bleaddress) + { + Write("Connecting to device with address = {0}", bleaddress); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(bleaddress.ToBleDeviceGuid()) ?? throw new Exception("null"); + string name = dev.Name; + Write("Connected to {0} {1} {2}", name, dev.Id.ToHexBleAddress(), dev.State); + Write("Calling dev.GetServicesAsync()..."); + var services = await dev.GetServicesAsync(); + Write("Found {0} services", services.Count); + Thread.Sleep(1000); + Write("Disconnecting from {0} {1}", name, dev.Id.ToHexBleAddress()); + await Adapter.DisconnectDeviceAsync(dev); + Thread.Sleep(1000); + Write("ReConnecting to device {0} {1}...", name, dev.Id.ToHexBleAddress()); + await Adapter.ConnectToDeviceAsync(dev); + Write("Connect Done."); + Thread.Sleep(1000); + Write("Calling dev.GetServicesAsync()..."); + services = await dev.GetServicesAsync(); + Write("Found {0} services", services.Count); + await Adapter.DisconnectDeviceAsync(dev); + Thread.Sleep(1000); + } + internal Task Disconnect(IDevice dev) { - return adapter.DisconnectDeviceAsync(dev); + return Adapter.DisconnectDeviceAsync(dev); } } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs index 1e64eb2b..6d34efd0 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs @@ -47,6 +47,16 @@ public void Trace(string format, params object[] args) newEntry.Set(); } + /// + /// Get a tracer with a prefix + /// + /// + /// + public Action GetPrefixedTrace(string prefix) + { + return new Action((format, args) => Trace(prefix + " - " + format, args)); + } + void WriteWorker() { while (!disposing && newEntry.WaitOne()) @@ -57,7 +67,7 @@ void WriteWorker() Console.WriteLine(entry.Time.ToString("HH:mm:ss.fff ") + entry.Format + " ", entry.Args); } } - Console.WriteLine("Bye bye says the Console Tracer."); + Console.WriteLine("Console Tracer is Finished."); } private DateTime GetTime() @@ -67,8 +77,9 @@ private DateTime GetTime() public void Dispose() { - disposing = true; - worker.Wait(1000); + disposing = true; + newEntry.Set(); + worker.Wait(100); } } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index 04843ceb..48e20cbd 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -1,13 +1,14 @@ using BLE.Client.WinConsole; using Plugin.BLE; using Plugin.BLE.Abstractions.Contracts; +using System; Console.WriteLine("Hello, BLE World!"); -var ct = new ConsoleTracer(); -Plugin.BLE.Abstractions.Trace.TraceImplementation = ct.Trace; -var demo = new BleDemo(ct.Trace); -await demo.DoTheScanning(ScanMode.LowPower); -await demo.ConnectTest("Shure"); -ct.Dispose(); +using (var ct = new ConsoleTracer()) +{ + Plugin.BLE.Abstractions.Trace.TraceImplementation = ct.GetPrefixedTrace("Plugin.BLE"); + var demo = new BleDemo(ct.GetPrefixedTrace(" DEMO")); + await demo.ShowNumberOfServices("40CBC0DD37E2"); +} From 71d4ede3dc2cd2f5bbb1b461e254af7bb7c3bd93 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Fri, 10 Nov 2023 22:35:11 +0100 Subject: [PATCH 432/527] Fixed ConnectToDeviceNativeAsync --- Source/Plugin.BLE/Windows/Adapter.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 1358c96f..6cd0e353 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -11,6 +11,7 @@ using Plugin.BLE.Extensions; using System.Collections.Concurrent; using Windows.Devices.Enumeration; +using WBluetooth = global::Windows.Devices.Bluetooth; namespace Plugin.BLE.Windows { @@ -83,12 +84,9 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; // Calling the GetGattServicesAsync on the BluetoothLEDevice with uncached property causes the device to connect - BluetoothCacheMode restoremode = BleImplementation.CacheModeGetServices; - BleImplementation.CacheModeGetServices = BluetoothCacheMode.Uncached; - var services = device.GetServicesAsync(cancellationToken).Result; - BleImplementation.CacheModeGetServices = restoremode; - - if (!services.Any() || nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) + var servicesResult = await dev.NativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); + if (servicesResult.Status != WBluetooth.GenericAttributeProfile.GattCommunicationStatus.Success + || nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) { // use DisconnectDeviceNative to clean up resources otherwise windows won't disconnect the device // after a subsequent successful connection (#528, #536, #423) From 1109c8c065d8f26780af123476f3ec85d1fed301 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sun, 12 Nov 2023 19:43:12 +0100 Subject: [PATCH 433/527] Comment added in ConnectToDeviceNativeAsync for Windows --- Source/Plugin.BLE/Windows/Adapter.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 6cd0e353..23a5720b 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -84,6 +84,10 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; // Calling the GetGattServicesAsync on the BluetoothLEDevice with uncached property causes the device to connect + // ref https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothledevice.frombluetoothaddressasync + // Creating a BluetoothLEDevice object by calling this method alone doesn't (necessarily) initiate a connection. + // To initiate a connection, set GattSession.MaintainConnection to true, or call an uncached service discovery + // method on BluetoothLEDevice, or perform a read/write operation against the device. var servicesResult = await dev.NativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); if (servicesResult.Status != WBluetooth.GenericAttributeProfile.GattCommunicationStatus.Success || nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) From bf0bc38cb74a2d6280046a87dab2cfdfa516e5e8 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sun, 12 Nov 2023 21:02:27 +0100 Subject: [PATCH 434/527] Improved comments in ConnectToDeviceNativeAsync for Windows --- Source/Plugin.BLE/Windows/Adapter.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 23a5720b..93fda586 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -84,11 +84,21 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; // Calling the GetGattServicesAsync on the BluetoothLEDevice with uncached property causes the device to connect + // // ref https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothledevice.frombluetoothaddressasync // Creating a BluetoothLEDevice object by calling this method alone doesn't (necessarily) initiate a connection. // To initiate a connection, set GattSession.MaintainConnection to true, or call an uncached service discovery // method on BluetoothLEDevice, or perform a read/write operation against the device. + // + // Remark from Ask Bojesen 2023-11-12: + // Below three lines reflect the different approach with GattSession, but I could not get this working properly + // + // var deviceId = BluetoothDeviceId.FromId(dev.NativeDevice.DeviceId); + // var genericProfileGattSession = await GattSession.FromDeviceIdAsync(deviceId); + // bool success = genericProfileGattSession.MaintainConnection = true; + var servicesResult = await dev.NativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); + if (servicesResult.Status != WBluetooth.GenericAttributeProfile.GattCommunicationStatus.Success || nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) { From 6a802be72b6084e4526309498be45cf5abf04881 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 14 Nov 2023 13:55:12 +0100 Subject: [PATCH 435/527] Using GattSession.FromDeviceIdAsync to connect --- Source/Plugin.BLE/Windows/Adapter.cs | 12 ++--- Source/Plugin.BLE/Windows/Device.cs | 73 ++++++++++++++++++++++++++-- 2 files changed, 74 insertions(+), 11 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 93fda586..de81ef9e 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -97,10 +97,11 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect // var genericProfileGattSession = await GattSession.FromDeviceIdAsync(deviceId); // bool success = genericProfileGattSession.MaintainConnection = true; - var servicesResult = await dev.NativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); + //var servicesResult = await dev.NativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); + //bool success = servicesResult.Status == WBluetooth.GenericAttributeProfile.GattCommunicationStatus.Success; + bool success = await dev.ConnectInternal(connectParameters, cancellationToken); - if (servicesResult.Status != WBluetooth.GenericAttributeProfile.GattCommunicationStatus.Success - || nativeDevice.ConnectionStatus != BluetoothConnectionStatus.Connected) + if (!success) { // use DisconnectDeviceNative to clean up resources otherwise windows won't disconnect the device // after a subsequent successful connection (#528, #536, #423) @@ -165,12 +166,11 @@ private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, obje protected override void DisconnectDeviceNative(IDevice device) { // Windows doesn't support disconnecting, so currently just dispose of the device - Trace.Message($"DisconnectDeviceNative from device with ID: {device.Id.ToHexBleAddress()}"); + Trace.Message($"DisconnectDeviceNative from device with ID: {device.Id.ToHexBleAddress()}"); if (device.NativeDevice is BluetoothLEDevice nativeDevice) { _deviceOperationRegistry.Remove(device.Id.ToString()); - ((Device)device).ClearServices(); - ((Device)device).DisposeNativeDevice(); + ((Device)device).DisconnectInternal(); } } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index deca8605..8231114c 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -9,6 +9,8 @@ using System.Threading; using System.Collections.Concurrent; using WBluetooth = global::Windows.Devices.Bluetooth; +using static System.Net.Mime.MediaTypeNames; +using Windows.Devices.Bluetooth.GenericAttributeProfile; namespace Plugin.BLE.Windows { @@ -17,6 +19,9 @@ public class Device : DeviceBase private ConcurrentBag asyncOperations = new(); private readonly Mutex opMutex = new Mutex(false); private readonly SemaphoreSlim opSemaphore = new SemaphoreSlim(1); + private ConnectParameters connectParameters; + private GattSession gattSession = null; + private bool isDisposed = false; public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id, IReadOnlyList advertisementRecords = null, bool isConnectable = true) @@ -101,7 +106,7 @@ protected override DeviceState GetState() protected override async Task RequestMtuNativeAsync(int requestValue) { var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); - using var gattSession = await WBluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); + using var gattSession = await WBluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); return gattSession.MaxPduSize; } @@ -111,14 +116,72 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv return false; } + public async Task ConnectInternal(ConnectParameters connectParameters, CancellationToken cancellationToken) + { + this.connectParameters = connectParameters; + if (NativeDevice is null) + { + Trace.Message("ConnectInternal says: Cannot connect since NativeDevice is null"); + return false; + } + try + { + var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); + gattSession = await WBluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); + gattSession.SessionStatusChanged += GattSession_SessionStatusChanged; + gattSession.MaintainConnection = true; + } catch (Exception ex) + { + Trace.Message("WARNING ConnectInternal failed: {0}", ex.Message); + DisposeGattSession(); + return false; + } + bool success = gattSession != null; + return success; + } + + private void DisposeGattSession() + { + if (gattSession != null) + { + gattSession.MaintainConnection = false; + gattSession.SessionStatusChanged -= GattSession_SessionStatusChanged; + gattSession.Dispose(); + gattSession = null; + } + } + + private void GattSession_SessionStatusChanged(GattSession sender, GattSessionStatusChangedEventArgs args) + { + Trace.Message("GattSession_SessionStatusChanged: " + args.Status); + } + + public void DisconnectInternal() + { + DisposeGattSession(); + ClearServices(); + DisposeNativeDevice(); + } + public override void Dispose() { - if (NativeDevice != null) + if (isDisposed) { - Trace.Message("Disposing {0} with name = {1}", Id.ToHexBleAddress(), Name); - NativeDevice.Dispose(); - NativeDevice = null; + return; + } + isDisposed = true; + try + { + DisposeGattSession(); + ClearServices(); + DisposeNativeDevice(); } + catch { } + } + + ~Device() + { + DisposeGattSession(); } public override bool IsConnectable { get; protected set; } From 44db17a6444ce0aed5ab2e038c201bec516db9ff Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 14 Nov 2023 14:01:05 +0100 Subject: [PATCH 436/527] To initiate a connection, set GattSession.MaintainConnection to true --- Source/Plugin.BLE/Windows/Adapter.cs | 17 ----------------- Source/Plugin.BLE/Windows/Device.cs | 8 ++++++-- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index de81ef9e..47577584 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -11,7 +11,6 @@ using Plugin.BLE.Extensions; using System.Collections.Concurrent; using Windows.Devices.Enumeration; -using WBluetooth = global::Windows.Devices.Bluetooth; namespace Plugin.BLE.Windows { @@ -83,22 +82,6 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; - // Calling the GetGattServicesAsync on the BluetoothLEDevice with uncached property causes the device to connect - // - // ref https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothledevice.frombluetoothaddressasync - // Creating a BluetoothLEDevice object by calling this method alone doesn't (necessarily) initiate a connection. - // To initiate a connection, set GattSession.MaintainConnection to true, or call an uncached service discovery - // method on BluetoothLEDevice, or perform a read/write operation against the device. - // - // Remark from Ask Bojesen 2023-11-12: - // Below three lines reflect the different approach with GattSession, but I could not get this working properly - // - // var deviceId = BluetoothDeviceId.FromId(dev.NativeDevice.DeviceId); - // var genericProfileGattSession = await GattSession.FromDeviceIdAsync(deviceId); - // bool success = genericProfileGattSession.MaintainConnection = true; - - //var servicesResult = await dev.NativeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); - //bool success = servicesResult.Status == WBluetooth.GenericAttributeProfile.GattCommunicationStatus.Success; bool success = await dev.ConnectInternal(connectParameters, cancellationToken); if (!success) diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 8231114c..db5614fd 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -117,7 +117,11 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv } public async Task ConnectInternal(ConnectParameters connectParameters, CancellationToken cancellationToken) - { + { + // ref https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothledevice.frombluetoothaddressasync + // Creating a BluetoothLEDevice object by calling this method alone doesn't (necessarily) initiate a connection. + // To initiate a connection, set GattSession.MaintainConnection to true, or call an uncached service discovery + // method on BluetoothLEDevice, or perform a read/write operation against the device. this.connectParameters = connectParameters; if (NativeDevice is null) { @@ -127,7 +131,7 @@ public async Task ConnectInternal(ConnectParameters connectParameters, Can try { var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); - gattSession = await WBluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); + gattSession = await GattSession.FromDeviceIdAsync(devId); gattSession.SessionStatusChanged += GattSession_SessionStatusChanged; gattSession.MaintainConnection = true; } catch (Exception ex) From 1b4cfebba2ba5adbce6c1f78091af197c58e2e5b Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 14 Nov 2023 14:13:09 +0100 Subject: [PATCH 437/527] Writing gattSession.MaxPduSize in log. --- Source/Plugin.BLE/Windows/Device.cs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index db5614fd..60a6ce72 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -105,8 +105,13 @@ protected override DeviceState GetState() protected override async Task RequestMtuNativeAsync(int requestValue) { - var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); - using var gattSession = await WBluetooth.GenericAttributeProfile.GattSession.FromDeviceIdAsync(devId); + // Ref https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.genericattributeprofile.gattsession.maxpdusize + // There are no means in windows to request a change, but we can read the current value + if (gattSession is null) + { + Trace.Message("WARNING RequestMtuNativeAsync failed since gattSession is null"); + return -1; + } return gattSession.MaxPduSize; } @@ -131,10 +136,12 @@ public async Task ConnectInternal(ConnectParameters connectParameters, Can try { var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); - gattSession = await GattSession.FromDeviceIdAsync(devId); + gattSession = await GattSession.FromDeviceIdAsync(devId); gattSession.SessionStatusChanged += GattSession_SessionStatusChanged; + gattSession.MaxPduSizeChanged += GattSession_MaxPduSizeChanged; gattSession.MaintainConnection = true; - } catch (Exception ex) + } + catch (Exception ex) { Trace.Message("WARNING ConnectInternal failed: {0}", ex.Message); DisposeGattSession(); @@ -160,6 +167,11 @@ private void GattSession_SessionStatusChanged(GattSession sender, GattSessionSta Trace.Message("GattSession_SessionStatusChanged: " + args.Status); } + private void GattSession_MaxPduSizeChanged(GattSession sender, object args) + { + Trace.Message("GattSession_MaxPduSizeChanged: {0}", sender.MaxPduSize); + } + public void DisconnectInternal() { DisposeGattSession(); @@ -183,9 +195,9 @@ public override void Dispose() catch { } } - ~Device() - { - DisposeGattSession(); + ~Device() + { + DisposeGattSession(); } public override bool IsConnectable { get; protected set; } From 45e06c159afd8becafc616c1d8f3856ac8dafe2c Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Fri, 17 Nov 2023 11:57:34 +0100 Subject: [PATCH 438/527] Formatted document --- Source/Plugin.BLE/Windows/Adapter.cs | 4 ++-- Source/Plugin.BLE/Windows/Device.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 47577584..5a91616f 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -84,7 +84,7 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect bool success = await dev.ConnectInternal(connectParameters, cancellationToken); - if (!success) + if (!success) { // use DisconnectDeviceNative to clean up resources otherwise windows won't disconnect the device // after a subsequent successful connection (#528, #536, #423) @@ -149,7 +149,7 @@ private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, obje protected override void DisconnectDeviceNative(IDevice device) { // Windows doesn't support disconnecting, so currently just dispose of the device - Trace.Message($"DisconnectDeviceNative from device with ID: {device.Id.ToHexBleAddress()}"); + Trace.Message($"DisconnectDeviceNative from device with ID: {device.Id.ToHexBleAddress()}"); if (device.NativeDevice is BluetoothLEDevice nativeDevice) { _deviceOperationRegistry.Remove(device.Id.ToString()); diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 60a6ce72..e0cd189b 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -110,7 +110,7 @@ protected override async Task RequestMtuNativeAsync(int requestValue) if (gattSession is null) { Trace.Message("WARNING RequestMtuNativeAsync failed since gattSession is null"); - return -1; + return -1; } return gattSession.MaxPduSize; } From 656f1d1ec91c514ddeeff09f4979df1a2b132877 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 17 Nov 2023 22:29:39 +0100 Subject: [PATCH 439/527] Release 3.1.0-beta.1 * update version in csproj files * amend changelog.md --- .../MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- doc/changelog.md | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 4a5fd0ba..0d25a548 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE - 3.0.0 + 3.1.0-beta.1 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil MvvmCross.Plugin.BLE diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 046f225e..87d4facc 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -4,7 +4,7 @@ $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 Plugin.BLE Plugin.BLE - 3.0.0 + 3.1.0-beta.1 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil Plugin.BLE diff --git a/doc/changelog.md b/doc/changelog.md index 5fc7b495..0bd1dbbc 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,5 +1,18 @@ # Changelog +## 3.1 + +#### 3.1.0-beta.1 +- #746 Windows.Devices.Bluetooth Only +- #764 ReadAsync updates characteristic value on Windows +- #770 Remove .NET 6 +- #773 Added BroadcastName to AdvertisementRecordType (fixes #772) +- #774 disable MainThreadInvoker in Adapter.ConnectToDeviceAsync (fixes #757) +- #776 Improve Connect In Windows +- #777 StateChanged for Windows +- #778 Add support for .NET 8 + + ## 3.0 MAUI #### 3.0.0 @@ -40,6 +53,7 @@ - #614 Upgrade to .NET 6 - #638 GitHub Actions: update to .NET 7 (fixes #622, #626, #630) + ## 2.2 UWP #### 2.2.0-pre5 @@ -65,6 +79,7 @@ #### 2.2.0-pre.1 UWP - UWP support pre-release + ## 2.1 MacOS ### 2.1.3 From 243d2194f140ff9ff6daa9347d89a9fe5fd7ced8 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Wed, 29 Nov 2023 11:14:34 +0100 Subject: [PATCH 440/527] TrySetStateAsync --- .../Plugin.BLE/Windows/BleImplementation.cs | 55 ++++++++++++++----- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/Source/Plugin.BLE/Windows/BleImplementation.cs b/Source/Plugin.BLE/Windows/BleImplementation.cs index 793f976d..017d33c0 100644 --- a/Source/Plugin.BLE/Windows/BleImplementation.cs +++ b/Source/Plugin.BLE/Windows/BleImplementation.cs @@ -10,6 +10,10 @@ namespace Plugin.BLE { public class BleImplementation : BleImplementationBase { + private BluetoothAdapter btAdapter; + private Radio radio; + private bool isInitialized = false; + public static BluetoothCacheMode CacheModeCharacteristicRead { get; set; } = BluetoothCacheMode.Uncached; public static BluetoothCacheMode CacheModeDescriptorRead { get; set; } = BluetoothCacheMode.Uncached; public static BluetoothCacheMode CacheModeGetDescriptors { get; set; } = BluetoothCacheMode.Cached; @@ -23,22 +27,15 @@ protected override IAdapter CreateNativeAdapter() protected override BluetoothState GetInitialStateNative() { - try - { - BluetoothAdapter btAdapter = BluetoothAdapter.GetDefaultAsync().AsTask().Result; - if (!btAdapter.IsLowEnergySupported) - { - return BluetoothState.Unavailable; - } - var radio = btAdapter.GetRadioAsync().AsTask().Result; - radio.StateChanged += Radio_StateChanged; - return ToBluetoothState(radio.State); + if (!isInitialized) + { + return BluetoothState.Unknown; } - catch (Exception ex) + if (!btAdapter.IsLowEnergySupported) { - Trace.Message("GetInitialStateNativeAsync exception:{0}", ex.Message); return BluetoothState.Unavailable; } + return ToBluetoothState(radio.State); } private static BluetoothState ToBluetoothState(RadioState radioState) @@ -61,7 +58,39 @@ private void Radio_StateChanged(Radio radio, object args) protected override void InitializeNative() { - + try + { + btAdapter = BluetoothAdapter.GetDefaultAsync().AsTask().Result; + radio = btAdapter.GetRadioAsync().AsTask().Result; + radio.StateChanged += Radio_StateChanged; + isInitialized = true; + } + catch (Exception ex) + { + Trace.Message("InitializeNative exception:{0}", ex.Message); + } + } + + /// + /// Try set the state of the Bluetooth on/off in Windows + /// + /// + /// true if the the method executed with success otherwice false + public async Task TrySetStateAsync(bool on) + { + if (!isInitialized) + { + return false; + } + try + { + return await radio.SetStateAsync(on ? RadioState.On : RadioState.Off) == RadioAccessStatus.Allowed; + } + catch (Exception ex) + { + Trace.Message("TrySetStateAsync exception:{0}", ex.Message); + return false; + } } } From 480be6cab955b598b8b62724c1f254a8a4d1040e Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sun, 10 Dec 2023 10:14:35 +0100 Subject: [PATCH 441/527] Implemented BluetoothLEPreferredConnectionParameters --- .../BLE.Client.WinConsole.csproj | 2 +- .../BLE.Client/BLE.Client.WinConsole/Demo.cs | 12 ++ .../{BleDemo.cs => PluginDemos.cs} | 12 +- .../BLE.Client.WinConsole/Program.cs | 42 ++++++- .../BLE.Client.WinConsole/WindowsDemos.cs | 106 ++++++++++++++++++ Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- Source/Plugin.BLE/Shared/ConnectParameter.cs | 12 +- .../Shared/ConnectionParameterSet.cs | 26 +++++ Source/Plugin.BLE/Windows/Adapter.cs | 8 +- Source/Plugin.BLE/Windows/Device.cs | 41 ++++++- 10 files changed, 247 insertions(+), 16 deletions(-) create mode 100644 Source/BLE.Client/BLE.Client.WinConsole/Demo.cs rename Source/BLE.Client/BLE.Client.WinConsole/{BleDemo.cs => PluginDemos.cs} (93%) create mode 100644 Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs create mode 100644 Source/Plugin.BLE/Shared/ConnectionParameterSet.cs diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj b/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj index d19a9352..014f3859 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj +++ b/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj @@ -2,7 +2,7 @@ Exe - net7.0-windows10.0.19041 + net8.0-windows10.0.22621.0 enable enable diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Demo.cs b/Source/BLE.Client/BLE.Client.WinConsole/Demo.cs new file mode 100644 index 00000000..84d043f1 --- /dev/null +++ b/Source/BLE.Client/BLE.Client.WinConsole/Demo.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +public record Demo +( + string Description, + Func Method +); + diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs similarity index 93% rename from Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs rename to Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs index af174100..544f2703 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BleDemo.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs @@ -14,7 +14,7 @@ namespace BLE.Client.WinConsole { - internal class BleDemo + internal class PluginDemos { private readonly IBluetoothLE bluetoothLE; public IAdapter Adapter { get; } @@ -23,7 +23,7 @@ internal class BleDemo private readonly IDictionary connectedDevices; private bool scanningDone = false; - public BleDemo(Action? writer = null) + public PluginDemos(Action? writer = null) { discoveredDevices = new List(); connectedDevices = new ConcurrentDictionary(); @@ -44,10 +44,14 @@ public IDevice ConnectToKnown(Guid id) return dev; } - public IDevice ConnectToKnown(string bleaddress) + public async Task Test_Connect_Disconnect(string bleaddress) { var id = bleaddress.ToBleDeviceGuid(); - return ConnectToKnown(id); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id); + connectedDevices[id] = dev; + await Task.Delay(4000); + await Adapter.DisconnectDeviceAsync(dev); + dev.Dispose(); } public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ms = 2000) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index 48e20cbd..122360e5 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -2,13 +2,51 @@ using Plugin.BLE; using Plugin.BLE.Abstractions.Contracts; using System; +using Windows.Media.Capture; Console.WriteLine("Hello, BLE World!"); using (var ct = new ConsoleTracer()) { + const string bleaddress = "8C4B14C8602A"; Plugin.BLE.Abstractions.Trace.TraceImplementation = ct.GetPrefixedTrace("Plugin.BLE"); - var demo = new BleDemo(ct.GetPrefixedTrace(" DEMO")); - await demo.ShowNumberOfServices("40CBC0DD37E2"); + var ppemos = new PluginDemos(ct.GetPrefixedTrace(" DEMO")); + var wdemos = new WindowsDemos(ct.GetPrefixedTrace(" DEMO")); + var demoDict = new Dictionary + { + {ConsoleKey.D8, + new Demo("Plugin: Test Connect -> Disconnect", ppemos.Test_Connect_Disconnect) }, + {ConsoleKey.D9, + new Demo("Windows: Test Connect -> Disconnect", wdemos.Test_Connect_Disconnect) }, + }; + Console.WriteLine("Using BLE Address: " + bleaddress); + Console.WriteLine(); + Console.WriteLine("List of tests to run for key:"); + Console.WriteLine(ConsoleKey.Escape + " -> Quit!"); + foreach (var demo in demoDict) + { + Console.WriteLine(demo.Key + ": " + demo.Value.Description); + } + while (true) + { + var key = Console.ReadKey(); + if (key.Key == ConsoleKey.Escape) + { + break; + } + if (demoDict.TryGetValue(key.Key, out Demo? chosendemo)) + { + Console.WriteLine(key.Key + " -> Running: " + chosendemo.Description); + Console.WriteLine("---------------------------------------------"); + if (chosendemo is null) + { + throw new Exception("No such demo!"); + } + await chosendemo.Method(bleaddress); + } else + { + Console.WriteLine(key.Key + " -> No such test. Remember " + ConsoleKey.Escape + " -> Quit!"); + } + } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs new file mode 100644 index 00000000..3c0a2391 --- /dev/null +++ b/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs @@ -0,0 +1,106 @@ +using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.Windows; +using Plugin.BLE; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Diagnostics; +using Windows.Devices.Bluetooth.GenericAttributeProfile; +using Windows.Devices.Bluetooth; +using WBluetooth = Windows.Devices.Bluetooth; +using Plugin.BLE.Extensions; + +namespace BLE.Client.WinConsole +{ + /// + /// The purpose of this demonstration class is to show/test Windows BluetoothLEDevice without using the Plugin + /// + public class WindowsDemos + { + private readonly Action? writer; + ManualResetEvent disconnectedSignal = new ManualResetEvent(false); + ManualResetEvent connectedSignal = new ManualResetEvent(false); + + public WindowsDemos(Action? writer = null) + { + this.writer = writer; + } + + private void Write(string format, params object[] args) + { + writer?.Invoke(format, args); + } + + public async Task Test_Connect_Disconnect(string blehexaddress) + { + ulong bleaddress = blehexaddress.ToBleDeviceGuid().ToBleAddress(); + WBluetooth.BluetoothLEDevice dev = await WBluetooth.BluetoothLEDevice.FromBluetoothAddressAsync(bleaddress); + dev.RequestPreferredConnectionParameters(BluetoothLEPreferredConnectionParameters.ThroughputOptimized); + dev.ConnectionStatusChanged += Dev_ConnectionStatusChanged; + var devId = BluetoothDeviceId.FromId(dev.DeviceId); + Write("Connecting..."); + var stopwatch = Stopwatch.StartNew(); + GattSession gattSession = await GattSession.FromDeviceIdAsync(devId); + gattSession = await GattSession.FromDeviceIdAsync(devId); + gattSession.MaintainConnection = true; + gattSession.SessionStatusChanged += GattSession_SessionStatusChanged; + gattSession.MaxPduSizeChanged += GattSession_MaxPduSizeChanged; + if (!connectedSignal.WaitOne(10000)) + { + Write("Not Connected!!!"); + return; + } + Write("Connected in {0} ms", stopwatch.ElapsedMilliseconds); + var conpar = dev.GetConnectionParameters(); + Write($"Connected with Latency = {conpar.ConnectionLatency}, " + + $"Interval = {conpar.ConnectionInterval}, Timeout = {conpar.LinkTimeout}, MaxPdu = {gattSession.MaxPduSize}"); + + Thread.Sleep(100); + Write("Now Sleeing 4 secs..."); + Thread.Sleep(4000); + disconnectedSignal.Reset(); + Write("Disconnecting..."); + stopwatch = Stopwatch.StartNew(); + + gattSession.MaintainConnection = false; + gattSession.Dispose(); + dev.Dispose(); + if (!disconnectedSignal.WaitOne(10000)) + { + Write("Not Disconnected!!!"); + return; + } + Write("Disconnected in {0} ms", stopwatch.ElapsedMilliseconds); + } + + private void GattSession_MaxPduSizeChanged(GattSession sender, object args) + { + Write("MaxPduSizeChanged: {0}", sender.MaxPduSize); + } + + private void GattSession_SessionStatusChanged(GattSession sender, GattSessionStatusChangedEventArgs args) + { + Write("SessionStatusChanged: {0}", args.Status); + } + + private void Dev_ConnectionStatusChanged(BluetoothLEDevice sender, object args) + { + Write("ConnectionStatusChanged:{0}", sender.ConnectionStatus); + switch(sender.ConnectionStatus) + { + case BluetoothConnectionStatus.Disconnected: + disconnectedSignal.Set(); + break; + case BluetoothConnectionStatus.Connected: + connectedSignal.Set(); + break; + default: + Write("Unknown BluetoothConnectionStatus: {0}", sender.ConnectionStatus); + break; + } + } + } +} diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 87d4facc..373aaa2a 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -1,7 +1,7 @@  netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android34.0;net8.0-ios;net8.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041;net8.0-windows10.0.22621.0 Plugin.BLE Plugin.BLE 3.1.0-beta.1 diff --git a/Source/Plugin.BLE/Shared/ConnectParameter.cs b/Source/Plugin.BLE/Shared/ConnectParameter.cs index 1574f5c6..2625748d 100644 --- a/Source/Plugin.BLE/Shared/ConnectParameter.cs +++ b/Source/Plugin.BLE/Shared/ConnectParameter.cs @@ -16,6 +16,12 @@ public struct ConnectParameters /// public bool ForceBleTransport { get; } + /// + /// Windows only, mapped to: + /// https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothlepreferredconnectionparameters + /// + public ConnectionParameterSet ConnectionParameterSet { get; } + /// /// Default-constructed connection parameters (all parameters set to false). /// @@ -26,10 +32,14 @@ public struct ConnectParameters /// /// Android only: Whether to directly connect to the remote device (false) or to automatically connect as soon as the remote device becomes available (true). The default is false. /// Android only: For Dual Mode device, force transport mode to LE. The default is false. - public ConnectParameters(bool autoConnect = false, bool forceBleTransport = false) + public ConnectParameters( + bool autoConnect = false, + bool forceBleTransport = false, + ConnectionParameterSet connectionParameterSet = ConnectionParameterSet.None) { AutoConnect = autoConnect; ForceBleTransport = forceBleTransport; + ConnectionParameterSet = connectionParameterSet; } } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/ConnectionParameterSet.cs b/Source/Plugin.BLE/Shared/ConnectionParameterSet.cs new file mode 100644 index 00000000..24faf0ed --- /dev/null +++ b/Source/Plugin.BLE/Shared/ConnectionParameterSet.cs @@ -0,0 +1,26 @@ +namespace Plugin.BLE.Abstractions +{ + /// + /// Only supported in Windows. Mapped to this + /// https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothlepreferredconnectionparameters + /// + public enum ConnectionParameterSet + { + /// + /// Not setting any preffered connection type + /// + None, + /// + /// https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothlepreferredconnectionparameters.balanced + /// + Balanced, + /// + /// https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothlepreferredconnectionparameters.poweroptimized + /// + PowerOptimized, + /// + /// https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothlepreferredconnectionparameters.throughputoptimized + /// + ThroughputOptimized + } +} diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 5a91616f..02e0e47a 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -62,7 +62,7 @@ protected override void StopScanNative() if (_bleWatcher != null) { Trace.Message("Stopping the scan for devices"); - _bleWatcher.Stop(); + _bleWatcher.Stop(); _bleWatcher = null; } } @@ -122,6 +122,12 @@ private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, obje if (nativeDevice.ConnectionStatus == BluetoothConnectionStatus.Connected && ConnectedDeviceRegistry.TryGetValue(id, out var connectedDevice)) { +#if WINDOWS10_0_22000_0_OR_GREATER + var conpar = nativeDevice.GetConnectionParameters(); + Trace.Message( + $"Connected with Latency = {conpar.ConnectionLatency}, " + + $"Interval = {conpar.ConnectionInterval}, Timeout = {conpar.LinkTimeout}"); +#endif HandleConnectedDevice(connectedDevice); return; } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index e0cd189b..6445059f 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -31,7 +31,7 @@ public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id Id = id; Name = nativeDevice.Name; AdvertisementRecords = advertisementRecords; - IsConnectable = isConnectable; + IsConnectable = isConnectable; } internal void Update(short btAdvRawSignalStrengthInDBm, IReadOnlyList advertisementData) @@ -121,25 +121,53 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv return false; } + + + static void MaybeRequestPreferredConnectionParameters(BluetoothLEDevice device, ConnectParameters connectParameters) + { +#if WINDOWS10_0_22000_0_OR_GREATER + BluetoothLEPreferredConnectionParameters parameters = null; + switch(connectParameters.ConnectionParameterSet) + { + case ConnectionParameterSet.Balanced: + parameters = BluetoothLEPreferredConnectionParameters.Balanced; + break; + case ConnectionParameterSet.PowerOptimized: + parameters = BluetoothLEPreferredConnectionParameters.PowerOptimized; + break; + case ConnectionParameterSet.ThroughputOptimized: + parameters = BluetoothLEPreferredConnectionParameters.ThroughputOptimized; + break; + default: + parameters = BluetoothLEPreferredConnectionParameters.ThroughputOptimized; + break; + } + if (parameters is not null) + { + var conreq = device.RequestPreferredConnectionParameters(parameters); + Trace.Message($"RequestPreferredConnectionParameters({connectParameters.ConnectionParameterSet}): {conreq.Status}"); + } +#endif + } public async Task ConnectInternal(ConnectParameters connectParameters, CancellationToken cancellationToken) { // ref https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothledevice.frombluetoothaddressasync // Creating a BluetoothLEDevice object by calling this method alone doesn't (necessarily) initiate a connection. // To initiate a connection, set GattSession.MaintainConnection to true, or call an uncached service discovery - // method on BluetoothLEDevice, or perform a read/write operation against the device. - this.connectParameters = connectParameters; + // method on BluetoothLEDevice, or perform a read/write operation against the device. if (NativeDevice is null) { Trace.Message("ConnectInternal says: Cannot connect since NativeDevice is null"); return false; } try - { + { + MaybeRequestPreferredConnectionParameters(NativeDevice, connectParameters); var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); - gattSession = await GattSession.FromDeviceIdAsync(devId); + gattSession = await GattSession.FromDeviceIdAsync(devId); + gattSession.MaintainConnection = true; gattSession.SessionStatusChanged += GattSession_SessionStatusChanged; gattSession.MaxPduSizeChanged += GattSession_MaxPduSizeChanged; - gattSession.MaintainConnection = true; } catch (Exception ex) { @@ -156,6 +184,7 @@ private void DisposeGattSession() if (gattSession != null) { gattSession.MaintainConnection = false; + gattSession.MaxPduSizeChanged -= GattSession_MaxPduSizeChanged; gattSession.SessionStatusChanged -= GattSession_SessionStatusChanged; gattSession.Dispose(); gattSession = null; From 0ffd6b87e39735cff40cde04bc90ae02bfeca1b1 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 27 Dec 2023 14:11:01 +0100 Subject: [PATCH 442/527] GHA: add a Linux build --- .github/workflows/dotnet.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 11d19d78..5dba5729 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -99,3 +99,22 @@ jobs: run: dotnet build ./Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false - name: Build MAUI sample run: dotnet build ./Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj /p:Configuration=Release /t:restore,build /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false + + linuxBuild: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 8.0.x + - name: Install workloads + run: dotnet workload install android wasm-tools maui-android + - name: Build Plugin.BLE NuGet + run: dotnet build ./Source/Plugin.BLE/Plugin.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false + - name: Build MVVMCross.Plugins.BLE NuGet + run: dotnet build ./Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false + - name: Build MAUI sample + run: dotnet build ./Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj /p:Configuration=Release /t:restore,build /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false From 408037fe8f74e539de409848318b9a47680ee0d1 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 27 Dec 2023 14:22:36 +0100 Subject: [PATCH 443/527] do not build iOS & Mac targets on Linux --- Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 5 +++-- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 5 +++-- Source/Plugin.BLE/Plugin.BLE.csproj | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index fb1287e6..529aabbc 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -1,8 +1,9 @@  - net8.0-android34.0;net8.0-ios;net8.0-maccatalyst - $(TargetFrameworks);net8.0-windows10.0.19041 + net8.0-android34.0 + $(TargetFrameworks);net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);net8.0-windows10.0.19041 Exe BLE.Client.Maui true diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 0d25a548..6d48f213 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -1,7 +1,8 @@  - net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android34.0;net8.0-ios;net8.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 + net7.0-android33.0;net8.0-android34.0 + $(TargetFrameworks);net7.0-ios;net7.0-maccatalyst;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE 3.1.0-beta.1 diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 87d4facc..69648eb9 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -1,7 +1,8 @@  - netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android34.0;net8.0-ios;net8.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 + netstandard2.0;net7.0-android33.0;net8.0-android34.0 + $(TargetFrameworks);net7.0-ios;net7.0-maccatalyst;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 Plugin.BLE Plugin.BLE 3.1.0-beta.1 From b0373baf8858f23d9f1b1f69c3313bc78b7e5331 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 2 Jan 2024 11:06:06 +0100 Subject: [PATCH 444/527] Added TrySetStateAsync to Shared Interface --- Source/Plugin.BLE/Android/BleImplementation.cs | 7 +++++++ Source/Plugin.BLE/Apple/BleImplementation.cs | 7 +++++++ Source/Plugin.BLE/Shared/BleImplementationBase.cs | 7 ++++++- Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs | 8 ++++++++ Source/Plugin.BLE/Windows/BleImplementation.cs | 9 ++------- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/Source/Plugin.BLE/Android/BleImplementation.cs b/Source/Plugin.BLE/Android/BleImplementation.cs index a840a103..c0f79d6e 100644 --- a/Source/Plugin.BLE/Android/BleImplementation.cs +++ b/Source/Plugin.BLE/Android/BleImplementation.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Android.App; using Android.Bluetooth; using Android.Content; @@ -81,5 +82,11 @@ protected override BluetoothState GetInitialStateNative() protected override IAdapter CreateNativeAdapter() => new Adapter(_bluetoothManager); + + public override Task TrySetStateAsync(bool on) + { + Abstractions.Trace.Message("WARNING TrySetStateAsync is not implemented for Android"); + return Task.FromResult(false); + } } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Apple/BleImplementation.cs b/Source/Plugin.BLE/Apple/BleImplementation.cs index 2c110015..a2ef56b0 100644 --- a/Source/Plugin.BLE/Apple/BleImplementation.cs +++ b/Source/Plugin.BLE/Apple/BleImplementation.cs @@ -4,6 +4,7 @@ using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; using Plugin.BLE.iOS; +using System.Threading.Tasks; namespace Plugin.BLE { @@ -61,5 +62,11 @@ private CBCentralInitOptions CreateInitOptions() ShowPowerAlert = _showPowerAlert }; } + + public override Task TrySetStateAsync(bool on) + { + Trace.Message("WARNING TrySetStateAsync is not implemented for Apple"); + return Task.FromResult(false); + } } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/BleImplementationBase.cs b/Source/Plugin.BLE/Shared/BleImplementationBase.cs index 69385d87..11c2e2a6 100644 --- a/Source/Plugin.BLE/Shared/BleImplementationBase.cs +++ b/Source/Plugin.BLE/Shared/BleImplementationBase.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Abstractions.EventArgs; using Plugin.BLE.Abstractions.Utils; @@ -71,19 +72,23 @@ private IAdapter CreateAdapter() return new FakeAdapter(); return CreateNativeAdapter(); - } + } /// /// Native implementation of Initialize. /// protected abstract void InitializeNative(); + /// /// Get initial state of native adapter. /// protected abstract BluetoothState GetInitialStateNative(); + /// /// Create the native adapter. /// protected abstract IAdapter CreateNativeAdapter(); + + public abstract Task TrySetStateAsync(bool on); } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs b/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs index 08da6cdc..21455ded 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Plugin.BLE.Abstractions.EventArgs; namespace Plugin.BLE.Abstractions.Contracts @@ -29,6 +30,13 @@ public interface IBluetoothLE /// bool IsOn { get; } + /// + /// Try set the state of the Bluetooth on/off + /// + /// + /// true if the the method executed with success otherwice false + Task TrySetStateAsync(bool on); + /// /// Adapter to that provides access to the physical bluetooth adapter. /// diff --git a/Source/Plugin.BLE/Windows/BleImplementation.cs b/Source/Plugin.BLE/Windows/BleImplementation.cs index 017d33c0..f5795ab0 100644 --- a/Source/Plugin.BLE/Windows/BleImplementation.cs +++ b/Source/Plugin.BLE/Windows/BleImplementation.cs @@ -71,12 +71,7 @@ protected override void InitializeNative() } } - /// - /// Try set the state of the Bluetooth on/off in Windows - /// - /// - /// true if the the method executed with success otherwice false - public async Task TrySetStateAsync(bool on) + public override async Task TrySetStateAsync(bool on) { if (!isInitialized) { @@ -88,7 +83,7 @@ public async Task TrySetStateAsync(bool on) } catch (Exception ex) { - Trace.Message("TrySetStateAsync exception:{0}", ex.Message); + Trace.Message("TrySetStateAsync exception: {0}", ex.Message); return false; } } From 143995c1942f553d5aea3414a8694ff51d4cdafc Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 2 Jan 2024 11:10:19 +0100 Subject: [PATCH 445/527] Fixed formatting --- Source/Plugin.BLE/Shared/BleImplementationBase.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Source/Plugin.BLE/Shared/BleImplementationBase.cs b/Source/Plugin.BLE/Shared/BleImplementationBase.cs index 11c2e2a6..4adde41f 100644 --- a/Source/Plugin.BLE/Shared/BleImplementationBase.cs +++ b/Source/Plugin.BLE/Shared/BleImplementationBase.cs @@ -18,7 +18,6 @@ public abstract class BleImplementationBase : IBluetoothLE /// Occurs when the state of the Bluetooth adapter changes. /// public event EventHandler StateChanged; - /// /// Indicates whether the device supports BLE. /// @@ -72,23 +71,28 @@ private IAdapter CreateAdapter() return new FakeAdapter(); return CreateNativeAdapter(); - } + } /// /// Native implementation of Initialize. /// protected abstract void InitializeNative(); - + /// /// Get initial state of native adapter. /// protected abstract BluetoothState GetInitialStateNative(); - + /// /// Create the native adapter. /// protected abstract IAdapter CreateNativeAdapter(); - + + /// + /// Try set the state of the Bluetooth on/off + /// + /// + /// true if the the method executed with success otherwice false public abstract Task TrySetStateAsync(bool on); } } \ No newline at end of file From d037c8f9001a5f8ec0dd1d83defae06fdb4ef0d5 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Sun, 14 Jan 2024 21:50:56 +0100 Subject: [PATCH 446/527] Comment added to method: Only supported in Windows --- Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs b/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs index 21455ded..0bd46a14 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs @@ -32,6 +32,7 @@ public interface IBluetoothLE /// /// Try set the state of the Bluetooth on/off + /// 2024-01-14: Only supported in Windows /// /// /// true if the the method executed with success otherwice false From 370ed5ca6569dcf6bee95932bda90bb1a20bbf17 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 15 Jan 2024 20:57:20 +0100 Subject: [PATCH 447/527] Improved WIndows Demo Client --- .../BLE.Client.WinConsole.csproj | 4 +- .../BLE.Client.WinConsole/ConsoleTracer.cs | 1 + .../BLE.Client.WinConsole/PluginDemos.cs | 67 ++++++++++++++++--- .../BLE.Client.WinConsole/Program.cs | 31 +++++---- .../BLE.Client.WinConsole/WindowsDemos.cs | 24 ++++++- 5 files changed, 102 insertions(+), 25 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj b/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj index 014f3859..c72432fa 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj +++ b/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj @@ -3,12 +3,12 @@ Exe net8.0-windows10.0.22621.0 - enable + disable enable - + diff --git a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs index 6d34efd0..db7344fb 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/ConsoleTracer.cs @@ -4,6 +4,7 @@ using System.Diagnostics; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace BLE.Client.WinConsole diff --git a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs index 544f2703..f453613d 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs @@ -9,8 +9,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using Windows.Devices.Bluetooth; +using Windows.Devices.Enumeration; namespace BLE.Client.WinConsole { @@ -20,17 +22,27 @@ internal class PluginDemos public IAdapter Adapter { get; } private readonly Action? writer; private readonly List discoveredDevices; - private readonly IDictionary connectedDevices; private bool scanningDone = false; public PluginDemos(Action? writer = null) { discoveredDevices = new List(); - connectedDevices = new ConcurrentDictionary(); bluetoothLE = CrossBluetoothLE.Current; Adapter = CrossBluetoothLE.Current.Adapter; + Adapter.DeviceConnected += Adapter_DeviceConnected; + Adapter.DeviceDisconnected += Adapter_DeviceDisconnected; this.writer = writer; - } + } + + private void Adapter_DeviceDisconnected(object? sender, Plugin.BLE.Abstractions.EventArgs.DeviceEventArgs e) + { + Write($"Adapter_DeviceDisconnected {e.Device.Id}"); + } + + private void Adapter_DeviceConnected(object? sender, Plugin.BLE.Abstractions.EventArgs.DeviceEventArgs e) + { + Write($"Adapter_DeviceConnected {e.Device.Id}"); + } private void Write(string format, params object[] args) { @@ -39,19 +51,58 @@ private void Write(string format, params object[] args) public IDevice ConnectToKnown(Guid id) { - IDevice dev = Adapter.ConnectToKnownDeviceAsync(id).Result; - connectedDevices[id] = dev; + IDevice dev = Adapter.ConnectToKnownDeviceAsync(id).Result; return dev; } - public async Task Test_Connect_Disconnect(string bleaddress) + public async Task Connect_Disconnect(string bleaddress) { var id = bleaddress.ToBleDeviceGuid(); - IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id); - connectedDevices[id] = dev; + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id); + Write("Waiting 4 secs"); await Task.Delay(4000); + Write("Disconnecting"); + await Adapter.DisconnectDeviceAsync(dev); + dev.Dispose(); + Write("Test_Connect_Disconnect done"); + } + + public async Task Pair_Connect_Disconnect(string bleaddress) + { + var id = bleaddress.ToBleDeviceGuid(); + ulong bleAddressulong = id.ToBleAddress(); + using (BluetoothLEDevice nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bleAddressulong)) + { + nativeDevice.ConnectionStatusChanged += NativeDevice_ConnectionStatusChanged; + var deviceInformation = await DeviceInformation.CreateFromIdAsync(nativeDevice.DeviceId); + var pairing = deviceInformation.Pairing; + pairing.Custom.PairingRequested += Custom_PairingRequested; + Write("Pairing"); + DevicePairingResult result = await pairing.Custom.PairAsync(DevicePairingKinds.ConfirmOnly, DevicePairingProtectionLevel.Encryption); + Write("Pairing result: " + result.Status); + } + Write("Waiting 5 sec"); + await Task.Delay(5000); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id); + await Task.Delay(1000); + await dev.RequestMtuAsync(517); + Write("Waiting 3 secs"); + await Task.Delay(3000); + Write("Disconnecting"); await Adapter.DisconnectDeviceAsync(dev); dev.Dispose(); + Write("Pair_Connect_Disconnect done"); + } + + private void NativeDevice_ConnectionStatusChanged(BluetoothLEDevice sender, object args) + { + Write($"NativeDevice_ConnectionStatusChanged({sender.ConnectionStatus})"); + } + + private void Custom_PairingRequested(DeviceInformationCustomPairing sender, DevicePairingRequestedEventArgs args) + { + Write("Custom_PairingRequested -> Accept"); + args.Accept(); } public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ms = 2000) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index 122360e5..e211cd9f 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -2,50 +2,55 @@ using Plugin.BLE; using Plugin.BLE.Abstractions.Contracts; using System; +using System.Collections.Generic; using Windows.Media.Capture; Console.WriteLine("Hello, BLE World!"); using (var ct = new ConsoleTracer()) { - const string bleaddress = "8C4B14C8602A"; + const string bleaddress = "8C4B14C9C68A"; Plugin.BLE.Abstractions.Trace.TraceImplementation = ct.GetPrefixedTrace("Plugin.BLE"); var ppemos = new PluginDemos(ct.GetPrefixedTrace(" DEMO")); var wdemos = new WindowsDemos(ct.GetPrefixedTrace(" DEMO")); var demoDict = new Dictionary { - {ConsoleKey.D8, - new Demo("Plugin: Test Connect -> Disconnect", ppemos.Test_Connect_Disconnect) }, - {ConsoleKey.D9, - new Demo("Windows: Test Connect -> Disconnect", wdemos.Test_Connect_Disconnect) }, + {ConsoleKey.D1, new Demo("Plugin: Connect -> Disconnect", ppemos.Connect_Disconnect) }, + {ConsoleKey.D2, new Demo("Plugin: Pair -> Connect -> Disconnect", ppemos.Pair_Connect_Disconnect) }, + {ConsoleKey.D8, new Demo("Windows: Connect -> Disconnect", wdemos.Connect_Disconnect) }, + {ConsoleKey.D9, new Demo("Windows: Unpair all BLE devices", wdemos.UnPairAllBleDevices) }, }; + Console.WriteLine("Using BLE Address: " + bleaddress); Console.WriteLine(); Console.WriteLine("List of tests to run for key:"); Console.WriteLine(ConsoleKey.Escape + " -> Quit!"); - foreach (var demo in demoDict) - { - Console.WriteLine(demo.Key + ": " + demo.Value.Description); - } while (true) { - var key = Console.ReadKey(); + foreach (var demo in demoDict) + { + Console.WriteLine(demo.Key + ": " + demo.Value.Description); + } + + var key = Console.ReadKey(); if (key.Key == ConsoleKey.Escape) { break; } if (demoDict.TryGetValue(key.Key, out Demo? chosendemo)) { - Console.WriteLine(key.Key + " -> Running: " + chosendemo.Description); - Console.WriteLine("---------------------------------------------"); + Console.WriteLine(); + Console.WriteLine("Running: " + chosendemo.Description); if (chosendemo is null) { throw new Exception("No such demo!"); } await chosendemo.Method(bleaddress); - } else + } + else { Console.WriteLine(key.Key + " -> No such test. Remember " + ConsoleKey.Escape + " -> Quit!"); } + Console.WriteLine("---------------------------------------------"); } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs index 3c0a2391..6ec1d2ce 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs @@ -12,6 +12,8 @@ using Windows.Devices.Bluetooth; using WBluetooth = Windows.Devices.Bluetooth; using Plugin.BLE.Extensions; +using System.Threading; +using Windows.Devices.Enumeration; namespace BLE.Client.WinConsole { @@ -34,7 +36,7 @@ private void Write(string format, params object[] args) writer?.Invoke(format, args); } - public async Task Test_Connect_Disconnect(string blehexaddress) + public async Task Connect_Disconnect(string blehexaddress) { ulong bleaddress = blehexaddress.ToBleDeviceGuid().ToBleAddress(); WBluetooth.BluetoothLEDevice dev = await WBluetooth.BluetoothLEDevice.FromBluetoothAddressAsync(bleaddress); @@ -76,6 +78,24 @@ public async Task Test_Connect_Disconnect(string blehexaddress) Write("Disconnected in {0} ms", stopwatch.ElapsedMilliseconds); } + public async Task UnPairAllBleDevices(string bleaddress = "") + { + string aqsFilter = BluetoothLEDevice.GetDeviceSelector(); + var collection = await DeviceInformation.FindAllAsync(aqsFilter); + foreach (DeviceInformation di in collection) + { + try + { + Write($"Unpairing {di.Name}"); + _ = di.Pairing.UnpairAsync(); + } + catch (Exception ex) + { + Write($"Exception when unpairing {di.Name}: {ex.Message}"); + } + } + } + private void GattSession_MaxPduSizeChanged(GattSession sender, object args) { Write("MaxPduSizeChanged: {0}", sender.MaxPduSize); @@ -89,7 +109,7 @@ private void GattSession_SessionStatusChanged(GattSession sender, GattSessionSta private void Dev_ConnectionStatusChanged(BluetoothLEDevice sender, object args) { Write("ConnectionStatusChanged:{0}", sender.ConnectionStatus); - switch(sender.ConnectionStatus) + switch (sender.ConnectionStatus) { case BluetoothConnectionStatus.Disconnected: disconnectedSignal.Set(); From ac723239bc2cefb26f9014225d5ea9d6187aa83f Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 15 Jan 2024 20:58:01 +0100 Subject: [PATCH 448/527] Improved WinConsole Demo --- .../BLE.Client.WinConsole/BLE.Client.WinConsole.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj b/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj index c72432fa..45e83446 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj +++ b/Source/BLE.Client/BLE.Client.WinConsole/BLE.Client.WinConsole.csproj @@ -8,7 +8,7 @@ - + From adc7bba199bfedb8e0238c517df95452e169acfd Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 15 Jan 2024 21:03:40 +0100 Subject: [PATCH 449/527] Fixed MaybeRequestPreferredConnectionParameters for None --- Source/Plugin.BLE/Windows/Device.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 6445059f..b53756ce 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -138,8 +138,8 @@ static void MaybeRequestPreferredConnectionParameters(BluetoothLEDevice device, case ConnectionParameterSet.ThroughputOptimized: parameters = BluetoothLEPreferredConnectionParameters.ThroughputOptimized; break; - default: - parameters = BluetoothLEPreferredConnectionParameters.ThroughputOptimized; + case ConnectionParameterSet.None: + default: break; } if (parameters is not null) From 9a98eee892dcc58cff46e30cd359d97868dbf86b Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 15 Jan 2024 21:17:05 +0100 Subject: [PATCH 450/527] Merge from master --- Source/Plugin.BLE/Plugin.BLE.csproj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 373aaa2a..69648eb9 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -1,7 +1,8 @@  - netstandard2.0;net7.0-android33.0;net7.0-ios;net7.0-maccatalyst;net8.0-android34.0;net8.0-ios;net8.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041;net8.0-windows10.0.22621.0 + netstandard2.0;net7.0-android33.0;net8.0-android34.0 + $(TargetFrameworks);net7.0-ios;net7.0-maccatalyst;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 Plugin.BLE Plugin.BLE 3.1.0-beta.1 From 3f5f61cfa1009fb389d3663d5441b6c2608f03d6 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 15 Jan 2024 21:19:55 +0100 Subject: [PATCH 451/527] Added net8.0-windows10.0.22621.0 --- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 69648eb9..d465901a 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -2,7 +2,7 @@ netstandard2.0;net7.0-android33.0;net8.0-android34.0 $(TargetFrameworks);net7.0-ios;net7.0-maccatalyst;net8.0-ios;net8.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041;net8.0-windows10.0.22621.0 Plugin.BLE Plugin.BLE 3.1.0-beta.1 From e07c2ae509e1b1af4b47029224b900f8f7655b51 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 17 Jan 2024 22:58:31 +0100 Subject: [PATCH 452/527] GHA: fix Linux build errors * by installing the necessary Android tools * the errors were caused by a recent change in the runner image, see https://github.com/actions/runner-images/issues/8952 --- .github/workflows/dotnet.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 5dba5729..333bb744 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -100,7 +100,7 @@ jobs: - name: Build MAUI sample run: dotnet build ./Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj /p:Configuration=Release /t:restore,build /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false - linuxBuild: + linuxBuild: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -112,9 +112,13 @@ jobs: dotnet-version: 8.0.x - name: Install workloads run: dotnet workload install android wasm-tools maui-android + - name: Install Android tools + run: | + ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager \ + --sdk_root=$ANDROID_SDK_ROOT "platform-tools" - name: Build Plugin.BLE NuGet - run: dotnet build ./Source/Plugin.BLE/Plugin.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false + run: dotnet build ./Source/Plugin.BLE/Plugin.BLE.csproj -p:Configuration=Release -t:restore,build,pack -p:Version=$(git describe) -p:ContinuousIntegrationBuild=true -p:DeterministicSourcePaths=false - name: Build MVVMCross.Plugins.BLE NuGet - run: dotnet build ./Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false + run: dotnet build ./Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj -p:Configuration=Release -t:restore,build,pack -p:Version=$(git describe) -p:ContinuousIntegrationBuild=true -p:DeterministicSourcePaths=false - name: Build MAUI sample - run: dotnet build ./Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj /p:Configuration=Release /t:restore,build /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false + run: dotnet build ./Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj -p:Configuration=Release -t:restore,build -p:Version=$(git describe) -p:ContinuousIntegrationBuild=true -p:DeterministicSourcePaths=false From 257fedf7bcea4e202e25ab24a4b61cb3e4ed6d3c Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 22 Jan 2024 10:44:56 +0100 Subject: [PATCH 453/527] Work In Progress --- .../BLE.Client.WinConsole/PluginDemos.cs | 23 +++++++++++-------- .../BLE.Client.WinConsole/Program.cs | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- Source/Plugin.BLE/Windows/Device.cs | 2 -- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs index f453613d..ba1c9645 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs @@ -71,19 +71,22 @@ public async Task Pair_Connect_Disconnect(string bleaddress) { var id = bleaddress.ToBleDeviceGuid(); ulong bleAddressulong = id.ToBleAddress(); + DeviceInformation? deviceInformation = null; using (BluetoothLEDevice nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bleAddressulong)) - { + { + nativeDevice.RequestPreferredConnectionParameters(BluetoothLEPreferredConnectionParameters.ThroughputOptimized); nativeDevice.ConnectionStatusChanged += NativeDevice_ConnectionStatusChanged; - var deviceInformation = await DeviceInformation.CreateFromIdAsync(nativeDevice.DeviceId); - var pairing = deviceInformation.Pairing; - pairing.Custom.PairingRequested += Custom_PairingRequested; - Write("Pairing"); - DevicePairingResult result = await pairing.Custom.PairAsync(DevicePairingKinds.ConfirmOnly, DevicePairingProtectionLevel.Encryption); - Write("Pairing result: " + result.Status); + deviceInformation = await DeviceInformation.CreateFromIdAsync(nativeDevice.DeviceId); } - Write("Waiting 5 sec"); - await Task.Delay(5000); - IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id); + deviceInformation.Pairing.Custom.PairingRequested += Custom_PairingRequested; + Write("Pairing"); + DevicePairingResult result = await deviceInformation.Pairing.Custom.PairAsync(DevicePairingKinds.ConfirmOnly, DevicePairingProtectionLevel.Encryption); + Write("Pairing result: " + result.Status); + //Write("Waiting 10 sec after pairing before connecting"); + //await Task.Delay(2*5000); + Write("Calling Adapter.ConnectToKnownDeviceAsync"); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id); + Write($"Calling Adapter.ConnectToKnownDeviceAsync done with {dev.Name}"); await Task.Delay(1000); await dev.RequestMtuAsync(517); Write("Waiting 3 secs"); diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index e211cd9f..1305a4c6 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -8,7 +8,7 @@ Console.WriteLine("Hello, BLE World!"); using (var ct = new ConsoleTracer()) { - const string bleaddress = "8C4B14C9C68A"; + const string bleaddress = "8C4B14C86266"; Plugin.BLE.Abstractions.Trace.TraceImplementation = ct.GetPrefixedTrace("Plugin.BLE"); var ppemos = new PluginDemos(ct.GetPrefixedTrace(" DEMO")); var wdemos = new WindowsDemos(ct.GetPrefixedTrace(" DEMO")); diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index d465901a..762f6fdd 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -2,7 +2,7 @@ netstandard2.0;net7.0-android33.0;net8.0-android34.0 $(TargetFrameworks);net7.0-ios;net7.0-maccatalyst;net8.0-ios;net8.0-maccatalyst - $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041;net8.0-windows10.0.22621.0 + $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041;net8.0-windows10.0.22000.0 Plugin.BLE Plugin.BLE 3.1.0-beta.1 diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index b53756ce..2e3471fb 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -121,8 +121,6 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv return false; } - - static void MaybeRequestPreferredConnectionParameters(BluetoothLEDevice device, ConnectParameters connectParameters) { #if WINDOWS10_0_22000_0_OR_GREATER From 8c7759a88b9bf046223ccd66387db65e677e331d Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 22 Jan 2024 10:59:03 +0100 Subject: [PATCH 454/527] Fixed formatting --- Source/Plugin.BLE/Shared/ConnectParameter.cs | 2 +- Source/Plugin.BLE/Windows/Adapter.cs | 2 +- Source/Plugin.BLE/Windows/Device.cs | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Plugin.BLE/Shared/ConnectParameter.cs b/Source/Plugin.BLE/Shared/ConnectParameter.cs index 2625748d..9a6e57db 100644 --- a/Source/Plugin.BLE/Shared/ConnectParameter.cs +++ b/Source/Plugin.BLE/Shared/ConnectParameter.cs @@ -33,7 +33,7 @@ public struct ConnectParameters /// Android only: Whether to directly connect to the remote device (false) or to automatically connect as soon as the remote device becomes available (true). The default is false. /// Android only: For Dual Mode device, force transport mode to LE. The default is false. public ConnectParameters( - bool autoConnect = false, + bool autoConnect = false, bool forceBleTransport = false, ConnectionParameterSet connectionParameterSet = ConnectionParameterSet.None) { diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 02e0e47a..97c95d61 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -62,7 +62,7 @@ protected override void StopScanNative() if (_bleWatcher != null) { Trace.Message("Stopping the scan for devices"); - _bleWatcher.Stop(); + _bleWatcher.Stop(); _bleWatcher = null; } } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 2e3471fb..2d43c320 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -31,7 +31,7 @@ public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id Id = id; Name = nativeDevice.Name; AdvertisementRecords = advertisementRecords; - IsConnectable = isConnectable; + IsConnectable = isConnectable; } internal void Update(short btAdvRawSignalStrengthInDBm, IReadOnlyList advertisementData) @@ -159,10 +159,10 @@ public async Task ConnectInternal(ConnectParameters connectParameters, Can return false; } try - { + { MaybeRequestPreferredConnectionParameters(NativeDevice, connectParameters); var devId = BluetoothDeviceId.FromId(NativeDevice.DeviceId); - gattSession = await GattSession.FromDeviceIdAsync(devId); + gattSession = await GattSession.FromDeviceIdAsync(devId); gattSession.MaintainConnection = true; gattSession.SessionStatusChanged += GattSession_SessionStatusChanged; gattSession.MaxPduSizeChanged += GattSession_MaxPduSizeChanged; From 0642cf7d893154c2b523f3f1249231a028e63dcb Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 22 Jan 2024 14:15:54 +0100 Subject: [PATCH 455/527] Fixed that connectParameters was not passed on at first connect --- Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs | 7 ++++--- Source/Plugin.BLE/Windows/Adapter.cs | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs index ba1c9645..bef7a227 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs @@ -58,9 +58,10 @@ public IDevice ConnectToKnown(Guid id) public async Task Connect_Disconnect(string bleaddress) { var id = bleaddress.ToBleDeviceGuid(); - IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id); - Write("Waiting 4 secs"); - await Task.Delay(4000); + var connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.ThroughputOptimized); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id, connectParameters); + Write("Waiting 5 secs"); + await Task.Delay(5000); Write("Disconnecting"); await Adapter.DisconnectDeviceAsync(dev); dev.Dispose(); diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 97c95d61..1e19cd7e 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -172,7 +172,7 @@ public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceG var knownDevice = new Device(this, nativeDevice, 0, deviceGuid); - await ConnectToDeviceAsync(knownDevice, cancellationToken: cancellationToken); + await ConnectToDeviceAsync(knownDevice, connectParameters, cancellationToken: cancellationToken); return knownDevice; } From 0ed054e7095cecdccaf2e417fe75b7875301b963 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Tue, 30 Jan 2024 08:51:40 +0100 Subject: [PATCH 456/527] UpdateConnectionParameters added and implemented for Windows --- .../BLE.Client.WinConsole/PluginDemos.cs | 21 +++++++++++++++++++ .../BLE.Client.WinConsole/Program.cs | 3 ++- Source/Plugin.BLE/Android/Device.cs | 5 +++++ Source/Plugin.BLE/Apple/Device.cs | 5 +++++ Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 14 ++++++++++++- Source/Plugin.BLE/Shared/DeviceBase.cs | 11 ++++++++-- Source/Plugin.BLE/Windows/Device.cs | 14 +++++++++++-- 7 files changed, 67 insertions(+), 6 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs index bef7a227..b41aab66 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs @@ -68,6 +68,27 @@ public async Task Connect_Disconnect(string bleaddress) Write("Test_Connect_Disconnect done"); } + public async Task Connect_Change_Parameters_Disconnect(string bleaddress) + { + var id = bleaddress.ToBleDeviceGuid(); + var connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.Balanced); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id, connectParameters); + Write("Waiting 5 secs"); + await Task.Delay(5000); + connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.ThroughputOptimized); + dev.UpdateConnectionParameters(connectParameters); + Write("Waiting 5 secs"); + await Task.Delay(5000); + connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.Balanced); + dev.UpdateConnectionParameters(connectParameters); + Write("Waiting 5 secs"); + await Task.Delay(5000); + Write("Disconnecting"); + await Adapter.DisconnectDeviceAsync(dev); + dev.Dispose(); + Write("Test_Connect_Disconnect done"); + } + public async Task Pair_Connect_Disconnect(string bleaddress) { var id = bleaddress.ToBleDeviceGuid(); diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index 1305a4c6..efbb057d 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -8,7 +8,7 @@ Console.WriteLine("Hello, BLE World!"); using (var ct = new ConsoleTracer()) { - const string bleaddress = "8C4B14C86266"; + const string bleaddress = "8C4B14C8602A"; Plugin.BLE.Abstractions.Trace.TraceImplementation = ct.GetPrefixedTrace("Plugin.BLE"); var ppemos = new PluginDemos(ct.GetPrefixedTrace(" DEMO")); var wdemos = new WindowsDemos(ct.GetPrefixedTrace(" DEMO")); @@ -16,6 +16,7 @@ { {ConsoleKey.D1, new Demo("Plugin: Connect -> Disconnect", ppemos.Connect_Disconnect) }, {ConsoleKey.D2, new Demo("Plugin: Pair -> Connect -> Disconnect", ppemos.Pair_Connect_Disconnect) }, + {ConsoleKey.D3, new Demo("Plugin: Connect -> Change Parameters -> Disconnect", ppemos.Connect_Change_Parameters_Disconnect) }, {ConsoleKey.D8, new Demo("Windows: Connect -> Disconnect", wdemos.Connect_Disconnect) }, {ConsoleKey.D9, new Demo("Windows: Unpair all BLE devices", wdemos.UnPairAllBleDevices) }, }; diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index 37cfe97f..ad0f6d89 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -467,5 +467,10 @@ protected override DeviceBondState GetBondState() } return NativeDevice.BondState.FromNative(); } + + public override bool UpdateConnectionParameters(ConnectParameters connectParameters = default) + { + throw new NotImplementedException(); + } } } diff --git a/Source/Plugin.BLE/Apple/Device.cs b/Source/Plugin.BLE/Apple/Device.cs index c16e3e53..7ebe850d 100644 --- a/Source/Plugin.BLE/Apple/Device.cs +++ b/Source/Plugin.BLE/Apple/Device.cs @@ -182,5 +182,10 @@ protected override DeviceBondState GetBondState() { return DeviceBondState.NotSupported; } + + public override bool UpdateConnectionParameters(ConnectParameters connectParameters = default) + { + throw new NotImplementedException(); + } } } diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 32492d54..b82c657b 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -120,10 +120,22 @@ public interface IDevice : IDisposable /// True, if device supports IsConnectable else False /// bool SupportsIsConnectable { get; } - + /// /// Gets the bonding state of a device. /// DeviceBondState BondState { get; } + + /// + /// Updates the connection paramaters if already connected + /// + /// + /// Only implemented for Windows + /// + /// Connection parameters. Contains platform specific parameters needed to achieved connection. The default value is None. + /// + /// The Result property will contain a boolean that inticates if the update was successful. + /// + bool UpdateConnectionParameters(ConnectParameters connectParameters = default); } } diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index a3910392..dc66014b 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -202,7 +202,7 @@ public virtual void Dispose() public void ClearServices() { this.CancelEverythingAndReInitialize(); - + lock (KnownServices) { foreach (var service in KnownServices) @@ -260,12 +260,19 @@ public override int GetHashCode() /// Shows whether the device supports the . /// public abstract bool SupportsIsConnectable { get; } - + /// /// Gets the of the device. /// protected abstract DeviceBondState GetBondState(); + /// + /// Updates the connection paramaters if already connected + /// + /// + /// + public abstract bool UpdateConnectionParameters(ConnectParameters connectParameters = default); + /// /// Gets the of the device. /// diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 2d43c320..1798f471 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -121,7 +121,7 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv return false; } - static void MaybeRequestPreferredConnectionParameters(BluetoothLEDevice device, ConnectParameters connectParameters) + static bool MaybeRequestPreferredConnectionParameters(BluetoothLEDevice device, ConnectParameters connectParameters) { #if WINDOWS10_0_22000_0_OR_GREATER BluetoothLEPreferredConnectionParameters parameters = null; @@ -144,8 +144,13 @@ static void MaybeRequestPreferredConnectionParameters(BluetoothLEDevice device, { var conreq = device.RequestPreferredConnectionParameters(parameters); Trace.Message($"RequestPreferredConnectionParameters({connectParameters.ConnectionParameterSet}): {conreq.Status}"); - } + return conreq.Status == BluetoothLEPreferredConnectionParametersRequestStatus.Success; + } + return true; +#else + return false; #endif + } public async Task ConnectInternal(ConnectParameters connectParameters, CancellationToken cancellationToken) { @@ -235,5 +240,10 @@ protected override DeviceBondState GetBondState() { return DeviceBondState.NotSupported; } + + public override bool UpdateConnectionParameters(ConnectParameters connectParameters = default) + { + return MaybeRequestPreferredConnectionParameters(NativeDevice, connectParameters); + } } } From 4f274baa7a20b5544a583bee32952f8ddf817431 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Fri, 2 Feb 2024 22:27:05 +0100 Subject: [PATCH 457/527] Corrected spelling and added a missing comment --- Source/Plugin.BLE/Android/Device.cs | 2 +- Source/Plugin.BLE/Shared/ConnectParameter.cs | 1 + Source/Plugin.BLE/Shared/ConnectionParameterSet.cs | 2 +- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 6 +++--- Source/Plugin.BLE/Shared/DeviceBase.cs | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index ad0f6d89..431f7c62 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -40,7 +40,7 @@ public class Device : DeviceBase private TaskCompletionSource _bondCompleteTaskCompletionSource; /// - /// the connect paramaters used when connecting to this device + /// the connect parameters used when connecting to this device /// public ConnectParameters ConnectParameters { get; private set; } diff --git a/Source/Plugin.BLE/Shared/ConnectParameter.cs b/Source/Plugin.BLE/Shared/ConnectParameter.cs index 9a6e57db..d84f1374 100644 --- a/Source/Plugin.BLE/Shared/ConnectParameter.cs +++ b/Source/Plugin.BLE/Shared/ConnectParameter.cs @@ -32,6 +32,7 @@ public struct ConnectParameters /// /// Android only: Whether to directly connect to the remote device (false) or to automatically connect as soon as the remote device becomes available (true). The default is false. /// Android only: For Dual Mode device, force transport mode to LE. The default is false. + /// Windows only: Default is None, where this has no effect - use eg. ThroughputOptimized for firmware upload to a device public ConnectParameters( bool autoConnect = false, bool forceBleTransport = false, diff --git a/Source/Plugin.BLE/Shared/ConnectionParameterSet.cs b/Source/Plugin.BLE/Shared/ConnectionParameterSet.cs index 24faf0ed..d8dd6190 100644 --- a/Source/Plugin.BLE/Shared/ConnectionParameterSet.cs +++ b/Source/Plugin.BLE/Shared/ConnectionParameterSet.cs @@ -7,7 +7,7 @@ public enum ConnectionParameterSet { /// - /// Not setting any preffered connection type + /// Not setting any prefered connection type /// None, /// diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index b82c657b..e29295f9 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -127,14 +127,14 @@ public interface IDevice : IDisposable DeviceBondState BondState { get; } /// - /// Updates the connection paramaters if already connected + /// Updates the connection parameters if already connected /// /// /// Only implemented for Windows /// - /// Connection parameters. Contains platform specific parameters needed to achieved connection. The default value is None. + /// Connection parameters. Contains platform specific parameters needed to achieve connection. The default value is None. /// - /// The Result property will contain a boolean that inticates if the update was successful. + /// The Result property will contain a boolean that indicates if the update was successful. /// bool UpdateConnectionParameters(ConnectParameters connectParameters = default); } diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index dc66014b..11a0b9a1 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -267,7 +267,7 @@ public override int GetHashCode() protected abstract DeviceBondState GetBondState(); /// - /// Updates the connection paramaters if already connected + /// Updates the connection parameters if already connected /// /// /// From 394768519855b73c875432f05f17e700b950613a Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 2 Feb 2024 23:41:26 +0100 Subject: [PATCH 458/527] build Xamarin.UWP client via cake --- .build/build.cake | 1 + 1 file changed, 1 insertion(+) diff --git a/.build/build.cake b/.build/build.cake index 1c691c2d..a140d546 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -72,6 +72,7 @@ Task("BuildClients") BuildProject("BLE.Client", "BLE.Client.Droid", Path.Combine("clients", "android")); BuildProject("BLE.Client", "BLE.Client.iOS", Path.Combine("clients", "ios")); BuildProject("BLE.Client", "BLE.Client.macOS", Path.Combine("clients", "macOS")); + BuildProject("BLE.Client", "BLE.Client.UWP", Path.Combine("clients", "uwp")); }); Task("Clean").Does (() => From 9b0887df912be991f2cb180dbc802d0b45169403 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 3 Feb 2024 00:18:13 +0100 Subject: [PATCH 459/527] amend .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 377e7b7f..761d1d47 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ FAKE* *.puibxml *.pdb *.DS_Store +.mono/ # Visual Studo 2015 cache/options directory .vs/ From 7a20453cb49b35f86d978db0adbfa8adad339d0c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 3 Feb 2024 09:22:33 +0100 Subject: [PATCH 460/527] BLE.Client.UWP: remove references to BLE.Client.UWP_TemporaryKey.pfx * the file does not exist --- Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj index 2cc3a446..7a4127fc 100644 --- a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj +++ b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj @@ -17,7 +17,6 @@ 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true - BLE.Client.UWP_TemporaryKey.pfx true @@ -105,7 +104,6 @@ Designer - @@ -217,4 +215,4 @@ --> - \ No newline at end of file + From d2365df74df939f9fa844a92e3f86e96555b3642 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 3 Feb 2024 12:07:12 +0100 Subject: [PATCH 461/527] build BLE.Client.WinConsole via cake --- .build/build.cake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.build/build.cake b/.build/build.cake index a140d546..3bac0394 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -68,11 +68,14 @@ Task("BuildLibs") Task("BuildClients") .Does(() => { + // Xamarin BuildProject("BLE.Client", "BLE.Client", Path.Combine("clients", "netstandard2.0")); BuildProject("BLE.Client", "BLE.Client.Droid", Path.Combine("clients", "android")); BuildProject("BLE.Client", "BLE.Client.iOS", Path.Combine("clients", "ios")); BuildProject("BLE.Client", "BLE.Client.macOS", Path.Combine("clients", "macOS")); BuildProject("BLE.Client", "BLE.Client.UWP", Path.Combine("clients", "uwp")); + // .NET 7/8 + BuildProject("BLE.Client", "BLE.Client.WinConsole", Path.Combine("clients", "wincon")); }); Task("Clean").Does (() => From 9a3e1cfb08cc2f2c701f09cda515c1a9c8c54237 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 3 Feb 2024 12:45:08 +0100 Subject: [PATCH 462/527] build BLE.Client.Maui via cake --- .build/build.cake | 1 + 1 file changed, 1 insertion(+) diff --git a/.build/build.cake b/.build/build.cake index 3bac0394..b3511442 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -76,6 +76,7 @@ Task("BuildClients") BuildProject("BLE.Client", "BLE.Client.UWP", Path.Combine("clients", "uwp")); // .NET 7/8 BuildProject("BLE.Client", "BLE.Client.WinConsole", Path.Combine("clients", "wincon")); + BuildProject("BLE.Client", "BLE.Client.Maui", Path.Combine("clients", "maui")); }); Task("Clean").Does (() => From 0cb1c114839cc1e88c4b3adce9a3c3a670822f3b Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 3 Feb 2024 22:35:18 +0100 Subject: [PATCH 463/527] BLE.Client.Maui: add runtime IDs for Mac and Windows * in order to fix CI errors like: Assets file doesn't have a target for 'net8.0-maccatalyst/maccatalyst-arm64'. Ensure that restore has run and that you have included 'net8.0-maccatalyst' in the TargetFrameworks for your project. You may also need to include 'maccatalyst-arm64' in your project's RuntimeIdentifiers. --- .../BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index 529aabbc..fd9ea374 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -36,10 +36,15 @@ 4 - false - Mac Developer - 3rd Party Mac Developer Installer + maccatalyst-arm64 + false + Mac Developer + 3rd Party Mac Developer Installer + + + win-x64 + From a9dec6eefe4e1c38b864f449e3500a19b5ef48a6 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 4 Feb 2024 17:33:30 +0100 Subject: [PATCH 464/527] BLE.Client.Maui: set PublishReadyToRun to false --- Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index fd9ea374..85147185 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -9,6 +9,7 @@ true true enable + false BLE.Client.Maui From 1cfb43dfe3ffd0860042453309e498ec4e04b793 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 4 Feb 2024 18:25:34 +0100 Subject: [PATCH 465/527] BLE.Client.Maui: set the Platform for Windows * as suggested here: https://stackoverflow.com/questions/72980822/how-to-fix-a-packaged-winui3-app-build-what-makes-trouble-with-processorarchite --- Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index 85147185..5747da41 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -43,6 +43,7 @@ 3rd Party Mac Developer Installer + x64 win-x64 From d4e54b5d60b2b9a3ad3a9b926d403e777c741dbb Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 4 Feb 2024 19:01:21 +0100 Subject: [PATCH 466/527] BLE.Client.Maui: add x64 and x86 configs for Windows * as suggested here: https://learn.microsoft.com/en-us/answers/questions/859591/the-runtimeidentifier-platform-win10-x64-and-the-p --- Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index 5747da41..1b4790da 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -42,9 +42,13 @@ Mac Developer 3rd Party Mac Developer Installer - + x64 - win-x64 + win10-x64 + + + x86 + win10-x86 From bb60c72234966ce5485a25f4b8612ce92ba9921c Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Mon, 5 Feb 2024 17:54:20 +0100 Subject: [PATCH 467/527] - Fixed GetSystemConnectedOrPairedDevices in Windows - Improved WinConsole Demo Client --- .../BleAddressSelector.cs | 63 +++++++++++++++++++ .../BLE.Client/BLE.Client.WinConsole/Demo.cs | 2 +- .../BLE.Client.WinConsole/PluginDemos.cs | 62 +++++++++++++----- .../BLE.Client.WinConsole/Program.cs | 42 +++++++++---- .../BLE.Client.WinConsole/WindowsDemos.cs | 10 +-- Source/Plugin.BLE/Windows/Adapter.cs | 2 +- 6 files changed, 145 insertions(+), 36 deletions(-) create mode 100644 Source/BLE.Client/BLE.Client.WinConsole/BleAddressSelector.cs diff --git a/Source/BLE.Client/BLE.Client.WinConsole/BleAddressSelector.cs b/Source/BLE.Client/BLE.Client.WinConsole/BleAddressSelector.cs new file mode 100644 index 00000000..8369099d --- /dev/null +++ b/Source/BLE.Client/BLE.Client.WinConsole/BleAddressSelector.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BLE.Client.WinConsole +{ + public static class BleAddressSelector + { + static string bleaddressTxtPath = "bleaddress.txt"; + static string? bleaddress = null; + + public static bool DoesBleAddressExists() + { + if (File.Exists(bleaddressTxtPath)) + { + bleaddress = File.ReadAllText(bleaddressTxtPath); + return true; + } + return false; + } + + public static string GetBleAddress() + { + if (bleaddress is null) + { + if (File.Exists(bleaddressTxtPath)) + { + bleaddress = File.ReadAllText(bleaddressTxtPath); + } + else + { + NewBleAddress(); + } + } + if (bleaddress is null) + { + throw new Exception("BleAddressSelector says bleaddress is null"); + } + return bleaddress; + } + + public static void SetBleAddress(string? bleaddressIn) + { + if (bleaddressIn is null || bleaddressIn.Length != 12) + { + Console.WriteLine("Wrong BLE Address entered"); + throw new Exception("Wrong BLE Address entered"); + } + bleaddress = bleaddressIn.ToUpperInvariant(); + File.WriteAllText(bleaddressTxtPath, bleaddress); + } + + public static Task NewBleAddress() + { + Console.Write("Enter BLE Address (12 hex chars): "); + SetBleAddress(Console.ReadLine()); + return Task.CompletedTask; + } + } +} diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Demo.cs b/Source/BLE.Client/BLE.Client.WinConsole/Demo.cs index 84d043f1..16dc0353 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Demo.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Demo.cs @@ -7,6 +7,6 @@ public record Demo ( string Description, - Func Method + Func Method ); diff --git a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs index b41aab66..78d4769c 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs @@ -51,15 +51,16 @@ private void Write(string format, params object[] args) public IDevice ConnectToKnown(Guid id) { - IDevice dev = Adapter.ConnectToKnownDeviceAsync(id).Result; + IDevice dev = Adapter.ConnectToKnownDeviceAsync(id).Result; return dev; } - public async Task Connect_Disconnect(string bleaddress) + public async Task Connect_Disconnect() { + string bleaddress = BleAddressSelector.GetBleAddress(); var id = bleaddress.ToBleDeviceGuid(); var connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.ThroughputOptimized); - IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id, connectParameters); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id, connectParameters); Write("Waiting 5 secs"); await Task.Delay(5000); Write("Disconnecting"); @@ -68,8 +69,9 @@ public async Task Connect_Disconnect(string bleaddress) Write("Test_Connect_Disconnect done"); } - public async Task Connect_Change_Parameters_Disconnect(string bleaddress) + public async Task Connect_Change_Parameters_Disconnect() { + string bleaddress = BleAddressSelector.GetBleAddress(); var id = bleaddress.ToBleDeviceGuid(); var connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.Balanced); IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id, connectParameters); @@ -89,8 +91,9 @@ public async Task Connect_Change_Parameters_Disconnect(string bleaddress) Write("Test_Connect_Disconnect done"); } - public async Task Pair_Connect_Disconnect(string bleaddress) + public async Task Pair_Connect_Disconnect() { + string bleaddress = BleAddressSelector.GetBleAddress(); var id = bleaddress.ToBleDeviceGuid(); ulong bleAddressulong = id.ToBleAddress(); DeviceInformation? deviceInformation = null; @@ -139,14 +142,15 @@ public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ return; } Write("Bluetooth is on"); - Write("Scanning now for " + time_ms + " ms..."); + Write("Scanning now for " + time_ms + " ms..."); var cancellationTokenSource = new CancellationTokenSource(time_ms); discoveredDevices.Clear(); + int index = 1; Adapter.DeviceDiscovered += (s, a) => { var dev = a.Device; - Write("DeviceDiscovered: {0} with Name = {1}", dev.Id.ToHexBleAddress(), dev.Name); + Write($"{index++}: DeviceDiscovered: {0} with Name = {1}", dev.Id.ToHexBleAddress(), dev.Name); discoveredDevices.Add(a.Device); }; Adapter.ScanMode = scanMode; @@ -154,6 +158,26 @@ public async Task DoTheScanning(ScanMode scanMode = ScanMode.LowPower, int time_ scanningDone = true; } + internal async Task DiscoverAndSelect() + { + await DoTheScanning(); + int index = 1; + await Task.Delay(200); + Console.WriteLine(); + foreach (var dev in discoveredDevices) + { + Console.WriteLine($"{index++}: {dev.Id.ToHexBleAddress()} with Name = {dev.Name}"); + } + Console.WriteLine(); + Console.Write($"Select BLE address index with value {1} to {discoveredDevices.Count}: "); + if (int.TryParse(Console.ReadLine(), out int selectedIndex)) + { + IDevice selecteddev = discoveredDevices[selectedIndex - 1]; + Console.WriteLine($"Selected {selectedIndex}: {selecteddev.Id.ToHexBleAddress()} with Name = {selecteddev.Name}"); + BleAddressSelector.SetBleAddress(selecteddev.Id.ToHexBleAddress()); + } + } + private void WriteAdvertisementRecords(IDevice device) { if (device.AdvertisementRecords is null) @@ -190,34 +214,36 @@ private void WriteAdvertisementRecords(IDevice device) return null; } Thread.Sleep(10); - foreach(var device in discoveredDevices) + foreach (var device in discoveredDevices) { if (device.Name.Contains(name)) { - await Adapter.ConnectToDeviceAsync(device); + await Adapter.ConnectToDeviceAsync(device); return device; } } return null; } - public void ShowGetSystemConnectedOrPairedDevices() + public Task RunGetSystemConnectedOrPairedDevices() { - IReadOnlyList devs = Adapter.GetSystemConnectedOrPairedDevices(); - Write("GetSystemConnectedOrPairedDevices found {0} devices.", devs.Count); - foreach(var dev in devs) + IReadOnlyList devs = Adapter.GetSystemConnectedOrPairedDevices(); + Task.Delay(200); + Write($"GetSystemConnectedOrPairedDevices found {devs.Count} devices:"); + foreach (var dev in devs) { Write("{0}: {1}", dev.Id.ToHexBleAddress(), dev.Name); } + return Task.CompletedTask; } /// /// This demonstrates a bug where the known services is not cleared at disconnect (2023-11-03) - /// - /// 12 hex char ble address - public async Task ShowNumberOfServices(string bleaddress) + /// + public async Task ShowNumberOfServices() { - Write("Connecting to device with address = {0}", bleaddress); + string bleaddress = BleAddressSelector.GetBleAddress(); + Write("Connecting to device with address = {0}", bleaddress); IDevice dev = await Adapter.ConnectToKnownDeviceAsync(bleaddress.ToBleDeviceGuid()) ?? throw new Exception("null"); string name = dev.Name; Write("Connected to {0} {1} {2}", name, dev.Id.ToHexBleAddress(), dev.State); @@ -243,5 +269,7 @@ internal Task Disconnect(IDevice dev) { return Adapter.DisconnectDeviceAsync(dev); } + + } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index efbb057d..1fe8f9d2 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -3,30 +3,45 @@ using Plugin.BLE.Abstractions.Contracts; using System; using System.Collections.Generic; +using System.Threading.Tasks; using Windows.Media.Capture; Console.WriteLine("Hello, BLE World!"); using (var ct = new ConsoleTracer()) { - const string bleaddress = "8C4B14C8602A"; + Plugin.BLE.Abstractions.Trace.TraceImplementation = ct.GetPrefixedTrace("Plugin.BLE"); var ppemos = new PluginDemos(ct.GetPrefixedTrace(" DEMO")); var wdemos = new WindowsDemos(ct.GetPrefixedTrace(" DEMO")); var demoDict = new Dictionary { - {ConsoleKey.D1, new Demo("Plugin: Connect -> Disconnect", ppemos.Connect_Disconnect) }, - {ConsoleKey.D2, new Demo("Plugin: Pair -> Connect -> Disconnect", ppemos.Pair_Connect_Disconnect) }, - {ConsoleKey.D3, new Demo("Plugin: Connect -> Change Parameters -> Disconnect", ppemos.Connect_Change_Parameters_Disconnect) }, - {ConsoleKey.D8, new Demo("Windows: Connect -> Disconnect", wdemos.Connect_Disconnect) }, - {ConsoleKey.D9, new Demo("Windows: Unpair all BLE devices", wdemos.UnPairAllBleDevices) }, + + {ConsoleKey.D1, new Demo("Discover and set the BleAddress", ppemos.DiscoverAndSelect) }, + {ConsoleKey.D2, new Demo("Set the BleAddress", BleAddressSelector.NewBleAddress) }, + {ConsoleKey.D3, new Demo("Connect -> Disconnect", ppemos.Connect_Disconnect) }, + {ConsoleKey.D4, new Demo("Pair -> Connect -> Disconnect", ppemos.Pair_Connect_Disconnect) }, + {ConsoleKey.D5, new Demo("Connect -> Change Parameters -> Disconnect", ppemos.Connect_Change_Parameters_Disconnect) }, + {ConsoleKey.D6, new Demo("Run GetSystemConnectedOrPairedDevices", ppemos.RunGetSystemConnectedOrPairedDevices) }, + {ConsoleKey.A, new Demo("Pure Windows: Connect -> Disconnect", wdemos.Connect_Disconnect) }, + {ConsoleKey.S, new Demo("Pure Windows: Unpair all BLE devices", wdemos.UnPairAllBleDevices) }, }; - Console.WriteLine("Using BLE Address: " + bleaddress); - Console.WriteLine(); - Console.WriteLine("List of tests to run for key:"); - Console.WriteLine(ConsoleKey.Escape + " -> Quit!"); while (true) { + + Console.WriteLine(); + if (BleAddressSelector.DoesBleAddressExists()) + { + Console.WriteLine($"Using BLE Address: {BleAddressSelector.GetBleAddress()}"); + } + else + { + Console.WriteLine("No Ble address has been set - use key '1' or '2' to set the BLE address)"); + } + Console.WriteLine("List of tests to run for key:"); + Console.WriteLine(); + Console.WriteLine(ConsoleKey.Escape + ": Quit!"); + foreach (var demo in demoDict) { Console.WriteLine(demo.Key + ": " + demo.Value.Description); @@ -40,17 +55,18 @@ if (demoDict.TryGetValue(key.Key, out Demo? chosendemo)) { Console.WriteLine(); - Console.WriteLine("Running: " + chosendemo.Description); + Console.WriteLine($"Running: {chosendemo.Description}"); if (chosendemo is null) { throw new Exception("No such demo!"); } - await chosendemo.Method(bleaddress); + await chosendemo.Method(); } else { - Console.WriteLine(key.Key + " -> No such test. Remember " + ConsoleKey.Escape + " -> Quit!"); + Console.WriteLine($"{key} -> No such test. Remember {ConsoleKey.Escape} -> Quit!"); } + await Task.Delay(200); Console.WriteLine("---------------------------------------------"); } } diff --git a/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs index 6ec1d2ce..4b3ab973 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/WindowsDemos.cs @@ -36,10 +36,11 @@ private void Write(string format, params object[] args) writer?.Invoke(format, args); } - public async Task Connect_Disconnect(string blehexaddress) + public async Task Connect_Disconnect() { - ulong bleaddress = blehexaddress.ToBleDeviceGuid().ToBleAddress(); - WBluetooth.BluetoothLEDevice dev = await WBluetooth.BluetoothLEDevice.FromBluetoothAddressAsync(bleaddress); + string bleaddress = BleAddressSelector.GetBleAddress(); + ulong bleaddressUl = bleaddress.ToBleDeviceGuid().ToBleAddress(); + WBluetooth.BluetoothLEDevice dev = await WBluetooth.BluetoothLEDevice.FromBluetoothAddressAsync(bleaddressUl); dev.RequestPreferredConnectionParameters(BluetoothLEPreferredConnectionParameters.ThroughputOptimized); dev.ConnectionStatusChanged += Dev_ConnectionStatusChanged; var devId = BluetoothDeviceId.FromId(dev.DeviceId); @@ -78,8 +79,9 @@ public async Task Connect_Disconnect(string blehexaddress) Write("Disconnected in {0} ms", stopwatch.ElapsedMilliseconds); } - public async Task UnPairAllBleDevices(string bleaddress = "") + public async Task UnPairAllBleDevices() { + var bleaddress = BleAddressSelector.GetBleAddress(); string aqsFilter = BluetoothLEDevice.GetDeviceSelector(); var collection = await DeviceInformation.FindAllAsync(aqsFilter); foreach (DeviceInformation di in collection) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 1e19cd7e..7c9c9a46 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -178,7 +178,7 @@ public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceG public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null) { - string pairedSelector = BluetoothDevice.GetDeviceSelectorFromPairingState(true); + string pairedSelector = BluetoothLEDevice.GetDeviceSelectorFromPairingState(true); DeviceInformationCollection pairedDevices = DeviceInformation.FindAllAsync(pairedSelector).GetAwaiter().GetResult(); List devlist = ConnectedDevices.ToList(); List ids = ConnectedDevices.Select(d => d.Id).ToList(); From 722b300a6949fea9e0fd10bf6462f77de098e334 Mon Sep 17 00:00:00 2001 From: James Hughes Date: Thu, 1 Feb 2024 21:33:01 +0000 Subject: [PATCH 468/527] Added services for citysports treadmill --- Source/Plugin.BLE/Shared/KnownCharacteristics.cs | 2 ++ Source/Plugin.BLE/Shared/KnownServices.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/Source/Plugin.BLE/Shared/KnownCharacteristics.cs b/Source/Plugin.BLE/Shared/KnownCharacteristics.cs index 86c38c9f..b760f198 100644 --- a/Source/Plugin.BLE/Shared/KnownCharacteristics.cs +++ b/Source/Plugin.BLE/Shared/KnownCharacteristics.cs @@ -109,6 +109,7 @@ public static KnownCharacteristic Lookup(Guid id) new KnownCharacteristic("Time Update State", Guid.ParseExact("00002a17-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Time with DST", Guid.ParseExact("00002a11-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Time Zone", Guid.ParseExact("00002a0e-0000-1000-8000-00805f9b34fb", "d")), + new KnownCharacteristic("Treadmill Control", Guid.ParseExact("00002ad9-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Tx Power Level", Guid.ParseExact("00002a07-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Unread Alert Status", Guid.ParseExact("00002a45-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Aerobic Heart Rate Lower Limit", Guid.ParseExact("00002a7e-0000-1000-8000-00805f9b34fb", "d")), @@ -174,6 +175,7 @@ public static KnownCharacteristic Lookup(Guid id) new KnownCharacteristic("Weight Measurement", Guid.ParseExact("00002a9d-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Weight Scale Feature", Guid.ParseExact("00002a9e-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Wind Chill", Guid.ParseExact("00002a79-0000-1000-8000-00805f9b34fb", "d")), + new KnownCharacteristic("Workout Status", Guid.ParseExact("00002acd-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Battery Level State", Guid.ParseExact("00002a1b-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Battery Power State", Guid.ParseExact("00002a1a-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Latitude", Guid.ParseExact("00002a2d-0000-1000-8000-00805f9b34fb", "d")), diff --git a/Source/Plugin.BLE/Shared/KnownServices.cs b/Source/Plugin.BLE/Shared/KnownServices.cs index 56d9ee95..9693be62 100644 --- a/Source/Plugin.BLE/Shared/KnownServices.cs +++ b/Source/Plugin.BLE/Shared/KnownServices.cs @@ -63,6 +63,7 @@ public static KnownService Lookup(Guid id) new KnownService("TI SensorTag Connection Control", Guid.ParseExact("f000ccc0-0451-4000-b000-000000000000", "d")), new KnownService("TI SensorTag OvertheAir Download", Guid.ParseExact("f000ffc0-0451-4000-b000-000000000000", "d")), new KnownService("TXRX_SERV_UUID RedBearLabs Biscuit Service", Guid.ParseExact("713d0000-503e-4c75-ba94-3148f18d941e", "d")), + new KnownService("CITYSPORTS Treadmill", Guid.ParseExact("00001826-0000-1000-8000-00805f9b34fb", "d")), }.AsReadOnly(); } } \ No newline at end of file From c63a29b7792a7769b803812bf460f73060b7838a Mon Sep 17 00:00:00 2001 From: James H Date: Sat, 3 Feb 2024 22:24:32 +0000 Subject: [PATCH 469/527] Adjusted name to represent assigned number --- Source/Plugin.BLE/Shared/KnownServices.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/KnownServices.cs b/Source/Plugin.BLE/Shared/KnownServices.cs index 9693be62..c6a04c44 100644 --- a/Source/Plugin.BLE/Shared/KnownServices.cs +++ b/Source/Plugin.BLE/Shared/KnownServices.cs @@ -63,7 +63,7 @@ public static KnownService Lookup(Guid id) new KnownService("TI SensorTag Connection Control", Guid.ParseExact("f000ccc0-0451-4000-b000-000000000000", "d")), new KnownService("TI SensorTag OvertheAir Download", Guid.ParseExact("f000ffc0-0451-4000-b000-000000000000", "d")), new KnownService("TXRX_SERV_UUID RedBearLabs Biscuit Service", Guid.ParseExact("713d0000-503e-4c75-ba94-3148f18d941e", "d")), - new KnownService("CITYSPORTS Treadmill", Guid.ParseExact("00001826-0000-1000-8000-00805f9b34fb", "d")), + new KnownService("Fitness Machine Service", Guid.ParseExact("00001826-0000-1000-8000-00805f9b34fb", "d")), }.AsReadOnly(); } } \ No newline at end of file From 8037e799e6796283529c3fecd7581733733ca8ed Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 5 Feb 2024 22:06:24 +0100 Subject: [PATCH 470/527] fix names of new characteristics * according to Assigned Numbers document: https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Assigned_Numbers/out/en/Assigned_Numbers.pdf * and enforce alphabetical ordering --- Source/Plugin.BLE/Shared/KnownCharacteristics.cs | 4 ++-- Source/Plugin.BLE/Shared/KnownServices.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Plugin.BLE/Shared/KnownCharacteristics.cs b/Source/Plugin.BLE/Shared/KnownCharacteristics.cs index b760f198..3fd4ae28 100644 --- a/Source/Plugin.BLE/Shared/KnownCharacteristics.cs +++ b/Source/Plugin.BLE/Shared/KnownCharacteristics.cs @@ -57,6 +57,7 @@ public static KnownCharacteristic Lookup(Guid id) new KnownCharacteristic("DST Offset", Guid.ParseExact("00002a0d-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Exact Time 256", Guid.ParseExact("00002a0c-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Firmware Revision String", Guid.ParseExact("00002a26-0000-1000-8000-00805f9b34fb", "d")), + new KnownCharacteristic("Fitness Machine Control Point", Guid.ParseExact("00002ad9-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Glucose Feature", Guid.ParseExact("00002a51-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Glucose Measurement", Guid.ParseExact("00002a18-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Glucose Measure Context", Guid.ParseExact("00002a34-0000-1000-8000-00805f9b34fb", "d")), @@ -109,7 +110,7 @@ public static KnownCharacteristic Lookup(Guid id) new KnownCharacteristic("Time Update State", Guid.ParseExact("00002a17-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Time with DST", Guid.ParseExact("00002a11-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Time Zone", Guid.ParseExact("00002a0e-0000-1000-8000-00805f9b34fb", "d")), - new KnownCharacteristic("Treadmill Control", Guid.ParseExact("00002ad9-0000-1000-8000-00805f9b34fb", "d")), + new KnownCharacteristic("Treadmill Data", Guid.ParseExact("00002acd-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Tx Power Level", Guid.ParseExact("00002a07-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Unread Alert Status", Guid.ParseExact("00002a45-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Aerobic Heart Rate Lower Limit", Guid.ParseExact("00002a7e-0000-1000-8000-00805f9b34fb", "d")), @@ -175,7 +176,6 @@ public static KnownCharacteristic Lookup(Guid id) new KnownCharacteristic("Weight Measurement", Guid.ParseExact("00002a9d-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Weight Scale Feature", Guid.ParseExact("00002a9e-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Wind Chill", Guid.ParseExact("00002a79-0000-1000-8000-00805f9b34fb", "d")), - new KnownCharacteristic("Workout Status", Guid.ParseExact("00002acd-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Battery Level State", Guid.ParseExact("00002a1b-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Battery Power State", Guid.ParseExact("00002a1a-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Latitude", Guid.ParseExact("00002a2d-0000-1000-8000-00805f9b34fb", "d")), diff --git a/Source/Plugin.BLE/Shared/KnownServices.cs b/Source/Plugin.BLE/Shared/KnownServices.cs index c6a04c44..543f4784 100644 --- a/Source/Plugin.BLE/Shared/KnownServices.cs +++ b/Source/Plugin.BLE/Shared/KnownServices.cs @@ -37,6 +37,7 @@ public static KnownService Lookup(Guid id) new KnownService("Cycling Power", Guid.ParseExact("00001818-0000-1000-8000-00805f9b34fb", "d")), new KnownService("Cycling Speed and Cadence", Guid.ParseExact("00001816-0000-1000-8000-00805f9b34fb", "d")), new KnownService("Device Information", Guid.ParseExact("0000180a-0000-1000-8000-00805f9b34fb", "d")), + new KnownService("Fitness Machine Service", Guid.ParseExact("00001826-0000-1000-8000-00805f9b34fb", "d")), new KnownService("Generic Access", Guid.ParseExact("00001800-0000-1000-8000-00805f9b34fb", "d")), new KnownService("Generic Attribute", Guid.ParseExact("00001801-0000-1000-8000-00805f9b34fb", "d")), new KnownService("Glucose", Guid.ParseExact("00001808-0000-1000-8000-00805f9b34fb", "d")), @@ -63,7 +64,6 @@ public static KnownService Lookup(Guid id) new KnownService("TI SensorTag Connection Control", Guid.ParseExact("f000ccc0-0451-4000-b000-000000000000", "d")), new KnownService("TI SensorTag OvertheAir Download", Guid.ParseExact("f000ffc0-0451-4000-b000-000000000000", "d")), new KnownService("TXRX_SERV_UUID RedBearLabs Biscuit Service", Guid.ParseExact("713d0000-503e-4c75-ba94-3148f18d941e", "d")), - new KnownService("Fitness Machine Service", Guid.ParseExact("00001826-0000-1000-8000-00805f9b34fb", "d")), }.AsReadOnly(); } } \ No newline at end of file From d60553b586cf09a3d136556b8e9c6ae069c62395 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 5 Feb 2024 22:29:54 +0100 Subject: [PATCH 471/527] add more missing characteristics from #804 --- Source/Plugin.BLE/Shared/KnownCharacteristics.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/Plugin.BLE/Shared/KnownCharacteristics.cs b/Source/Plugin.BLE/Shared/KnownCharacteristics.cs index 3fd4ae28..5baf48ec 100644 --- a/Source/Plugin.BLE/Shared/KnownCharacteristics.cs +++ b/Source/Plugin.BLE/Shared/KnownCharacteristics.cs @@ -58,6 +58,8 @@ public static KnownCharacteristic Lookup(Guid id) new KnownCharacteristic("Exact Time 256", Guid.ParseExact("00002a0c-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Firmware Revision String", Guid.ParseExact("00002a26-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Fitness Machine Control Point", Guid.ParseExact("00002ad9-0000-1000-8000-00805f9b34fb", "d")), + new KnownCharacteristic("Fitness Machine Feature", Guid.ParseExact("00002acc-0000-1000-8000-00805f9b34fb", "d")), + new KnownCharacteristic("Fitness Machine Status", Guid.ParseExact("00002ada-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Glucose Feature", Guid.ParseExact("00002a51-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Glucose Measurement", Guid.ParseExact("00002a18-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Glucose Measure Context", Guid.ParseExact("00002a34-0000-1000-8000-00805f9b34fb", "d")), @@ -100,6 +102,7 @@ public static KnownCharacteristic Lookup(Guid id) new KnownCharacteristic("Service Changed", Guid.ParseExact("00002a05-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Software Revision String", Guid.ParseExact("00002a28-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Supported New Alert Category", Guid.ParseExact("00002a47-0000-1000-8000-00805f9b34fb", "d")), + new KnownCharacteristic("Supported Speed Range", Guid.ParseExact("00002ad4-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Supported Unread Alert Category", Guid.ParseExact("00002a48-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("System ID", Guid.ParseExact("00002a23-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Temperature Measurement", Guid.ParseExact("00002a1c-0000-1000-8000-00805f9b34fb", "d")), @@ -110,6 +113,7 @@ public static KnownCharacteristic Lookup(Guid id) new KnownCharacteristic("Time Update State", Guid.ParseExact("00002a17-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Time with DST", Guid.ParseExact("00002a11-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Time Zone", Guid.ParseExact("00002a0e-0000-1000-8000-00805f9b34fb", "d")), + new KnownCharacteristic("Training Status", Guid.ParseExact("00002ad3-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Treadmill Data", Guid.ParseExact("00002acd-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Tx Power Level", Guid.ParseExact("00002a07-0000-1000-8000-00805f9b34fb", "d")), new KnownCharacteristic("Unread Alert Status", Guid.ParseExact("00002a45-0000-1000-8000-00805f9b34fb", "d")), From ca2511e8c2c78cc440fe6d533e7bd480157636a8 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 5 Feb 2024 23:15:57 +0100 Subject: [PATCH 472/527] KnownServices: use GuidExtension.UuidFromPartial and improve formatting * for better readability --- Source/Plugin.BLE/Shared/KnownServices.cs | 67 ++++++++++++----------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/Source/Plugin.BLE/Shared/KnownServices.cs b/Source/Plugin.BLE/Shared/KnownServices.cs index 543f4784..5d38e964 100644 --- a/Source/Plugin.BLE/Shared/KnownServices.cs +++ b/Source/Plugin.BLE/Shared/KnownServices.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Plugin.BLE.Abstractions.Extensions; namespace Plugin.BLE.Abstractions { @@ -30,39 +31,41 @@ public static KnownService Lookup(Guid id) /// public static IReadOnlyList Services { get; } = new List { - new KnownService("Alert Notification Service", Guid.ParseExact("00001811-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Battery Service", Guid.ParseExact("0000180f-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Blood Pressure", Guid.ParseExact("00001810-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Current Time Service", Guid.ParseExact("00001805-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Cycling Power", Guid.ParseExact("00001818-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Cycling Speed and Cadence", Guid.ParseExact("00001816-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Device Information", Guid.ParseExact("0000180a-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Fitness Machine Service", Guid.ParseExact("00001826-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Generic Access", Guid.ParseExact("00001800-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Generic Attribute", Guid.ParseExact("00001801-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Glucose", Guid.ParseExact("00001808-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Health Thermometer", Guid.ParseExact("00001809-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Heart Rate", Guid.ParseExact("0000180d-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Human Interface Device", Guid.ParseExact("00001812-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Immediate Alert", Guid.ParseExact("00001802-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Link Loss", Guid.ParseExact("00001803-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Location and Navigation", Guid.ParseExact("00001819-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Next DST Change Service", Guid.ParseExact("00001807-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Phone Alert Status Service", Guid.ParseExact("0000180e-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Reference Time Update Service", Guid.ParseExact("00001806-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Running Speed and Cadence", Guid.ParseExact("00001814-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("Scan Parameters", Guid.ParseExact("00001813-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("TX Power", Guid.ParseExact("00001804-0000-1000-8000-00805f9b34fb", "d")), - new KnownService("TI SensorTag Smart Keys", Guid.ParseExact("0000ffe0-0000-1000-8000-00805f9b34fb", "d")), + new KnownService("Alert Notification Service", GuidExtension.UuidFromPartial(0x1811)), + new KnownService("Battery Service", GuidExtension.UuidFromPartial(0x180f)), + new KnownService("Blood Pressure", GuidExtension.UuidFromPartial(0x1810)), + new KnownService("Current Time Service", GuidExtension.UuidFromPartial(0x1805)), + new KnownService("Cycling Power", GuidExtension.UuidFromPartial(0x1818)), + new KnownService("Cycling Speed and Cadence", GuidExtension.UuidFromPartial(0x1816)), + new KnownService("Device Information", GuidExtension.UuidFromPartial(0x180a)), + new KnownService("Fitness Machine Service", GuidExtension.UuidFromPartial(0x1826)), + new KnownService("Generic Access", GuidExtension.UuidFromPartial(0x1800)), + new KnownService("Generic Attribute", GuidExtension.UuidFromPartial(0x1801)), + new KnownService("Glucose", GuidExtension.UuidFromPartial(0x1808)), + new KnownService("Health Thermometer", GuidExtension.UuidFromPartial(0x1809)), + new KnownService("Heart Rate", GuidExtension.UuidFromPartial(0x180d)), + new KnownService("Human Interface Device", GuidExtension.UuidFromPartial(0x1812)), + new KnownService("Immediate Alert", GuidExtension.UuidFromPartial(0x1802)), + new KnownService("Link Loss", GuidExtension.UuidFromPartial(0x1803)), + new KnownService("Location and Navigation", GuidExtension.UuidFromPartial(0x1819)), + new KnownService("Next DST Change Service", GuidExtension.UuidFromPartial(0x1807)), + new KnownService("Phone Alert Status Service", GuidExtension.UuidFromPartial(0x180e)), + new KnownService("Reference Time Update Service", GuidExtension.UuidFromPartial(0x1806)), + new KnownService("Running Speed and Cadence", GuidExtension.UuidFromPartial(0x1814)), + new KnownService("Scan Parameters", GuidExtension.UuidFromPartial(0x1813)), + new KnownService("TX Power", GuidExtension.UuidFromPartial(0x1804)), + + new KnownService("TI SensorTag Smart Keys", Guid.ParseExact("0000ffe0-0000-1000-8000-00805f9b34fb", "d")), new KnownService("TI SensorTag Infrared Thermometer", Guid.ParseExact("f000aa00-0451-4000-b000-000000000000", "d")), - new KnownService("TI SensorTag Accelerometer", Guid.ParseExact("f000aa10-0451-4000-b000-000000000000", "d")), - new KnownService("TI SensorTag Humidity", Guid.ParseExact("f000aa20-0451-4000-b000-000000000000", "d")), - new KnownService("TI SensorTag Magnometer", Guid.ParseExact("f000aa30-0451-4000-b000-000000000000", "d")), - new KnownService("TI SensorTag Barometer", Guid.ParseExact("f000aa40-0451-4000-b000-000000000000", "d")), - new KnownService("TI SensorTag Gyroscope", Guid.ParseExact("f000aa50-0451-4000-b000-000000000000", "d")), - new KnownService("TI SensorTag Test", Guid.ParseExact("f000aa60-0451-4000-b000-000000000000", "d")), - new KnownService("TI SensorTag Connection Control", Guid.ParseExact("f000ccc0-0451-4000-b000-000000000000", "d")), - new KnownService("TI SensorTag OvertheAir Download", Guid.ParseExact("f000ffc0-0451-4000-b000-000000000000", "d")), + new KnownService("TI SensorTag Accelerometer", Guid.ParseExact("f000aa10-0451-4000-b000-000000000000", "d")), + new KnownService("TI SensorTag Humidity", Guid.ParseExact("f000aa20-0451-4000-b000-000000000000", "d")), + new KnownService("TI SensorTag Magnometer", Guid.ParseExact("f000aa30-0451-4000-b000-000000000000", "d")), + new KnownService("TI SensorTag Barometer", Guid.ParseExact("f000aa40-0451-4000-b000-000000000000", "d")), + new KnownService("TI SensorTag Gyroscope", Guid.ParseExact("f000aa50-0451-4000-b000-000000000000", "d")), + new KnownService("TI SensorTag Test", Guid.ParseExact("f000aa60-0451-4000-b000-000000000000", "d")), + new KnownService("TI SensorTag Connection Control", Guid.ParseExact("f000ccc0-0451-4000-b000-000000000000", "d")), + new KnownService("TI SensorTag OvertheAir Download", Guid.ParseExact("f000ffc0-0451-4000-b000-000000000000", "d")), + new KnownService("TXRX_SERV_UUID RedBearLabs Biscuit Service", Guid.ParseExact("713d0000-503e-4c75-ba94-3148f18d941e", "d")), }.AsReadOnly(); } From ab570be1c15452b60ecab28251b87dcf370c9e6f Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 5 Feb 2024 23:29:23 +0100 Subject: [PATCH 473/527] KnownServices: remove the word "Service" from all service names * for consistency * most of them don't have it * since the names are used in the "KnownService" class, it should be clear that they refer to a service --- Source/Plugin.BLE/Shared/KnownServices.cs | 50 +++++++++++------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Source/Plugin.BLE/Shared/KnownServices.cs b/Source/Plugin.BLE/Shared/KnownServices.cs index 5d38e964..724beb38 100644 --- a/Source/Plugin.BLE/Shared/KnownServices.cs +++ b/Source/Plugin.BLE/Shared/KnownServices.cs @@ -31,29 +31,29 @@ public static KnownService Lookup(Guid id) /// public static IReadOnlyList Services { get; } = new List { - new KnownService("Alert Notification Service", GuidExtension.UuidFromPartial(0x1811)), - new KnownService("Battery Service", GuidExtension.UuidFromPartial(0x180f)), - new KnownService("Blood Pressure", GuidExtension.UuidFromPartial(0x1810)), - new KnownService("Current Time Service", GuidExtension.UuidFromPartial(0x1805)), - new KnownService("Cycling Power", GuidExtension.UuidFromPartial(0x1818)), - new KnownService("Cycling Speed and Cadence", GuidExtension.UuidFromPartial(0x1816)), - new KnownService("Device Information", GuidExtension.UuidFromPartial(0x180a)), - new KnownService("Fitness Machine Service", GuidExtension.UuidFromPartial(0x1826)), - new KnownService("Generic Access", GuidExtension.UuidFromPartial(0x1800)), - new KnownService("Generic Attribute", GuidExtension.UuidFromPartial(0x1801)), - new KnownService("Glucose", GuidExtension.UuidFromPartial(0x1808)), - new KnownService("Health Thermometer", GuidExtension.UuidFromPartial(0x1809)), - new KnownService("Heart Rate", GuidExtension.UuidFromPartial(0x180d)), - new KnownService("Human Interface Device", GuidExtension.UuidFromPartial(0x1812)), - new KnownService("Immediate Alert", GuidExtension.UuidFromPartial(0x1802)), - new KnownService("Link Loss", GuidExtension.UuidFromPartial(0x1803)), - new KnownService("Location and Navigation", GuidExtension.UuidFromPartial(0x1819)), - new KnownService("Next DST Change Service", GuidExtension.UuidFromPartial(0x1807)), - new KnownService("Phone Alert Status Service", GuidExtension.UuidFromPartial(0x180e)), - new KnownService("Reference Time Update Service", GuidExtension.UuidFromPartial(0x1806)), - new KnownService("Running Speed and Cadence", GuidExtension.UuidFromPartial(0x1814)), - new KnownService("Scan Parameters", GuidExtension.UuidFromPartial(0x1813)), - new KnownService("TX Power", GuidExtension.UuidFromPartial(0x1804)), + new KnownService("Alert Notification", GuidExtension.UuidFromPartial(0x1811)), + new KnownService("Battery", GuidExtension.UuidFromPartial(0x180f)), + new KnownService("Blood Pressure", GuidExtension.UuidFromPartial(0x1810)), + new KnownService("Current Time", GuidExtension.UuidFromPartial(0x1805)), + new KnownService("Cycling Power", GuidExtension.UuidFromPartial(0x1818)), + new KnownService("Cycling Speed and Cadence", GuidExtension.UuidFromPartial(0x1816)), + new KnownService("Device Information", GuidExtension.UuidFromPartial(0x180a)), + new KnownService("Fitness Machine", GuidExtension.UuidFromPartial(0x1826)), + new KnownService("Generic Access", GuidExtension.UuidFromPartial(0x1800)), + new KnownService("Generic Attribute", GuidExtension.UuidFromPartial(0x1801)), + new KnownService("Glucose", GuidExtension.UuidFromPartial(0x1808)), + new KnownService("Health Thermometer", GuidExtension.UuidFromPartial(0x1809)), + new KnownService("Heart Rate", GuidExtension.UuidFromPartial(0x180d)), + new KnownService("Human Interface Device", GuidExtension.UuidFromPartial(0x1812)), + new KnownService("Immediate Alert", GuidExtension.UuidFromPartial(0x1802)), + new KnownService("Link Loss", GuidExtension.UuidFromPartial(0x1803)), + new KnownService("Location and Navigation", GuidExtension.UuidFromPartial(0x1819)), + new KnownService("Next DST Change", GuidExtension.UuidFromPartial(0x1807)), + new KnownService("Phone Alert Status", GuidExtension.UuidFromPartial(0x180e)), + new KnownService("Reference Time Update", GuidExtension.UuidFromPartial(0x1806)), + new KnownService("Running Speed and Cadence", GuidExtension.UuidFromPartial(0x1814)), + new KnownService("Scan Parameters", GuidExtension.UuidFromPartial(0x1813)), + new KnownService("TX Power", GuidExtension.UuidFromPartial(0x1804)), new KnownService("TI SensorTag Smart Keys", Guid.ParseExact("0000ffe0-0000-1000-8000-00805f9b34fb", "d")), new KnownService("TI SensorTag Infrared Thermometer", Guid.ParseExact("f000aa00-0451-4000-b000-000000000000", "d")), @@ -66,7 +66,7 @@ public static KnownService Lookup(Guid id) new KnownService("TI SensorTag Connection Control", Guid.ParseExact("f000ccc0-0451-4000-b000-000000000000", "d")), new KnownService("TI SensorTag OvertheAir Download", Guid.ParseExact("f000ffc0-0451-4000-b000-000000000000", "d")), - new KnownService("TXRX_SERV_UUID RedBearLabs Biscuit Service", Guid.ParseExact("713d0000-503e-4c75-ba94-3148f18d941e", "d")), + new KnownService("TXRX_SERV_UUID RedBearLabs Biscuit", Guid.ParseExact("713d0000-503e-4c75-ba94-3148f18d941e", "d")), }.AsReadOnly(); } -} \ No newline at end of file +} From 744d518187408be1240c0d5cfb743caa1c0211e4 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 5 Feb 2024 23:43:45 +0100 Subject: [PATCH 474/527] KnownServices: add more services from Assigned Numbers * all listed services up to 0x1826 are included now --- Source/Plugin.BLE/Shared/KnownServices.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Source/Plugin.BLE/Shared/KnownServices.cs b/Source/Plugin.BLE/Shared/KnownServices.cs index 724beb38..305443d5 100644 --- a/Source/Plugin.BLE/Shared/KnownServices.cs +++ b/Source/Plugin.BLE/Shared/KnownServices.cs @@ -32,28 +32,41 @@ public static KnownService Lookup(Guid id) public static IReadOnlyList Services { get; } = new List { new KnownService("Alert Notification", GuidExtension.UuidFromPartial(0x1811)), + new KnownService("Automation IO", GuidExtension.UuidFromPartial(0x1815)), new KnownService("Battery", GuidExtension.UuidFromPartial(0x180f)), new KnownService("Blood Pressure", GuidExtension.UuidFromPartial(0x1810)), + new KnownService("Body Composition", GuidExtension.UuidFromPartial(0x181b)), + new KnownService("Bond Management", GuidExtension.UuidFromPartial(0x181e)), + new KnownService("Continuous Glucose", GuidExtension.UuidFromPartial(0x181f)), new KnownService("Current Time", GuidExtension.UuidFromPartial(0x1805)), new KnownService("Cycling Power", GuidExtension.UuidFromPartial(0x1818)), new KnownService("Cycling Speed and Cadence", GuidExtension.UuidFromPartial(0x1816)), new KnownService("Device Information", GuidExtension.UuidFromPartial(0x180a)), + new KnownService("Environmental Sensing", GuidExtension.UuidFromPartial(0x181a)), new KnownService("Fitness Machine", GuidExtension.UuidFromPartial(0x1826)), new KnownService("Generic Access", GuidExtension.UuidFromPartial(0x1800)), new KnownService("Generic Attribute", GuidExtension.UuidFromPartial(0x1801)), new KnownService("Glucose", GuidExtension.UuidFromPartial(0x1808)), new KnownService("Health Thermometer", GuidExtension.UuidFromPartial(0x1809)), new KnownService("Heart Rate", GuidExtension.UuidFromPartial(0x180d)), + new KnownService("HTTP Proxy", GuidExtension.UuidFromPartial(0x1823)), new KnownService("Human Interface Device", GuidExtension.UuidFromPartial(0x1812)), new KnownService("Immediate Alert", GuidExtension.UuidFromPartial(0x1802)), + new KnownService("Indoor Positioning", GuidExtension.UuidFromPartial(0x1821)), + new KnownService("Internet Protocol Support", GuidExtension.UuidFromPartial(0x1820)), new KnownService("Link Loss", GuidExtension.UuidFromPartial(0x1803)), new KnownService("Location and Navigation", GuidExtension.UuidFromPartial(0x1819)), new KnownService("Next DST Change", GuidExtension.UuidFromPartial(0x1807)), + new KnownService("Object Transfer", GuidExtension.UuidFromPartial(0x1825)), new KnownService("Phone Alert Status", GuidExtension.UuidFromPartial(0x180e)), + new KnownService("Pulse Oximeter", GuidExtension.UuidFromPartial(0x1822)), new KnownService("Reference Time Update", GuidExtension.UuidFromPartial(0x1806)), new KnownService("Running Speed and Cadence", GuidExtension.UuidFromPartial(0x1814)), new KnownService("Scan Parameters", GuidExtension.UuidFromPartial(0x1813)), + new KnownService("Transport Discovery", GuidExtension.UuidFromPartial(0x1824)), new KnownService("TX Power", GuidExtension.UuidFromPartial(0x1804)), + new KnownService("User Data", GuidExtension.UuidFromPartial(0x181c)), + new KnownService("Weight Scale", GuidExtension.UuidFromPartial(0x181d)), new KnownService("TI SensorTag Smart Keys", Guid.ParseExact("0000ffe0-0000-1000-8000-00805f9b34fb", "d")), new KnownService("TI SensorTag Infrared Thermometer", Guid.ParseExact("f000aa00-0451-4000-b000-000000000000", "d")), From dd470ba24cc30c152216a3e513bc97bd76e28e98 Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Wed, 7 Feb 2024 17:22:16 +0100 Subject: [PATCH 475/527] Fixed ConnectionLost -> Connect --- .../BLE.Client.WinConsole/PluginDemos.cs | 124 +++++++++++++++++- .../BLE.Client.WinConsole/Program.cs | 3 + Source/Plugin.BLE/Windows/Adapter.cs | 7 +- 3 files changed, 127 insertions(+), 7 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs index 78d4769c..e065b27b 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs @@ -31,17 +31,29 @@ public PluginDemos(Action? writer = null) Adapter = CrossBluetoothLE.Current.Adapter; Adapter.DeviceConnected += Adapter_DeviceConnected; Adapter.DeviceDisconnected += Adapter_DeviceDisconnected; + Adapter.DeviceConnectionLost += Adapter_DeviceConnectionLost; + Adapter.DeviceConnectionError += Adapter_DeviceConnectionError; this.writer = writer; } + private void Adapter_DeviceConnectionError(object? sender, Plugin.BLE.Abstractions.EventArgs.DeviceErrorEventArgs e) + { + Write($"Adapter_DeviceConnectionError {e.Device.Id.ToHexBleAddress()} with name: {e.Device.Name}"); + } + + private void Adapter_DeviceConnectionLost(object? sender, Plugin.BLE.Abstractions.EventArgs.DeviceErrorEventArgs e) + { + Write($"Adapter_DeviceConnectionLost {e.Device.Id.ToHexBleAddress()} with name: {e.Device.Name}"); + } + private void Adapter_DeviceDisconnected(object? sender, Plugin.BLE.Abstractions.EventArgs.DeviceEventArgs e) { - Write($"Adapter_DeviceDisconnected {e.Device.Id}"); + Write($"Adapter_DeviceDisconnected {e.Device.Id.ToHexBleAddress()} with name: {e.Device.Name}"); } private void Adapter_DeviceConnected(object? sender, Plugin.BLE.Abstractions.EventArgs.DeviceEventArgs e) { - Write($"Adapter_DeviceConnected {e.Device.Id}"); + Write($"Adapter_DeviceConnected {e.Device.Id.ToHexBleAddress()} with name: {e.Device.Name}"); } private void Write(string format, params object[] args) @@ -69,6 +81,114 @@ public async Task Connect_Disconnect() Write("Test_Connect_Disconnect done"); } + public async Task Connect_Read_Services_Disconnect_5X() + { + string bleaddress = BleAddressSelector.GetBleAddress(); + var id = bleaddress.ToBleDeviceGuid(); + var connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.Balanced); + + using (IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id, connectParameters)) + { + for (int i = 0; i < 5; i++) + { + await Task.Delay(100); + Write($"---------------- {i} ------------------"); + if (dev.State != DeviceState.Connected) + { + Write("Connecting"); + await Adapter.ConnectToDeviceAsync(dev); + } + Write("Reading services"); + + var services = await dev.GetServicesAsync(); + List charlist = new List(); + foreach (var service in services) + { + var characteristics = await service.GetCharacteristicsAsync(); + charlist.AddRange(characteristics); + } + + foreach (var service in services) + { + service.Dispose(); + } + charlist.Clear(); + Write("Waiting 3 secs"); + await Task.Delay(3000); + Write("Disconnecting"); + await Adapter.DisconnectDeviceAsync(dev); + Write("Test_Connect_Disconnect done"); + } + } + } + + public async Task Connect_Read_Services_Dispose_5X() + { + string bleaddress = BleAddressSelector.GetBleAddress(); + var id = bleaddress.ToBleDeviceGuid(); + var connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.Balanced); + for (int i = 0; i < 5; i++) + { + await Task.Delay(100); + Write($"---------------- {i} ------------------"); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id, connectParameters); + Write("Reading services"); + var services = await dev.GetServicesAsync(); + List charlist = new List(); + foreach (var service in services) + { + var characteristics = await service.GetCharacteristicsAsync(); + charlist.AddRange(characteristics); + } + + foreach (var service in services) + { + service.Dispose(); + } + charlist.Clear(); + Write("Waiting 3 secs"); + await Task.Delay(3000); + //await Adapter.DisconnectDeviceAsync(dev); + Write("Disposing"); + dev.Dispose(); + } + } + + public async Task Connect_ConnectionLost_Connect() + { + string bleaddress = BleAddressSelector.GetBleAddress(); + var id = bleaddress.ToBleDeviceGuid(); + var connectParameters = new ConnectParameters(connectionParameterSet: ConnectionParameterSet.Balanced); + ConsoleKey consoleKey = ConsoleKey.None; + using (IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id, connectParameters)) + { + while (consoleKey != ConsoleKey.Escape) + { + Write("Reading services"); + var services = await dev.GetServicesAsync(); + List charlist = new List(); + foreach (var service in services) + { + var characteristics = await service.GetCharacteristicsAsync(); + charlist.AddRange(characteristics); + } + await Task.Delay(1000); + Console.WriteLine(new string('-', 80)); + Console.WriteLine("Now powercycle the device... Hit any key when the device is booted up again (Escape to quit)"); + Console.WriteLine(new string('-', 80)); + consoleKey = Console.ReadKey().Key; + await Adapter.ConnectToDeviceAsync(dev, connectParameters); + Write("Waiting 3 secs"); + await Task.Delay(3000); + foreach (var service in services) + { + service.Dispose(); + } + charlist.Clear(); + } + } + } + public async Task Connect_Change_Parameters_Disconnect() { string bleaddress = BleAddressSelector.GetBleAddress(); diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index 1fe8f9d2..9bed9006 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -22,6 +22,9 @@ {ConsoleKey.D4, new Demo("Pair -> Connect -> Disconnect", ppemos.Pair_Connect_Disconnect) }, {ConsoleKey.D5, new Demo("Connect -> Change Parameters -> Disconnect", ppemos.Connect_Change_Parameters_Disconnect) }, {ConsoleKey.D6, new Demo("Run GetSystemConnectedOrPairedDevices", ppemos.RunGetSystemConnectedOrPairedDevices) }, + {ConsoleKey.D7, new Demo("5X: Connect -> Read services -> Disconnect", ppemos.Connect_Read_Services_Disconnect_5X) }, + {ConsoleKey.D8, new Demo("5X: Connect -> Read services -> Dispose", ppemos.Connect_Read_Services_Dispose_5X) }, + {ConsoleKey.D9, new Demo("Connect -> Loop: ConnectionLost -> Connect", ppemos.Connect_ConnectionLost_Connect) }, {ConsoleKey.A, new Demo("Pure Windows: Connect -> Disconnect", wdemos.Connect_Disconnect) }, {ConsoleKey.S, new Demo("Pure Windows: Unpair all BLE devices", wdemos.UnPairAllBleDevices) }, }; diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 7c9c9a46..4df77ed2 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -144,11 +144,8 @@ private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, obje } // fire the correct event (DeviceDisconnected or DeviceConnectionLost) - HandleDisconnectedDevice(isNormalDisconnect, disconnectedDevice); - if (isNormalDisconnect) - { - nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; - } + HandleDisconnectedDevice(isNormalDisconnect, disconnectedDevice); + nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; } } From f4866818bbd7183fe38fc87f79edca9a52ce3d9b Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Wed, 7 Feb 2024 22:52:31 +0100 Subject: [PATCH 476/527] Simplified adaptor to handle DeviceConnectionLost vs DeviceDisconnected --- Source/Plugin.BLE/Windows/Adapter.cs | 50 +++++++++++----------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 4df77ed2..de1275bf 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -19,10 +19,10 @@ public class Adapter : AdapterBase private BluetoothLEAdvertisementWatcher _bleWatcher; /// - /// Registry used to store device instances for pending operations : disconnect + /// Registry used to store device instances for pending disconnect operations /// Helps to detect connection lost events. /// - private readonly IDictionary _deviceOperationRegistry = new ConcurrentDictionary(); + private readonly IDictionary disconnectingRegistry = new ConcurrentDictionary(); public Adapter() { @@ -77,14 +77,17 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect var nativeDevice = device.NativeDevice as BluetoothLEDevice; Trace.Message("ConnectToDeviceNativeAsync {0} Named: {1} Connected: {2}", device.Id.ToHexBleAddress(), device.Name, nativeDevice.ConnectionStatus); - ConnectedDeviceRegistry[device.Id.ToString()] = device; - - nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; - nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; bool success = await dev.ConnectInternal(connectParameters, cancellationToken); - - if (!success) + if (success) + { + if (!ConnectedDeviceRegistry.ContainsKey(device.Id.ToString())) + { + ConnectedDeviceRegistry[device.Id.ToString()] = device; + nativeDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; + } + } + else { // use DisconnectDeviceNative to clean up resources otherwise windows won't disconnect the device // after a subsequent successful connection (#528, #536, #423) @@ -94,21 +97,9 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect HandleConnectionFail(device, "Failed connecting to device."); // this is normally done in Device_ConnectionStatusChanged but since nothing actually connected - // or disconnect, ConnectionStatusChanged will not fire. + // or disconnect, ConnectionStatusChanged will not fire. ConnectedDeviceRegistry.TryRemove(device.Id.ToString(), out _); } - else if (cancellationToken.IsCancellationRequested) - { - // connection attempt succeeded but was cancelled before it could be completed - // see TODO above. - - // cleanup resources - DisconnectDeviceNative(device); - } - else - { - _deviceOperationRegistry[device.Id.ToString()] = device; - } } private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, object args) @@ -135,17 +126,17 @@ private void Device_ConnectionStatusChanged(BluetoothLEDevice nativeDevice, obje if (nativeDevice.ConnectionStatus == BluetoothConnectionStatus.Disconnected && ConnectedDeviceRegistry.TryRemove(id, out var disconnectedDevice)) { - bool isNormalDisconnect = !_deviceOperationRegistry.Remove(disconnectedDevice.Id.ToString()); - if (!isNormalDisconnect) + bool disconnectRequested = disconnectingRegistry.Remove(id); + if (!disconnectRequested) { // device was powered off or went out of range. Call DisconnectDeviceNative to cleanup // resources otherwise windows will not disconnect on a subsequent connect-disconnect. DisconnectDeviceNative(disconnectedDevice); } - - // fire the correct event (DeviceDisconnected or DeviceConnectionLost) - HandleDisconnectedDevice(isNormalDisconnect, disconnectedDevice); + ConnectedDeviceRegistry.Remove(id, out _); nativeDevice.ConnectionStatusChanged -= Device_ConnectionStatusChanged; + // fire the correct event (DeviceDisconnected or DeviceConnectionLost) + HandleDisconnectedDevice(disconnectRequested, disconnectedDevice); } } @@ -153,11 +144,8 @@ protected override void DisconnectDeviceNative(IDevice device) { // Windows doesn't support disconnecting, so currently just dispose of the device Trace.Message($"DisconnectDeviceNative from device with ID: {device.Id.ToHexBleAddress()}"); - if (device.NativeDevice is BluetoothLEDevice nativeDevice) - { - _deviceOperationRegistry.Remove(device.Id.ToString()); - ((Device)device).DisconnectInternal(); - } + disconnectingRegistry[device.Id.ToString()] = device; + ((Device)device).DisconnectInternal(); } public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) From fa6cdb522b2ae689b1b615a906ef8d78c3eaab76 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 11 Feb 2024 13:34:00 +0100 Subject: [PATCH 477/527] GHA: update actions 'checkout' and 'setup-dotnet' * in order to fix a warning: Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3, actions/setup-dotnet@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/. --- .github/workflows/dotnet.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 333bb744..5dbb9efa 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -13,12 +13,12 @@ jobs: winBuild: runs-on: windows-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: nuget/setup-nuget@v1 - name: Setup .NET - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Set up JDK 11 @@ -77,11 +77,11 @@ jobs: macBuild: runs-on: macos-13 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup .NET - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Setup XCode @@ -103,11 +103,11 @@ jobs: linuxBuild: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup .NET - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Install workloads From e8c8aa113c67e92117c37d650b50d8a2998fceb5 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 11 Feb 2024 13:42:13 +0100 Subject: [PATCH 478/527] BLE.Client.Maui: add PackageReference to Microsoft.Maui.Controls * in order to fix a GHA warning: warning MA002: Starting with .NET 8, setting true does not automatically include NuGet package references in your project. Update your project by including this item: . You can skip this warning by setting true in your project file. [/home/runner/work/dotnet-bluetooth-le/dotnet-bluetooth-le/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj::TargetFramework=net8.0-android34.0] --- Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index 1b4790da..835a92f9 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -70,6 +70,7 @@ + From 30616a7c05a71bd5d2602cb7678c73c1df22b335 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 11 Feb 2024 13:54:48 +0100 Subject: [PATCH 479/527] BLE.Client.Maui: remove uses-sdk clause (with SDK versions) from AndroidManifest.xml * in order to fix a GHA warning: warning XA1006: The TargetFrameworkVersion (Android API level 34) is higher than the targetSdkVersion (33). Please increase the `android:targetSdkVersion` in the `AndroidManifest.xml` so that the API levels match. * the SDK versions in the AndroidManifest are not needed at all, since they are defined in BLE.Client.Maui.csproj (via TargetFrameworks and SupportedOSPlatformVersion) --- .../BLE.Client.Maui/Platforms/Android/AndroidManifest.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Maui/Platforms/Android/AndroidManifest.xml b/Source/BLE.Client/BLE.Client.Maui/Platforms/Android/AndroidManifest.xml index eedc2bf6..60a968bb 100644 --- a/Source/BLE.Client/BLE.Client.Maui/Platforms/Android/AndroidManifest.xml +++ b/Source/BLE.Client/BLE.Client.Maui/Platforms/Android/AndroidManifest.xml @@ -15,5 +15,4 @@ - - \ No newline at end of file + From b821ee9008b81b61f53037fb7d5a115699d11ea2 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 11 Feb 2024 14:24:27 +0100 Subject: [PATCH 480/527] BLE.Client.Maui: remove IPlatformHelpers * since the sample is based on Maui 8, we can use the standard Bluetooth permissions --- Source/BLE.Client/BLE.Client.Maui/App.xaml.cs | 6 +-- .../BLE.Client.Maui/BLE.Client.Maui.csproj | 2 - .../Helpers/IPlatformHelpers.cs | 7 --- .../BLE.Client/BLE.Client.Maui/MauiProgram.cs | 21 +------- .../Platforms/Android/DroidPlatformHelpers.cs | 48 ------------------- .../MacCatalyst/MacCatalystPlatformHelpers.cs | 16 ------- .../Windows/WindowsPlatformHelpers.cs | 10 ---- .../Platforms/iOS/iOSPlatformHelpers.cs | 10 ---- .../ViewModels/BLEScannerViewModel.cs | 4 +- 9 files changed, 6 insertions(+), 118 deletions(-) delete mode 100644 Source/BLE.Client/BLE.Client.Maui/Helpers/IPlatformHelpers.cs delete mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Android/DroidPlatformHelpers.cs delete mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/MacCatalyst/MacCatalystPlatformHelpers.cs delete mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/WindowsPlatformHelpers.cs delete mode 100644 Source/BLE.Client/BLE.Client.Maui/Platforms/iOS/iOSPlatformHelpers.cs diff --git a/Source/BLE.Client/BLE.Client.Maui/App.xaml.cs b/Source/BLE.Client/BLE.Client.Maui/App.xaml.cs index 00fa7886..3b2a0319 100644 --- a/Source/BLE.Client/BLE.Client.Maui/App.xaml.cs +++ b/Source/BLE.Client/BLE.Client.Maui/App.xaml.cs @@ -1,5 +1,4 @@ -using BLE.Client.Helpers; -using BLE.Client.Maui.Services; +using BLE.Client.Maui.Services; namespace BLE.Client.Maui; @@ -7,14 +6,13 @@ public partial class App : Application { public static IServiceProvider Services; public static IAlertService AlertSvc; - public static IPlatformHelpers PlatformHelper; + public App(IServiceProvider provider) { InitializeComponent(); Services = provider; AlertSvc = Services.GetService(); - PlatformHelper = Services.GetService(); MainPage = new AppShell(); } } diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index 835a92f9..47562a14 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -80,7 +80,6 @@ - @@ -89,7 +88,6 @@ - diff --git a/Source/BLE.Client/BLE.Client.Maui/Helpers/IPlatformHelpers.cs b/Source/BLE.Client/BLE.Client.Maui/Helpers/IPlatformHelpers.cs deleted file mode 100644 index d1130c7e..00000000 --- a/Source/BLE.Client/BLE.Client.Maui/Helpers/IPlatformHelpers.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace BLE.Client.Helpers -{ - public interface IPlatformHelpers - { - Task CheckAndRequestBluetoothPermissions(); - } -} diff --git a/Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs b/Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs index d2286027..800e401e 100644 --- a/Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs +++ b/Source/BLE.Client/BLE.Client.Maui/MauiProgram.cs @@ -1,5 +1,4 @@ -using BLE.Client.Helpers; -using BLE.Client.Maui.Services; +using BLE.Client.Maui.Services; namespace BLE.Client.Maui; public static class MauiProgram @@ -16,10 +15,6 @@ public static MauiApp CreateMauiApp() }); builder.Services.AddSingleton(); - AddPlatformSpecificItems(builder); - - - #if DEBUG //builder.Logging.AddDebug(); #endif @@ -32,18 +27,4 @@ public static MauiApp CreateMauiApp() public static bool IsMacCatalyst => DeviceInfo.Current.Platform == DevicePlatform.MacCatalyst; public static bool IsMacOS => DeviceInfo.Current.Platform == DevicePlatform.macOS; - - - private static void AddPlatformSpecificItems(MauiAppBuilder builder) - { -#if ANDROID - builder.Services.AddSingleton(); -#elif IOS - builder.Services.AddSingleton(); -#elif MACCATALYST - builder.Services.AddSingleton(); -#elif WINDOWS - builder.Services.AddSingleton(); -#endif - } } diff --git a/Source/BLE.Client/BLE.Client.Maui/Platforms/Android/DroidPlatformHelpers.cs b/Source/BLE.Client/BLE.Client.Maui/Platforms/Android/DroidPlatformHelpers.cs deleted file mode 100644 index 938fdaa4..00000000 --- a/Source/BLE.Client/BLE.Client.Maui/Platforms/Android/DroidPlatformHelpers.cs +++ /dev/null @@ -1,48 +0,0 @@ -using BLE.Client.Helpers; -using static Microsoft.Maui.ApplicationModel.Permissions; - -//[assembly: Dependency(typeof(BLE.Client.Droid.Helpers.PlatformHelpers))] -namespace BLE.Client.Helpers -{ - public class DroidPlatformHelpers : IPlatformHelpers - { - public async Task CheckAndRequestBluetoothPermissions() - { - PermissionStatus status; - if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.S) - { - status = await Permissions.CheckStatusAsync(); - - if (status == PermissionStatus.Granted) - return status; - - status = await Permissions.RequestAsync(); - } - else - { - status = await Permissions.CheckStatusAsync(); - - if (status == PermissionStatus.Granted) - return status; - - - if (Permissions.ShouldShowRationale()) - { - await Application.Current.MainPage.DisplayAlert("Permission required", "Location permission is required for bluetooth scanning. We do not store or use your location at all.", "OK"); - } - - status = await Permissions.RequestAsync(); - } - return status; - } - } - - public class BluetoothSPermission :BasePlatformPermission - { - public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)> - { - (Android.Manifest.Permission.BluetoothScan, true), - (Android.Manifest.Permission.BluetoothConnect, true) - }.ToArray(); - } -} diff --git a/Source/BLE.Client/BLE.Client.Maui/Platforms/MacCatalyst/MacCatalystPlatformHelpers.cs b/Source/BLE.Client/BLE.Client.Maui/Platforms/MacCatalyst/MacCatalystPlatformHelpers.cs deleted file mode 100644 index 024ac784..00000000 --- a/Source/BLE.Client/BLE.Client.Maui/Platforms/MacCatalyst/MacCatalystPlatformHelpers.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Threading.Tasks; -using BLE.Client.Helpers; - -namespace BLE.Client.Helpers -{ - public class MacCatalystPlatformHelpers : IPlatformHelpers - { - public Task CheckAndRequestBluetoothPermissions() - { - System.Diagnostics.Debug.WriteLine("Into CheckAndRequestBluetoothPermissions "); - - return Task.FromResult(PermissionStatus.Granted); - } - } -} - diff --git a/Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/WindowsPlatformHelpers.cs b/Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/WindowsPlatformHelpers.cs deleted file mode 100644 index 349fcda5..00000000 --- a/Source/BLE.Client/BLE.Client.Maui/Platforms/Windows/WindowsPlatformHelpers.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace BLE.Client.Helpers -{ - public class WindowsPlatformHelpers : IPlatformHelpers - { - public Task CheckAndRequestBluetoothPermissions() - { - return Task.FromResult(PermissionStatus.Granted); - } - } -} diff --git a/Source/BLE.Client/BLE.Client.Maui/Platforms/iOS/iOSPlatformHelpers.cs b/Source/BLE.Client/BLE.Client.Maui/Platforms/iOS/iOSPlatformHelpers.cs deleted file mode 100644 index 2784b8f5..00000000 --- a/Source/BLE.Client/BLE.Client.Maui/Platforms/iOS/iOSPlatformHelpers.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace BLE.Client.Helpers -{ - public class iOSPlatformHelpers : IPlatformHelpers - { - public Task CheckAndRequestBluetoothPermissions() - { - return Task.FromResult(PermissionStatus.Granted); - } - } -} diff --git a/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs b/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs index 5547f033..40f4c91d 100644 --- a/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs +++ b/Source/BLE.Client/BLE.Client.Maui/ViewModels/BLEScannerViewModel.cs @@ -364,7 +364,9 @@ private async void StartScanForDevices() private async Task HasCorrectPermissions() { DebugMessage("Into HasCorrectPermissions"); - var permissionResult = await App.PlatformHelper.CheckAndRequestBluetoothPermissions(); + var permissionResult = await Permissions.CheckStatusAsync(); + if (permissionResult != PermissionStatus.Granted) + permissionResult = await Permissions.RequestAsync(); DebugMessage($"Back from await App.PlatformHelper: '{permissionResult}'"); if (permissionResult != PermissionStatus.Granted) { From 2c73525758df1a8522b40573cbcd1e8ee20f074f Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 11 Feb 2024 17:43:40 +0100 Subject: [PATCH 481/527] GHA: update several actions in the Windows build * in order to fix a warning: Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: nuget/setup-nuget@v1, actions/setup-java@v3, microsoft/setup-msbuild@v1.1, cake-build/cake-action@v1.4.1, actions/upload-artifact@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/. --- .github/workflows/dotnet.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 5dbb9efa..610e106a 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -16,13 +16,13 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: nuget/setup-nuget@v1 + - uses: nuget/setup-nuget@v2 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Set up JDK 11 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '11' @@ -33,34 +33,34 @@ jobs: & dotnet workload install maui --source https://aka.ms/dotnet6/nuget/index.json --source https://api.nuget.org/v3/index.json & dotnet workload install android ios maccatalyst tvos macos maui wasm-tools maui-maccatalyst --source https://aka.ms/dotnet6/nuget/index.json --source https://api.nuget.org/v3/index.json - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 - name: Clean - uses: cake-build/cake-action@v1.4.1 + uses: cake-build/cake-action@v2 with: script-path: .build/build.cake target: Clean - name: Restore - uses: cake-build/cake-action@v1.4.1 + uses: cake-build/cake-action@v2 with: script-path: .build/build.cake target: Restore - name: Build Libs - uses: cake-build/cake-action@v1.4.1 + uses: cake-build/cake-action@v2 with: script-path: .build/build.cake target: BuildLibs - name: Build Clients - uses: cake-build/cake-action@v1.4.1 + uses: cake-build/cake-action@v2 with: script-path: .build/build.cake target: BuildClients - name: Builds Tests - uses: cake-build/cake-action@v1.4.1 + uses: cake-build/cake-action@v2 with: script-path: .build/build.cake target: BuildTests - name: Run Tests - uses: cake-build/cake-action@v1.4.1 + uses: cake-build/cake-action@v2 with: script-path: .build/build.cake target: RunTests @@ -69,7 +69,7 @@ jobs: - name: Build MVVMCross.Plugins.BLE NuGet run: msbuild .\Source\MvvmCross.Plugins.BLE\MvvmCross.Plugins.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:PackageOutputPath=./nuget /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false - name: Upload packages - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: nupkg path: ./Source/*/nuget/*Plugin.BLE*.nupkg From 841c4a2b7549c6f6aafd5f2b9371d62f63ca3205 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 12 Feb 2024 21:50:17 +0100 Subject: [PATCH 482/527] Release 3.1.0-beta.2 * update version in csproj files * amend changelog.md --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- Source/Plugin.BLE/Plugin.BLE.csproj | 2 +- doc/changelog.md | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 6d48f213..68900e7f 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -5,7 +5,7 @@ $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE - 3.1.0-beta.1 + 3.1.0-beta.2 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil MvvmCross.Plugin.BLE diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 762f6fdd..4dd95112 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -5,7 +5,7 @@ $(TargetFrameworks);MonoAndroid13.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net7.0-windows10.0.19041;net8.0-windows10.0.19041;net8.0-windows10.0.22000.0 Plugin.BLE Plugin.BLE - 3.1.0-beta.1 + 3.1.0-beta.2 $(AssemblyName) ($(TargetFramework)) Adrian Seceleanu, Sven-Michael Stübe, Janus Weil Plugin.BLE diff --git a/doc/changelog.md b/doc/changelog.md index 0bd1dbbc..1c847d8f 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -2,6 +2,13 @@ ## 3.1 +#### 3.1.0-beta.2 +- #784 Turn Bluetooth Radio On/Off +- #801 Connection parameters for Windows +- #805 Added services for Citysports treadmill (fixes #804) +- #807 Fix GetSystemConnectedOrPairedDevices in Windows +- #809 Fix ConnectionLost -> Connect for Windows + #### 3.1.0-beta.1 - #746 Windows.Devices.Bluetooth Only - #764 ReadAsync updates characteristic value on Windows From 450dbc5cf96c2b2101b55ecf7d57002e9bbcba5e Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 17 Feb 2024 14:20:00 +0100 Subject: [PATCH 483/527] README.md: spelling fixes --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 497aea84..31b7df1d 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ Add this line to the Package Manifest (.appxmanifest): We provide a sample Xamarin.Forms app, that is a basic bluetooth LE scanner. With this app, it's possible to -- check the ble status +- check the BLE status - discover devices - connect/disconnect - discover the services @@ -325,14 +325,14 @@ The BLE API implementation (especially on **Android**) has the following limitat } ``` -- **Avoid caching of Characteristic or Service instances between connection sessions**. This includes saving a reference to them in your class between connection sessions etc. After a device has been disconnected all Service & Characteristic instances become **invalid**. Allways **use GetServiceAsync and GetCharacteristicAsync to get a valid instance**. +- **Avoid caching of Characteristic or Service instances between connection sessions**. This includes saving a reference to them in your class between connection sessions etc. After a device has been disconnected all Service & Characteristic instances become **invalid**. Always **use GetServiceAsync and GetCharacteristicAsync to get a valid instance**. ### General BLE iOS, Android -- Scanning: Avoid performing ble device operations like Connect, Read, Write etc while scanning for devices. Scanning is battery-intensive. - - try to stop scanning before performing device operations (connect/read/write/etc) - - try to stop scanning as soon as you find the desired device - - never scan on a loop, and set a time limit on your scan +- Scanning: Avoid performing BLE device operations like Connect, Read, Write etc while scanning for devices. Scanning is battery-intensive. + - Try to stop scanning before performing device operations (connect/read/write/etc). + - Try to stop scanning as soon as you find the desired device. + - Never scan on a loop, and set a time limit on your scan. ## How to build the nuget package From a0c726387023eff256dc7939675632fa798dcef9 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 17 Feb 2024 22:33:24 +0100 Subject: [PATCH 484/527] BLE.Client.Maui: update to MAUI 8.0.7 * in order to fix build errors with latest SDK (8.0.201): error NU1605: Warning As Error: Detected package downgrade: Microsoft.Maui.Controls from 8.0.6 to 8.0.3. Reference the package directly from the project to select a different version. error NU1605: BLE.Client.Maui -> Microsoft.Maui.Controls.Compatibility 8.0.6 -> Microsoft.Maui.Controls (>= 8.0.6) error NU1605: BLE.Client.Maui -> Microsoft.Maui.Controls (>= 8.0.3) --- Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj index 47562a14..8a3da5cd 100644 --- a/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj +++ b/Source/BLE.Client/BLE.Client.Maui/BLE.Client.Maui.csproj @@ -70,7 +70,7 @@ - + From 112a1eaf4bde674842626abdcd4247d583a0e221 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 17 Feb 2024 22:52:34 +0100 Subject: [PATCH 485/527] add a FUNDING.yml file --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..84dbdffb --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: janusw From 135bda84515e0a8b5d73330ed98ae6b883a427fc Mon Sep 17 00:00:00 2001 From: Ask Bojesen Date: Thu, 29 Feb 2024 11:04:44 +0100 Subject: [PATCH 486/527] Implemented and tested: - Adapter.BondAsync - Adapter.BondedDevices --- .../BLE.Client.WinConsole/PluginDemos.cs | 18 +++++++ .../BLE.Client.WinConsole/Program.cs | 2 + Source/Plugin.BLE/Windows/Adapter.cs | 54 ++++++++++++++++--- 3 files changed, 67 insertions(+), 7 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs index e065b27b..3c14db01 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/PluginDemos.cs @@ -211,6 +211,24 @@ public async Task Connect_Change_Parameters_Disconnect() Write("Test_Connect_Disconnect done"); } + public async Task BondAsync() + { + string bleaddress = BleAddressSelector.GetBleAddress(); + var id = bleaddress.ToBleDeviceGuid(); + IDevice dev = await Adapter.ConnectToKnownDeviceAsync(id); + await Adapter.BondAsync(dev); + } + + public Task GetBondedDevices() + { + int idx = 0; + foreach(var dev in Adapter.BondedDevices) + { + Write($"{idx++} Bonded device: {dev.Name} : {dev.Id}"); + } + return Task.FromResult(true); + } + public async Task Pair_Connect_Disconnect() { string bleaddress = BleAddressSelector.GetBleAddress(); diff --git a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs index 9bed9006..1f34b72b 100644 --- a/Source/BLE.Client/BLE.Client.WinConsole/Program.cs +++ b/Source/BLE.Client/BLE.Client.WinConsole/Program.cs @@ -25,6 +25,8 @@ {ConsoleKey.D7, new Demo("5X: Connect -> Read services -> Disconnect", ppemos.Connect_Read_Services_Disconnect_5X) }, {ConsoleKey.D8, new Demo("5X: Connect -> Read services -> Dispose", ppemos.Connect_Read_Services_Dispose_5X) }, {ConsoleKey.D9, new Demo("Connect -> Loop: ConnectionLost -> Connect", ppemos.Connect_ConnectionLost_Connect) }, + {ConsoleKey.Q, new Demo("Adapter.BondAsync", ppemos.BondAsync) }, + {ConsoleKey.W, new Demo("Adapter.BondedDevices", ppemos.GetBondedDevices) }, {ConsoleKey.A, new Demo("Pure Windows: Connect -> Disconnect", wdemos.Connect_Disconnect) }, {ConsoleKey.S, new Demo("Pure Windows: Unpair all BLE devices", wdemos.UnPairAllBleDevices) }, }; diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index de1275bf..1ad0baa2 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -28,9 +28,27 @@ public Adapter() { } - public override Task BondAsync(IDevice device) + public override async Task BondAsync(IDevice device) { - throw new NotImplementedException(); + var bleDevice = device.NativeDevice as BluetoothLEDevice; + if (bleDevice is null) + { + Trace.Message($"BondAsync failed since NativeDevice is null with: {device.Name}: {device.Id} "); + return; + } + DeviceInformation deviceInformation = await DeviceInformation.CreateFromIdAsync(bleDevice.DeviceId); + if (deviceInformation.Pairing.IsPaired) + { + Trace.Message($"BondAsync is already paired with: {device.Name}: {device.Id}"); + return; + } + if (!deviceInformation.Pairing.CanPair) + { + Trace.Message($"BondAsync cannot pair with: {device.Name}: {device.Id}"); + return; + } + DevicePairingResult result = await deviceInformation.Pairing.PairAsync(); + Trace.Message($"BondAsync pairing result was {result.Status} with: {device.Name}: {device.Id}"); } protected override Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) @@ -161,6 +179,33 @@ public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceG return knownDevice; } + protected override IReadOnlyList GetBondedDevices() + { + string pairedSelector = BluetoothLEDevice.GetDeviceSelectorFromPairingState(true); + DeviceInformationCollection pairedDevices = DeviceInformation.FindAllAsync(pairedSelector).GetAwaiter().GetResult(); + List devlist = new List(); + foreach (var dev in pairedDevices) + { + Guid id = dev.Id.ToBleDeviceGuidFromId(); + ulong bleaddress = id.ToBleAddress(); + var bluetoothLeDevice = BluetoothLEDevice.FromBluetoothAddressAsync(bleaddress).AsTask().Result; + if (bluetoothLeDevice != null) + { + var device = new Device( + this, + bluetoothLeDevice, + 0, id); + devlist.Add(device); + Trace.Message("GetBondedDevices: {0}: {1}", dev.Id, dev.Name); + } + else + { + Trace.Message("GetBondedDevices: {0}: {1}, BluetoothLEDevice == null", dev.Id, dev.Name); + } + } + return devlist; + } + public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null) { string pairedSelector = BluetoothLEDevice.GetDeviceSelectorFromPairingState(true); @@ -194,11 +239,6 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] return devlist; } - protected override IReadOnlyList GetBondedDevices() - { - return null; // not supported - } - /// /// Parses a given advertisement for various stored properties /// Currently only parses the manufacturer specific data From e5facce6d0b8a1e1f9eb47eea44e34da30830b55 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 2 Mar 2024 21:17:22 +0100 Subject: [PATCH 487/527] implement BleImplementation.TrySetStateAsync on Android * at least the enable part --- Source/Plugin.BLE/Android/BleImplementation.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE/Android/BleImplementation.cs b/Source/Plugin.BLE/Android/BleImplementation.cs index c0f79d6e..38e8d297 100644 --- a/Source/Plugin.BLE/Android/BleImplementation.cs +++ b/Source/Plugin.BLE/Android/BleImplementation.cs @@ -85,8 +85,18 @@ protected override IAdapter CreateNativeAdapter() public override Task TrySetStateAsync(bool on) { - Abstractions.Trace.Message("WARNING TrySetStateAsync is not implemented for Android"); - return Task.FromResult(false); + if (on) + { + var enable = new Intent(BluetoothAdapter.ActionRequestEnable); + enable.SetFlags(ActivityFlags.NewTask); + Application.Context.StartActivity(enable); + return Task.FromResult(true); + } + else + { + Abstractions.Trace.Message("WARNING TrySetStateAsync(false) is not implemented for Android"); + return Task.FromResult(false); + } } } } \ No newline at end of file From 2442bce36adc3c6597ee7ff669f57ab9f87b2e03 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 4 Mar 2024 15:26:19 +0100 Subject: [PATCH 488/527] BleImplementation.TrySetStateAsync: also implement the disable part on Android * this is somehow undocumented, though --- Source/Plugin.BLE/Android/BleImplementation.cs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Source/Plugin.BLE/Android/BleImplementation.cs b/Source/Plugin.BLE/Android/BleImplementation.cs index 38e8d297..635c3e8d 100644 --- a/Source/Plugin.BLE/Android/BleImplementation.cs +++ b/Source/Plugin.BLE/Android/BleImplementation.cs @@ -85,18 +85,12 @@ protected override IAdapter CreateNativeAdapter() public override Task TrySetStateAsync(bool on) { - if (on) - { - var enable = new Intent(BluetoothAdapter.ActionRequestEnable); - enable.SetFlags(ActivityFlags.NewTask); - Application.Context.StartActivity(enable); - return Task.FromResult(true); - } - else - { - Abstractions.Trace.Message("WARNING TrySetStateAsync(false) is not implemented for Android"); - return Task.FromResult(false); - } + const string ACTION_REQUEST_DISABLE = "android.bluetooth.adapter.action.REQUEST_DISABLE"; + + var intent = new Intent(on ? BluetoothAdapter.ActionRequestEnable : ACTION_REQUEST_DISABLE); + intent.SetFlags(ActivityFlags.NewTask); + Application.Context.StartActivity(intent); + return Task.FromResult(true); } } } \ No newline at end of file From 5b44ca681862cf690abcb1cf9261bdb6c74a6e84 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 4 Mar 2024 16:55:12 +0100 Subject: [PATCH 489/527] IBluetoothLE: update documentation of method 'TrySetStateAsync' --- Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs b/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs index 0bd46a14..ce229337 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IBluetoothLE.cs @@ -31,8 +31,8 @@ public interface IBluetoothLE bool IsOn { get; } /// - /// Try set the state of the Bluetooth on/off - /// 2024-01-14: Only supported in Windows + /// Try to set the state of the Bluetooth (on/off). + /// Supported on: Android & Windows. /// /// /// true if the the method executed with success otherwice false From 2f19eaec943e3878b39e8e85513f3e5ab63b63e3 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 16 Mar 2024 16:47:30 +0100 Subject: [PATCH 490/527] BLE.Client.Maui: remove MainPage * this is example code from a template that is not being used anyhwere --- .../BLE.Client/BLE.Client.Maui/MainPage.xaml | 47 ------------------- .../BLE.Client.Maui/MainPage.xaml.cs | 37 --------------- 2 files changed, 84 deletions(-) delete mode 100644 Source/BLE.Client/BLE.Client.Maui/MainPage.xaml delete mode 100644 Source/BLE.Client/BLE.Client.Maui/MainPage.xaml.cs diff --git a/Source/BLE.Client/BLE.Client.Maui/MainPage.xaml b/Source/BLE.Client/BLE.Client.Maui/MainPage.xaml deleted file mode 100644 index 294dbcdb..00000000 --- a/Source/BLE.Client/BLE.Client.Maui/MainPage.xaml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - /// Device to connect from. - public Task DisconnectDeviceAsync(IDevice device) + public Task DisconnectDeviceAsync(IDevice device, CancellationToken cancellationToken = default) { if (!ConnectedDevices.Contains(device)) { @@ -257,7 +257,8 @@ public Task DisconnectDeviceAsync(IDevice device) } }), subscribeReject: handler => DeviceConnectionError += handler, - unsubscribeReject: handler => DeviceConnectionError -= handler); + unsubscribeReject: handler => DeviceConnectionError -= handler, + token: cancellationToken); } private void CleanupScan() diff --git a/Source/Plugin.BLE/Shared/CharacteristicBase.cs b/Source/Plugin.BLE/Shared/CharacteristicBase.cs index aa691f66..d7245369 100644 --- a/Source/Plugin.BLE/Shared/CharacteristicBase.cs +++ b/Source/Plugin.BLE/Shared/CharacteristicBase.cs @@ -123,7 +123,7 @@ protected CharacteristicBase(IService service, TNativeCharacteristic nativeChara } Trace.Message("Characteristic.ReadAsync"); - return await ReadNativeAsync(); + return await ReadNativeAsync(cancellationToken); } /// @@ -146,7 +146,7 @@ public async Task WriteAsync(byte[] data, CancellationToken cancellationTok var writeType = GetWriteType(); Trace.Message("Characteristic.WriteAsync"); - return await WriteNativeAsync(data, writeType); + return await WriteNativeAsync(data, writeType, cancellationToken); } private CharacteristicWriteType GetWriteType() @@ -192,7 +192,7 @@ public Task StopUpdatesAsync(CancellationToken cancellationToken = default) /// public async Task> GetDescriptorsAsync(CancellationToken cancellationToken = default) { - return _descriptors ?? (_descriptors = await GetDescriptorsNativeAsync()); + return _descriptors ?? (_descriptors = await GetDescriptorsNativeAsync(cancellationToken)); } /// @@ -209,22 +209,22 @@ public async Task GetDescriptorAsync(Guid id, CancellationToken can /// /// Native implementation of GetDescriptorsAsync. /// - protected abstract Task> GetDescriptorsNativeAsync(); + protected abstract Task> GetDescriptorsNativeAsync(CancellationToken cancellationToken); /// /// Native implementation of ReadAsync. /// - protected abstract Task<(byte[] data, int resultCode)> ReadNativeAsync(); + protected abstract Task<(byte[] data, int resultCode)> ReadNativeAsync(CancellationToken cancellationToken); /// /// Native implementation of WriteAsync. /// - protected abstract Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType); + protected abstract Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType, CancellationToken cancellationToken); /// /// Native implementation of StartUpdatesAsync. /// - protected abstract Task StartUpdatesNativeAsync(CancellationToken cancellationToken = default); + protected abstract Task StartUpdatesNativeAsync(CancellationToken cancellationToken); /// /// Native implementation of StopUpdatesAsync. /// - protected abstract Task StopUpdatesNativeAsync(CancellationToken cancellationToken = default); + protected abstract Task StopUpdatesNativeAsync(CancellationToken cancellationToken); } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index 0250336e..81a9fb1b 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -159,8 +159,9 @@ public interface IAdapter /// Disconnects from the . /// /// Device to connect from. + /// The token to monitor for cancellation requests. The default value is None. /// A task that represents the asynchronous read operation. The Task will finish after the device has been disconnected successfuly. - Task DisconnectDeviceAsync(IDevice device); + Task DisconnectDeviceAsync(IDevice device, CancellationToken cancellationToken = default); /// /// Connects to a device with a known GUID without scanning and if in range. Does not scan for devices. diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index caf0f576..9de4ab59 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -69,6 +69,7 @@ public interface IDevice : IDisposable /// /// Updates the RSSI value. /// + /// The token to monitor for cancellation requests. The default value is None. /// /// This method is only supported on Android, iOS and MacOS, but not on Windows. /// On Android: This function will only work if the device is connected. The RSSI value will be determined once on the discovery of the device. @@ -77,7 +78,7 @@ public interface IDevice : IDisposable /// A task that represents the asynchronous read operation. The Result property will contain a boolean that indicates if the update was successful. /// The Task will finish after the RSSI has been updated. /// - Task UpdateRssiAsync(); + Task UpdateRssiAsync(CancellationToken cancellationToken = default); /// /// Requests a MTU update and fires an "Exchange MTU Request" on the ble stack. @@ -92,7 +93,8 @@ public interface IDevice : IDisposable /// /// A task that represents the asynchronous operation. The result contains the negotiated MTU size between master and slave /// The requested MTU - Task RequestMtuAsync(int requestValue); + /// The token to monitor for cancellation requests. The default value is None. + Task RequestMtuAsync(int requestValue, CancellationToken cancellationToken = default); /// /// Requests a bluetooth-le connection update request. Be aware that this is only implemented on Android (>= API 21). diff --git a/Source/Plugin.BLE/Shared/Contracts/IService.cs b/Source/Plugin.BLE/Shared/Contracts/IService.cs index ec317521..6372a98e 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IService.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; namespace Plugin.BLE.Abstractions.Contracts @@ -33,18 +34,20 @@ public interface IService : IDisposable /// /// Gets the characteristics of the service. /// + /// The token to monitor for cancellation requests. The default value is None. /// A task that represents the asynchronous read operation. The Result property will contain a list of characteristics. - Task> GetCharacteristicsAsync(); + Task> GetCharacteristicsAsync(CancellationToken cancellationToken = default); /// /// Gets the first characteristic with the Id . /// /// The id of the searched characteristic. + /// The token to monitor for cancellation requests. The default value is None. /// /// A task that represents the asynchronous read operation. /// The Result property will contain the characteristic with the specified . /// If the characteristic doesn't exist, the Result will be null. /// - Task GetCharacteristicAsync(Guid id); + Task GetCharacteristicAsync(Guid id, CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/DescriptorBase.cs b/Source/Plugin.BLE/Shared/DescriptorBase.cs index 5150b208..dd0b383d 100644 --- a/Source/Plugin.BLE/Shared/DescriptorBase.cs +++ b/Source/Plugin.BLE/Shared/DescriptorBase.cs @@ -52,13 +52,13 @@ protected DescriptorBase(ICharacteristic characteristic, TNativeDescriptor nativ /// public Task ReadAsync(CancellationToken cancellationToken = default) { - return ReadNativeAsync(); + return ReadNativeAsync(cancellationToken); } /// /// Native implementation of ReadAsync. /// - protected abstract Task ReadNativeAsync(); + protected abstract Task ReadNativeAsync(CancellationToken cancellationToken); /// /// Sends as characteristic value to the device. @@ -72,12 +72,12 @@ public Task WriteAsync(byte[] data, CancellationToken cancellationToken = defaul throw new ArgumentNullException(nameof(data)); } - return WriteNativeAsync(data); + return WriteNativeAsync(data, cancellationToken); } /// /// Native implementation of WriteAsync. /// - protected abstract Task WriteNativeAsync(byte[] data); + protected abstract Task WriteNativeAsync(byte[] data, CancellationToken cancellationToken); } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index 11a0b9a1..2f861db0 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -115,7 +115,7 @@ public async Task> GetServicesAsync(CancellationToken ca using (var source = this.GetCombinedSource(cancellationToken)) { - var services = await GetServicesNativeAsync(); + var services = await GetServicesNativeAsync(cancellationToken); lock (KnownServices) { @@ -141,9 +141,9 @@ public async Task GetServiceAsync(Guid id, CancellationToken cancellat /// /// Requests a MTU update and fires an "Exchange MTU Request" on the ble stack. /// - public async Task RequestMtuAsync(int requestValue) + public async Task RequestMtuAsync(int requestValue, CancellationToken cancellationToken = default) { - return await RequestMtuNativeAsync(requestValue); + return await RequestMtuNativeAsync(requestValue, cancellationToken); } /// @@ -157,7 +157,7 @@ public bool UpdateConnectionInterval(ConnectionInterval interval) /// /// Updates the rssi value. /// - public abstract Task UpdateRssiAsync(); + public abstract Task UpdateRssiAsync(CancellationToken cancellationToken = default); /// /// Determines the state of the device. @@ -166,15 +166,15 @@ public bool UpdateConnectionInterval(ConnectionInterval interval) /// /// Native implementation of GetServicesAsync. /// - protected abstract Task> GetServicesNativeAsync(); + protected abstract Task> GetServicesNativeAsync(CancellationToken cancellationToken); /// /// Currently not being used anywhere! /// - protected abstract Task GetServiceNativeAsync(Guid id); + protected abstract Task GetServiceNativeAsync(Guid id, CancellationToken cancellationToken); /// /// Native implementation of RequestMtuAsync. /// - protected abstract Task RequestMtuNativeAsync(int requestValue); + protected abstract Task RequestMtuNativeAsync(int requestValue, CancellationToken cancellationToken); /// /// Native implementation of UpdateConnectionInterval. /// diff --git a/Source/Plugin.BLE/Shared/ServiceBase.cs b/Source/Plugin.BLE/Shared/ServiceBase.cs index 1980cd75..3bce1952 100644 --- a/Source/Plugin.BLE/Shared/ServiceBase.cs +++ b/Source/Plugin.BLE/Shared/ServiceBase.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Plugin.BLE.Abstractions.Contracts; @@ -46,11 +47,11 @@ protected ServiceBase(IDevice device, TNativeService nativeService) /// /// Gets the characteristics of the service. /// - public async Task> GetCharacteristicsAsync() + public async Task> GetCharacteristicsAsync(CancellationToken cancellationToken = default) { if (!_characteristics.Any()) - { - _characteristics.AddRange(await GetCharacteristicsNativeAsync()); + { + _characteristics.AddRange(await GetCharacteristicsNativeAsync(cancellationToken)); } // make a copy here so that the caller cant modify the original list @@ -61,16 +62,16 @@ public async Task> GetCharacteristicsAsync() /// Gets the first characteristic with the Id . /// /// The id of the searched characteristic. - public async Task GetCharacteristicAsync(Guid id) + public async Task GetCharacteristicAsync(Guid id, CancellationToken cancellationToken = default) { - var characteristics = await GetCharacteristicsAsync(); + var characteristics = await GetCharacteristicsAsync(cancellationToken); return characteristics.FirstOrDefault(c => c.Id == id); } /// /// Native implementation of GetCharacteristicsAsync. /// - protected abstract Task> GetCharacteristicsNativeAsync(); + protected abstract Task> GetCharacteristicsNativeAsync(CancellationToken cancellationToken); /// /// Dispose the service. diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 17ee937d..db633944 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -175,7 +175,7 @@ protected override void DisconnectDeviceNative(IDevice device) ((Device)device).DisconnectInternal(); } - public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) + public override async Task ConnectToKnownDeviceNativeAsync(Guid deviceGuid, ConnectParameters connectParameters, CancellationToken cancellationToken) { var bleAddress = deviceGuid.ToBleAddress(); var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bleAddress); diff --git a/Source/Plugin.BLE/Windows/Characteristic.cs b/Source/Plugin.BLE/Windows/Characteristic.cs index 379d83e5..5e6788b6 100644 --- a/Source/Plugin.BLE/Windows/Characteristic.cs +++ b/Source/Plugin.BLE/Windows/Characteristic.cs @@ -36,7 +36,7 @@ public Characteristic(GattCharacteristic nativeCharacteristic, IService service) { } - protected override async Task> GetDescriptorsNativeAsync() + protected override async Task> GetDescriptorsNativeAsync(CancellationToken cancellationToken) { var descriptorsResult = await NativeCharacteristic.GetDescriptorsAsync(BleImplementation.CacheModeGetDescriptors); descriptorsResult.ThrowIfError(); @@ -47,14 +47,14 @@ protected override async Task> GetDescriptorsNativeAs .ToList(); } - protected override async Task<(byte[] data, int resultCode)> ReadNativeAsync() + protected override async Task<(byte[] data, int resultCode)> ReadNativeAsync(CancellationToken cancellationToken) { var readResult = await NativeCharacteristic.ReadValueAsync(BleImplementation.CacheModeCharacteristicRead); _value = readResult.GetValueOrThrowIfError(); return (_value, (int)readResult.Status); } - protected override async Task StartUpdatesNativeAsync(CancellationToken cancellationToken = default) + protected override async Task StartUpdatesNativeAsync(CancellationToken cancellationToken) { NativeCharacteristic.ValueChanged -= OnCharacteristicValueChanged; NativeCharacteristic.ValueChanged += OnCharacteristicValueChanged; @@ -73,7 +73,7 @@ protected override async Task StartUpdatesNativeAsync(CancellationToken cancella } } - protected override async Task StopUpdatesNativeAsync(CancellationToken cancellationToken = default) + protected override async Task StopUpdatesNativeAsync(CancellationToken cancellationToken) { NativeCharacteristic.ValueChanged -= OnCharacteristicValueChanged; @@ -81,7 +81,7 @@ protected override async Task StopUpdatesNativeAsync(CancellationToken cancellat result.ThrowIfError(); } - protected override async Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType) + protected override async Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType, CancellationToken cancellationToken) { var result = await NativeCharacteristic.WriteValueWithResultAsync( CryptographicBuffer.CreateFromByteArray(data), diff --git a/Source/Plugin.BLE/Windows/Descriptor.cs b/Source/Plugin.BLE/Windows/Descriptor.cs index f42114d0..c3130b9c 100644 --- a/Source/Plugin.BLE/Windows/Descriptor.cs +++ b/Source/Plugin.BLE/Windows/Descriptor.cs @@ -5,6 +5,7 @@ using Plugin.BLE.Abstractions.Contracts; using Windows.Security.Cryptography; using Plugin.BLE.Extensions; +using System.Threading; namespace Plugin.BLE.Windows { @@ -23,13 +24,13 @@ public Descriptor(GattDescriptor nativeDescriptor, ICharacteristic characteristi { } - protected override async Task ReadNativeAsync() + protected override async Task ReadNativeAsync(CancellationToken cancellationToken) { var readResult = await NativeDescriptor.ReadValueAsync(BleImplementation.CacheModeDescriptorRead); return _value = readResult.GetValueOrThrowIfError(); } - protected override async Task WriteNativeAsync(byte[] data) + protected override async Task WriteNativeAsync(byte[] data, CancellationToken cancellationToken) { var result = await NativeDescriptor.WriteValueWithResultAsync(CryptographicBuffer.CreateFromByteArray(data)); result.ThrowIfError(); diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 5fb0e4ad..bacd1242 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -41,7 +41,7 @@ internal void Update(short btAdvRawSignalStrengthInDBm, IReadOnlyList UpdateRssiAsync() + public override Task UpdateRssiAsync(CancellationToken cancellationToken) { //No current method to update the Rssi of a device //In future implementations, maybe listen for device's advertisements @@ -67,7 +67,7 @@ public async Task RecreateNativeDevice() NativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bleAddress); } - protected override async Task> GetServicesNativeAsync() + protected override async Task> GetServicesNativeAsync(CancellationToken cancellationToken) { if (NativeDevice == null) return new List(); @@ -82,7 +82,7 @@ protected override async Task> GetServicesNativeAsync() } - protected override async Task GetServiceNativeAsync(Guid id) + protected override async Task GetServiceNativeAsync(Guid id, CancellationToken cancellationToken) { var result = await NativeDevice.GetGattServicesForUuidAsync(id, BleImplementation.CacheModeGetServices); result.ThrowIfError(); @@ -110,7 +110,7 @@ protected override DeviceState GetState() return NativeDevice.WasSecureConnectionUsedForPairing ? DeviceState.Limited : DeviceState.Disconnected; } - protected override async Task RequestMtuNativeAsync(int requestValue) + protected override async Task RequestMtuNativeAsync(int requestValue, CancellationToken cancellationToken) { // Ref https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.genericattributeprofile.gattsession.maxpdusize // There are no means in windows to request a change, but we can read the current value diff --git a/Source/Plugin.BLE/Windows/Service.cs b/Source/Plugin.BLE/Windows/Service.cs index ec8ce0c2..e14d7a81 100644 --- a/Source/Plugin.BLE/Windows/Service.cs +++ b/Source/Plugin.BLE/Windows/Service.cs @@ -6,6 +6,7 @@ using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Extensions; +using System.Threading; namespace Plugin.BLE.Windows { @@ -21,7 +22,7 @@ public Service(GattDeviceService nativeService, IDevice device) : base(device, n { } - protected override async Task> GetCharacteristicsNativeAsync() + protected override async Task> GetCharacteristicsNativeAsync(CancellationToken cancellationToken) { var result = await NativeService.GetCharacteristicsAsync(BleImplementation.CacheModeGetCharacteristics); result.ThrowIfError(); From 5e8e24f3bb541bc569043f070094acb1bdfff197 Mon Sep 17 00:00:00 2001 From: Rudolf Schneider Date: Sun, 11 Aug 2024 11:11:46 +0200 Subject: [PATCH 522/527] fixed xml documention attribute warnings --- Source/Plugin.BLE/Shared/AdapterBase.cs | 1 + Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 2 +- Source/Plugin.BLE/Shared/DeviceBase.cs | 2 +- Source/Plugin.BLE/Shared/ServiceBase.cs | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index f09aec98..22e394c1 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -226,6 +226,7 @@ await TaskBuilder.FromEvent, EventHandler. /// /// Device to connect from. + /// The token to monitor for cancellation requests. The default value is None. public Task DisconnectDeviceAsync(IDevice device, CancellationToken cancellationToken = default) { if (!ConnectedDevices.Contains(device)) diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 9de4ab59..30d24d46 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -22,7 +22,7 @@ public interface IDevice : IDisposable /// /// Last known RSSI value in decibels. - /// Can be updated via . + /// Can be updated via . /// int Rssi { get; } diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index 2f861db0..e7fcbfe1 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -72,7 +72,7 @@ public abstract class DeviceBase : IDevice, ICancellationMaster public string Name { get; protected set; } /// /// Last known rssi value in decibals. - /// Can be updated via . + /// Can be updated via . /// public int Rssi { get; protected set; } /// diff --git a/Source/Plugin.BLE/Shared/ServiceBase.cs b/Source/Plugin.BLE/Shared/ServiceBase.cs index 3bce1952..9b741835 100644 --- a/Source/Plugin.BLE/Shared/ServiceBase.cs +++ b/Source/Plugin.BLE/Shared/ServiceBase.cs @@ -47,6 +47,7 @@ protected ServiceBase(IDevice device, TNativeService nativeService) /// /// Gets the characteristics of the service. /// + /// The token to monitor for cancellation requests. The default value is None. public async Task> GetCharacteristicsAsync(CancellationToken cancellationToken = default) { if (!_characteristics.Any()) From 00eec7eff4a886d274df83ad3893b66de9e16145 Mon Sep 17 00:00:00 2001 From: Rudolf Schneider Date: Sun, 11 Aug 2024 11:21:08 +0200 Subject: [PATCH 523/527] fixed xml documentation attribute warning second try --- Source/Plugin.BLE/Shared/ServiceBase.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Plugin.BLE/Shared/ServiceBase.cs b/Source/Plugin.BLE/Shared/ServiceBase.cs index 9b741835..e5586e6f 100644 --- a/Source/Plugin.BLE/Shared/ServiceBase.cs +++ b/Source/Plugin.BLE/Shared/ServiceBase.cs @@ -63,6 +63,7 @@ public async Task> GetCharacteristicsAsync(Cancel /// Gets the first characteristic with the Id . /// /// The id of the searched characteristic. + /// The token to monitor for cancellation requests. The default value is None. public async Task GetCharacteristicAsync(Guid id, CancellationToken cancellationToken = default) { var characteristics = await GetCharacteristicsAsync(cancellationToken); From 84722897e4f4440f07ff7c62dda1569b5d43a671 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 22 Oct 2024 21:31:46 +0200 Subject: [PATCH 524/527] GHA: update to MacOS 15 and XCode 16 --- .github/workflows/dotnet.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 87a87cc7..c7bf8d84 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -75,7 +75,7 @@ jobs: path: ./Source/*/nuget/*Plugin.BLE*.nupkg macBuild: - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v4 with: @@ -87,7 +87,7 @@ jobs: - name: Setup XCode uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '15' + xcode-version: latest-stable - name: Install .NET MAUI run: | dotnet nuget locals all --clear From f7fc088849a922d7aa1aa471592a5bace77a3043 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 22 Oct 2024 21:53:50 +0200 Subject: [PATCH 525/527] GHA: install Android tools on Mac --- .github/workflows/dotnet.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index c7bf8d84..68455f14 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -93,6 +93,8 @@ jobs: dotnet nuget locals all --clear dotnet workload install maui --source https://aka.ms/dotnet6/nuget/index.json --source https://api.nuget.org/v3/index.json dotnet workload install android ios maccatalyst tvos macos maui wasm-tools maui-maccatalyst --source https://aka.ms/dotnet6/nuget/index.json --source https://api.nuget.org/v3/index.json + - name: Install Android tools + run: ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "platforms;android-34" "platforms;android-33" "build-tools;34.0.0" "platform-tools" - name: Build Plugin.BLE NuGet run: dotnet build ./Source/Plugin.BLE/Plugin.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false - name: Build MVVMCross.Plugins.BLE NuGet @@ -113,9 +115,7 @@ jobs: - name: Install workloads run: dotnet workload install android wasm-tools maui-android - name: Install Android tools - run: | - ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager \ - --sdk_root=$ANDROID_SDK_ROOT "platform-tools" + run: ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "platform-tools" - name: Build Plugin.BLE NuGet run: dotnet build ./Source/Plugin.BLE/Plugin.BLE.csproj -p:Configuration=Release -t:restore,build,pack -p:Version=$(git describe) -p:ContinuousIntegrationBuild=true -p:DeterministicSourcePaths=false - name: Build MVVMCross.Plugins.BLE NuGet From d08ed9b3c36792ba92b37790201f6d0fbda04844 Mon Sep 17 00:00:00 2001 From: AndreasSchnappaufKT <112693239+AndreasSchnappaufKT@users.noreply.github.com> Date: Wed, 6 Nov 2024 09:28:30 +0100 Subject: [PATCH 526/527] Added CustomPairing (#1) * Added CustomPairing * added default case to PairingHandler --- Source/Plugin.BLE/Windows/Adapter.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index db633944..938127aa 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -49,10 +49,26 @@ public override async Task BondAsync(IDevice device) Trace.Message($"BondAsync cannot pair with: {device.Name}: {device.Id}"); return; } - DevicePairingResult result = await deviceInformation.Pairing.PairAsync(); + DeviceInformationCustomPairing p = deviceInformation.Pairing.Custom; + p.PairingRequested += PairingRequestedHandler; + var result = await p.PairAsync(DevicePairingKinds.ConfirmOnly); Trace.Message($"BondAsync pairing result was {result.Status} with: {device.Name}: {device.Id}"); } + private static void PairingRequestedHandler(DeviceInformationCustomPairing sender, DevicePairingRequestedEventArgs args) + { + switch (args.PairingKind) + { + case DevicePairingKinds.ConfirmOnly: + args.Accept(); + break; + + default: + Trace.Message("PairingKind " + args.PairingKind + " not supported"); + break; + } + } + protected override Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { var serviceUuids = scanFilterOptions?.ServiceUuids; From e40767937488f24962a980f4fd744e51c5628c07 Mon Sep 17 00:00:00 2001 From: AndreasSchnappaufKT <112693239+AndreasSchnappaufKT@users.noreply.github.com> Date: Fri, 15 Nov 2024 10:50:57 +0100 Subject: [PATCH 527/527] added PairingHandler Cleanup after PairAsync (#2) --- Source/Plugin.BLE/Windows/Adapter.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 938127aa..a5d5cd79 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -52,6 +52,7 @@ public override async Task BondAsync(IDevice device) DeviceInformationCustomPairing p = deviceInformation.Pairing.Custom; p.PairingRequested += PairingRequestedHandler; var result = await p.PairAsync(DevicePairingKinds.ConfirmOnly); + p.PairingRequested -= PairingRequestedHandler; Trace.Message($"BondAsync pairing result was {result.Status} with: {device.Name}: {device.Id}"); } @@ -58,12 +58,12 @@ public interface IAdapter /// /// List of last discovered devices. /// - IList DiscoveredDevices { get; } + IReadOnlyList DiscoveredDevices { get; } /// /// List of currently connected devices. /// - IList ConnectedDevices { get; } + IReadOnlyList ConnectedDevices { get; } /// /// Starts scanning for BLE devices that fulfill the . @@ -78,7 +78,7 @@ public interface IAdapter /// For android, key is ignored. /// The token to monitor for cancellation requests. The default value is None. /// A task that represents the asynchronous read operation. The Task will finish after the scan has ended. - Task StartScanningForDevicesAsync(Guid[] serviceUuids = null, Func deviceFilter = null, bool allowDuplicatesKey = false, CancellationToken cancellationToken = default(CancellationToken)); + Task StartScanningForDevicesAsync(Guid[] serviceUuids = null, Func deviceFilter = null, bool allowDuplicatesKey = false, CancellationToken cancellationToken = default); /// /// Stops scanning for BLE devices. @@ -95,7 +95,7 @@ public interface IAdapter /// A task that represents the asynchronous read operation. The Task will finish after the device has been connected successfuly. /// Thrown if the device connection fails. /// Thrown if the is null. - Task ConnectToDeviceAsync(IDevice device, ConnectParameters connectParameters = default(ConnectParameters), CancellationToken cancellationToken = default(CancellationToken)); + Task ConnectToDeviceAsync(IDevice device, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default); /// /// Disconnects from the . @@ -105,13 +105,13 @@ public interface IAdapter Task DisconnectDeviceAsync(IDevice device); /// - /// Connects to a device whith a known GUID wihtout scanning and if in range. Does not scan for devices. + /// Connects to a device with a known GUID without scanning and if in range. Does not scan for devices. /// /// /// Connection parameters. Contains platform specific parameters needed to achieved connection. The default value is None. /// The token to monitor for cancellation requests. The default value is None. /// - Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default(ConnectParameters), CancellationToken cancellationToken = default(CancellationToken)); + Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default); /// /// Returns all BLE devices connected to the system. For android the implementations uses getConnectedDevices(GATT) & getBondedDevices() @@ -125,6 +125,6 @@ public interface IAdapter /// /// IMPORTANT: Only considered by iOS due to platform limitations. Filters devices by advertised services. SET THIS VALUE FOR ANY RESULTS /// List of IDevices connected to the OS. In case of no devices the list is empty. - List GetSystemConnectedOrPairedDevices(Guid[] services = null); + IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null); } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Abstractions/Contracts/ICharacteristic.cs b/Source/Plugin.BLE.Abstractions/Contracts/ICharacteristic.cs index 8e787a97..8a0237d9 100644 --- a/Source/Plugin.BLE.Abstractions/Contracts/ICharacteristic.cs +++ b/Source/Plugin.BLE.Abstractions/Contracts/ICharacteristic.cs @@ -82,7 +82,7 @@ public interface ICharacteristic /// A task that represents the asynchronous read operation. The Result property will contain the read bytes. /// Thrown if characteristic doesn't support read. See: /// Thrown if the reading of the value failed. - Task ReadAsync(CancellationToken cancellationToken = default(CancellationToken)); + Task ReadAsync(CancellationToken cancellationToken = default); /// /// Sends as characteristic value to the device. @@ -97,7 +97,7 @@ public interface ICharacteristic /// /// Thrown if characteristic doesn't support write. See: /// Thrwon if is null. - Task WriteAsync(byte[] data, CancellationToken cancellationToken = default(CancellationToken)); + Task WriteAsync(byte[] data, CancellationToken cancellationToken = default); /// /// Starts listening for notify events on this characteristic. @@ -117,7 +117,7 @@ public interface ICharacteristic /// /// /// A task that represents the asynchronous read operation. The Result property will contain a list of descriptors. - Task> GetDescriptorsAsync(CancellationToken cancellationToken = default(CancellationToken)); + Task> GetDescriptorsAsync(CancellationToken cancellationToken = default); /// /// Gets the first descriptor with the Id . @@ -129,7 +129,7 @@ public interface ICharacteristic /// The Result property will contain the descriptor with the specified . /// If the descriptor doesn't exist, the Result will be null. /// - Task GetDescriptorAsync(Guid id, CancellationToken cancellationToken = default(CancellationToken)); + Task GetDescriptorAsync(Guid id, CancellationToken cancellationToken = default); } } diff --git a/Source/Plugin.BLE.Abstractions/Contracts/IDescriptor.cs b/Source/Plugin.BLE.Abstractions/Contracts/IDescriptor.cs index fa2e846b..4d828b9a 100644 --- a/Source/Plugin.BLE.Abstractions/Contracts/IDescriptor.cs +++ b/Source/Plugin.BLE.Abstractions/Contracts/IDescriptor.cs @@ -38,7 +38,7 @@ public interface IDescriptor /// A task that represents the asynchronous read operation. The Result property will contain the read bytes. /// Thrown if characteristic doesn't support read. See: /// Thrown if the reading of the value failed. - Task ReadAsync(CancellationToken cancellationToken = default(CancellationToken)); + Task ReadAsync(CancellationToken cancellationToken = default); /// /// Sends as characteristic value to the device. @@ -47,6 +47,6 @@ public interface IDescriptor /// /// Thrwon if is null. /// Thrwon if writing of the value failed. - Task WriteAsync(byte[] data, CancellationToken cancellationToken = default(CancellationToken)); + Task WriteAsync(byte[] data, CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Abstractions/Contracts/IDevice.cs b/Source/Plugin.BLE.Abstractions/Contracts/IDevice.cs index 4ffddbd2..5e9194d8 100644 --- a/Source/Plugin.BLE.Abstractions/Contracts/IDevice.cs +++ b/Source/Plugin.BLE.Abstractions/Contracts/IDevice.cs @@ -52,7 +52,7 @@ public interface IDevice : IDisposable /// /// /// A task that represents the asynchronous read operation. The Result property will contain a list of all available services. - Task> GetServicesAsync(CancellationToken cancellationToken = default(CancellationToken)); + Task> GetServicesAsync(CancellationToken cancellationToken = default); /// /// Gets the first service with the Id . @@ -64,7 +64,7 @@ public interface IDevice : IDisposable /// The Result property will contain the service with the specified . /// If the service doesn't exist, the Result will be null. /// - Task GetServiceAsync(Guid id, CancellationToken cancellationToken = default(CancellationToken)); + Task GetServiceAsync(Guid id, CancellationToken cancellationToken = default); /// /// Updates the rssi value. diff --git a/Source/Plugin.BLE.Abstractions/Contracts/IService.cs b/Source/Plugin.BLE.Abstractions/Contracts/IService.cs index 996be58f..ec317521 100644 --- a/Source/Plugin.BLE.Abstractions/Contracts/IService.cs +++ b/Source/Plugin.BLE.Abstractions/Contracts/IService.cs @@ -34,7 +34,7 @@ public interface IService : IDisposable /// Gets the characteristics of the service. /// /// A task that represents the asynchronous read operation. The Result property will contain a list of characteristics. - Task> GetCharacteristicsAsync(); + Task> GetCharacteristicsAsync(); /// /// Gets the first characteristic with the Id . diff --git a/Source/Plugin.BLE.Abstractions/DescriptorBase.cs b/Source/Plugin.BLE.Abstractions/DescriptorBase.cs index 113c36e0..926e4315 100644 --- a/Source/Plugin.BLE.Abstractions/DescriptorBase.cs +++ b/Source/Plugin.BLE.Abstractions/DescriptorBase.cs @@ -22,14 +22,14 @@ protected DescriptorBase(ICharacteristic characteristic) Characteristic = characteristic; } - public Task ReadAsync(CancellationToken cancellationToken = default(CancellationToken)) + public Task ReadAsync(CancellationToken cancellationToken = default) { return ReadNativeAsync(); } protected abstract Task ReadNativeAsync(); - public Task WriteAsync(byte[] data, CancellationToken cancellationToken = default(CancellationToken)) + public Task WriteAsync(byte[] data, CancellationToken cancellationToken = default) { if (data == null) { diff --git a/Source/Plugin.BLE.Abstractions/DeviceBase.cs b/Source/Plugin.BLE.Abstractions/DeviceBase.cs index e27f2ee1..a922f7c5 100644 --- a/Source/Plugin.BLE.Abstractions/DeviceBase.cs +++ b/Source/Plugin.BLE.Abstractions/DeviceBase.cs @@ -51,7 +51,7 @@ protected DeviceBase(IAdapter adapter) Adapter = adapter; } - public async Task> GetServicesAsync(CancellationToken cancellationToken = default(CancellationToken)) + public async Task> GetServicesAsync(CancellationToken cancellationToken = default) { if (!KnownServices.Any()) { @@ -64,7 +64,7 @@ protected DeviceBase(IAdapter adapter) return KnownServices; } - public async Task GetServiceAsync(Guid id, CancellationToken cancellationToken = default(CancellationToken)) + public async Task GetServiceAsync(Guid id, CancellationToken cancellationToken = default) { var services = await GetServicesAsync(cancellationToken); return services.ToList().FirstOrDefault(x => x.Id == id); @@ -82,7 +82,7 @@ public bool UpdateConnectionInterval(ConnectionInterval interval) public abstract Task UpdateRssiAsync(); protected abstract DeviceState GetState(); - protected abstract Task> GetServicesNativeAsync(); + protected abstract Task> GetServicesNativeAsync(); protected abstract Task RequestMtuNativeAsync(int requestValue); protected abstract bool UpdateConnectionIntervalNative(ConnectionInterval interval); diff --git a/Source/Plugin.BLE.Abstractions/Extensions/AdapterExtenstion.cs b/Source/Plugin.BLE.Abstractions/Extensions/AdapterExtenstion.cs index adb1215d..7981c8ea 100644 --- a/Source/Plugin.BLE.Abstractions/Extensions/AdapterExtenstion.cs +++ b/Source/Plugin.BLE.Abstractions/Extensions/AdapterExtenstion.cs @@ -29,7 +29,7 @@ public static Task StartScanningForDevicesAsync(this IAdapter adapter, Cancellat /// Requested service Ids. /// The token to monitor for cancellation requests. The default value is None. /// A task that represents the asynchronous read operation. The Task will finish after the scan has ended. - public static Task StartScanningForDevicesAsync(this IAdapter adapter, Guid[] serviceUuids, CancellationToken cancellationToken = default(CancellationToken)) + public static Task StartScanningForDevicesAsync(this IAdapter adapter, Guid[] serviceUuids, CancellationToken cancellationToken = default) { return adapter.StartScanningForDevicesAsync(serviceUuids, null, cancellationToken: cancellationToken); } @@ -42,17 +42,17 @@ public static Task StartScanningForDevicesAsync(this IAdapter adapter, Cancellat /// Function that filters the devices. /// The token to monitor for cancellation requests. The default value is None. /// A task that represents the asynchronous read operation. The Task will finish after the scan has ended. - public static Task StartScanningForDevicesAsync(this IAdapter adapter, Func deviceFilter, CancellationToken cancellationToken = default(CancellationToken)) + public static Task StartScanningForDevicesAsync(this IAdapter adapter, Func deviceFilter, CancellationToken cancellationToken = default) { return adapter.StartScanningForDevicesAsync(deviceFilter: deviceFilter, cancellationToken: cancellationToken); } - public static Task DiscoverDeviceAsync(this IAdapter adapter, Guid deviceId, CancellationToken cancellationToken = default(CancellationToken)) + public static Task DiscoverDeviceAsync(this IAdapter adapter, Guid deviceId, CancellationToken cancellationToken = default) { return DiscoverDeviceAsync(adapter, device => device.Id == deviceId, cancellationToken); } - public static async Task DiscoverDeviceAsync(this IAdapter adapter, Func deviceFilter, CancellationToken cancellationToken = default(CancellationToken)) + public static async Task DiscoverDeviceAsync(this IAdapter adapter, Func deviceFilter, CancellationToken cancellationToken = default) { var device = adapter.DiscoveredDevices.FirstOrDefault(deviceFilter); if (device != null) diff --git a/Source/Plugin.BLE.Abstractions/ServiceBase.cs b/Source/Plugin.BLE.Abstractions/ServiceBase.cs index 9322369c..8558c90f 100644 --- a/Source/Plugin.BLE.Abstractions/ServiceBase.cs +++ b/Source/Plugin.BLE.Abstractions/ServiceBase.cs @@ -20,17 +20,17 @@ protected ServiceBase(IDevice device) Device = device; } - public async Task> GetCharacteristicsAsync() + public async Task> GetCharacteristicsAsync() { if (!_characteristics.Any()) - { + { _characteristics.AddRange(await GetCharacteristicsNativeAsync()); } // make a copy here so that the caller cant modify the original list return _characteristics.ToList(); } - + public async Task GetCharacteristicAsync(Guid id) { var characteristics = await GetCharacteristicsAsync(); @@ -41,7 +41,7 @@ public async Task GetCharacteristicAsync(Guid id) public virtual void Dispose() { - + } } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs b/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs index 191f5f2a..a6a90a0c 100644 --- a/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs +++ b/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs @@ -8,7 +8,6 @@ namespace Plugin.BLE.Abstractions.Utils { internal class FakeAdapter : AdapterBase { - public override IList ConnectedDevices { get; } = new List(); public override Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters, CancellationToken cancellationToken) { TraceUnavailability(); @@ -42,7 +41,7 @@ private static void TraceUnavailability() Trace.Message("Bluetooth LE is not available on this device. Nothing will happen - ever!"); } - public override List GetSystemConnectedOrPairedDevices(Guid[] services = null) + public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null) { TraceUnavailability(); return new List(); diff --git a/Source/Plugin.BLE.Abstractions/Utils/TaskBuilder.cs b/Source/Plugin.BLE.Abstractions/Utils/TaskBuilder.cs index f873d3a1..ded1cff3 100644 --- a/Source/Plugin.BLE.Abstractions/Utils/TaskBuilder.cs +++ b/Source/Plugin.BLE.Abstractions/Utils/TaskBuilder.cs @@ -11,7 +11,7 @@ public static Task FromEvent( Func, Action, TEventHandler> getCompleteHandler, Action subscribeComplete, Action unsubscribeComplete, - CancellationToken token = default(CancellationToken)) + CancellationToken token = default) { return FromEvent( execute, getCompleteHandler, subscribeComplete, unsubscribeComplete, @@ -29,7 +29,7 @@ public static async Task FromEvent, TRejectHandler> getRejectHandler, Action subscribeReject, Action unsubscribeReject, - CancellationToken token = default(CancellationToken)) + CancellationToken token = default) { var tcs = new TaskCompletionSource(); Action complete = args => tcs.TrySetResult(args); diff --git a/Source/Plugin.BLE.Android/Adapter.cs b/Source/Plugin.BLE.Android/Adapter.cs index b69a242d..802ef039 100644 --- a/Source/Plugin.BLE.Android/Adapter.cs +++ b/Source/Plugin.BLE.Android/Adapter.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -23,19 +24,11 @@ public class Adapter : AdapterBase private readonly Api18BleScanCallback _api18ScanCallback; private readonly Api21BleScanCallback _api21ScanCallback; - public override IList ConnectedDevices => ConnectedDeviceRegistry.Values.ToList(); - - /// - /// Used to store all connected devices - /// - public Dictionary ConnectedDeviceRegistry { get; } - public Adapter(BluetoothManager bluetoothManager) { _bluetoothManager = bluetoothManager; _bluetoothAdapter = bluetoothManager.Adapter; - ConnectedDeviceRegistry = new Dictionary(); // TODO: bonding //var bondStatusBroadcastReceiver = new BondStatusBroadcastReceiver(); @@ -60,9 +53,6 @@ public Adapter(BluetoothManager bluetoothManager) protected override Task StartScanningForDevicesNativeAsync(Guid[] serviceUuids, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { - // clear out the list - DiscoveredDevices.Clear(); - if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop) { StartScanningOld(serviceUuids); @@ -164,7 +154,7 @@ protected override void DisconnectDeviceNative(IDevice device) return device; } - public override List GetSystemConnectedOrPairedDevices(Guid[] services = null) + public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null) { if (services != null) { diff --git a/Source/Plugin.BLE.Android/Characteristic.cs b/Source/Plugin.BLE.Android/Characteristic.cs index 0e48d718..2271e141 100644 --- a/Source/Plugin.BLE.Android/Characteristic.cs +++ b/Source/Plugin.BLE.Android/Characteristic.cs @@ -38,9 +38,9 @@ public Characteristic(BluetoothGattCharacteristic nativeCharacteristic, Bluetoot _gattCallback = gattCallback; } - protected override Task> GetDescriptorsNativeAsync() + protected override Task> GetDescriptorsNativeAsync() { - return Task.FromResult>(_nativeCharacteristic.Descriptors.Select(item => new Descriptor(item, _gatt, _gattCallback, this)).Cast().ToList()); + return Task.FromResult>(_nativeCharacteristic.Descriptors.Select(item => new Descriptor(item, _gatt, _gattCallback, this)).Cast().ToList()); } protected override async Task ReadNativeAsync() diff --git a/Source/Plugin.BLE.Android/Device.cs b/Source/Plugin.BLE.Android/Device.cs index 56c954ca..c93bcf3b 100644 --- a/Source/Plugin.BLE.Android/Device.cs +++ b/Source/Plugin.BLE.Android/Device.cs @@ -62,18 +62,18 @@ public void Update(BluetoothDevice nativeDevice, BluetoothGatt gatt) public override object NativeDevice => BluetoothDevice; internal bool IsOperationRequested { get; set; } - protected override async Task> GetServicesNativeAsync() + protected override async Task> GetServicesNativeAsync() { if (_gattCallback == null || _gatt == null) { - return Enumerable.Empty(); + return new List(); } - return await TaskBuilder.FromEvent, EventHandler, EventHandler>( + return await TaskBuilder.FromEvent, EventHandler, EventHandler>( execute: () => _gatt.DiscoverServices(), getCompleteHandler: (complete, reject) => ((sender, args) => { - complete(_gatt.Services.Select(service => new Service(service, _gatt, _gattCallback, this))); + complete(_gatt.Services.Select(service => new Service(service, _gatt, _gattCallback, this)).ToList()); }), subscribeComplete: handler => _gattCallback.ServicesDiscovered += handler, unsubscribeComplete: handler => _gattCallback.ServicesDiscovered -= handler, diff --git a/Source/Plugin.BLE.Android/GattCallback.cs b/Source/Plugin.BLE.Android/GattCallback.cs index 1d97cb6b..fae9840c 100644 --- a/Source/Plugin.BLE.Android/GattCallback.cs +++ b/Source/Plugin.BLE.Android/GattCallback.cs @@ -67,7 +67,7 @@ public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus stat //Found so we can remove it _device.IsOperationRequested = false; - _adapter.ConnectedDeviceRegistry.Remove(gatt.Device.Address); + _adapter.ConnectedDeviceRegistry.TryRemove(gatt.Device.Address, out _); if (status != GattStatus.Success && (int)status != 19) { @@ -87,7 +87,7 @@ public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus stat //connection must have been lost, because the callback was not triggered by calling disconnect Trace.Message($"Disconnected '{_device.Name}' by lost connection"); - _adapter.ConnectedDeviceRegistry.Remove(gatt.Device.Address); + _adapter.ConnectedDeviceRegistry.TryRemove(gatt.Device.Address, out _); _adapter.HandleDisconnectedDevice(false, _device); // inform pending tasks @@ -175,6 +175,8 @@ public override void OnCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCh { base.OnCharacteristicChanged(gatt, characteristic); + Trace.Message("OnCharacteristicChanged: value {0}", characteristic.GetValue().ToHexString()); + CharacteristicValueUpdated?.Invoke(this, new CharacteristicReadCallbackEventArgs(characteristic)); } diff --git a/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs b/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs index d6fc78df..ccb6eff2 100644 --- a/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs +++ b/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs @@ -37,7 +37,7 @@ public CharacteristicMock(IService service = null) : base(service) public override CharacteristicPropertyType Properties => MockPropterties; - protected override Task> GetDescriptorsNativeAsync() + protected override Task> GetDescriptorsNativeAsync() { throw new NotImplementedException(); } diff --git a/Source/Plugin.BLE.iOS/Adapter.cs b/Source/Plugin.BLE.iOS/Adapter.cs index 90eede5c..b5728cfa 100755 --- a/Source/Plugin.BLE.iOS/Adapter.cs +++ b/Source/Plugin.BLE.iOS/Adapter.cs @@ -22,10 +22,6 @@ public class Adapter : AdapterBase /// Helps to detect connection lost events. /// private readonly IDictionary _deviceOperationRegistry = new ConcurrentDictionary(); - private readonly IDictionary _deviceConnectionRegistry = new ConcurrentDictionary(); - - public override IList ConnectedDevices => _deviceConnectionRegistry.Values.ToList(); - public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCentralManagerDelegate) { @@ -57,12 +53,13 @@ public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCe //notify subscribers about disconnection if (_centralManager.State == CBCentralManagerState.PoweredOff) { - foreach (var device in _deviceConnectionRegistry.Values.ToList()) + foreach (var device in ConnectedDeviceRegistry.Values.ToList()) { - _deviceConnectionRegistry.Remove(device.Id.ToString()); ((Device)device).ClearServices(); HandleDisconnectedDevice(false, device); } + + ConnectedDeviceRegistry.Clear(); } }; @@ -85,7 +82,7 @@ public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCe device = new Device(this, e.Peripheral, _bleCentralManagerDelegate); } - _deviceConnectionRegistry[guid] = device; + ConnectedDeviceRegistry[guid] = device; HandleConnectedDevice(device); }; @@ -108,16 +105,16 @@ public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCe _deviceOperationRegistry.Remove(stringId); } - // check if it is a peripheral disconnection, which would be treated as normal - if(e.Error != null && e.Error.Code == 7 && e.Error.Domain == "CBErrorDomain") - { - isNormalDisconnect = true; - } + // check if it is a peripheral disconnection, which would be treated as normal + if (e.Error != null && e.Error.Code == 7 && e.Error.Domain == "CBErrorDomain") + { + isNormalDisconnect = true; + } // remove from connected devices - if (_deviceConnectionRegistry.TryGetValue(stringId, out foundDevice)) + if (!ConnectedDeviceRegistry.TryRemove(stringId, out foundDevice)) { - _deviceConnectionRegistry.Remove(stringId); + Trace.Message($"Failed to remove {foundDevice.Id}-{foundDevice.Name} from device connected registry"); } foundDevice = foundDevice ?? new Device(this, e.Peripheral, _bleCentralManagerDelegate); @@ -164,7 +161,6 @@ protected override async Task StartScanningForDevicesNativeAsync(Guid[] serviceU Trace.Message("Adapter: Scanning for " + serviceCbuuids.First()); } - DiscoveredDevices.Clear(); _centralManager.ScanForPeripherals(serviceCbuuids, new PeripheralScanningOptions { AllowDuplicatesKey = allowDuplicatesKey }); } @@ -249,7 +245,7 @@ private static Guid ParseDeviceGuid(CBPeripheral peripherial) return device; } - public override List GetSystemConnectedOrPairedDevices(Guid[] services = null) + public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null) { CBUUID[] serviceUuids = null; if (services != null) diff --git a/Source/Plugin.BLE.iOS/Characteristic.cs b/Source/Plugin.BLE.iOS/Characteristic.cs index ddf34086..431199d7 100644 --- a/Source/Plugin.BLE.iOS/Characteristic.cs +++ b/Source/Plugin.BLE.iOS/Characteristic.cs @@ -49,11 +49,11 @@ public Characteristic(CBCharacteristic nativeCharacteristic, CBPeripheral parent _bleCentralManagerDelegate = bleCentralManagerDelegate; } - protected override Task> GetDescriptorsNativeAsync() + protected override Task> GetDescriptorsNativeAsync() { var exception = new Exception($"Device '{Service.Device.Id}' disconnected while fetching descriptors for characteristic with {Id}."); - return TaskBuilder.FromEvent, EventHandler, EventHandler>( + return TaskBuilder.FromEvent, EventHandler, EventHandler>( execute: () => { if (_parentDevice.State != CBPeripheralState.Connected) diff --git a/Source/Plugin.BLE.iOS/Device.cs b/Source/Plugin.BLE.iOS/Device.cs index 297bd120..1a554c6e 100644 --- a/Source/Plugin.BLE.iOS/Device.cs +++ b/Source/Plugin.BLE.iOS/Device.cs @@ -46,11 +46,11 @@ private void OnNameUpdated(object sender, EventArgs e) Trace.Message("Device changed name: {0}", Name); } - protected override Task> GetServicesNativeAsync() + protected override Task> GetServicesNativeAsync() { var exception = new Exception($"Device {Name} disconnected while fetching services."); - return TaskBuilder.FromEvent, EventHandler, EventHandler>( + return TaskBuilder.FromEvent, EventHandler, EventHandler>( execute: () => { if (_nativeDevice.State != CBPeripheralState.Connected) From e78533e8eded179f12df7815f5c093cfc3c00879 Mon Sep 17 00:00:00 2001 From: xabre Date: Mon, 5 Aug 2019 13:03:00 +0200 Subject: [PATCH 075/527] Some minor cleanup --- Source/Plugin.BLE.Abstractions/DescriptorBase.cs | 3 --- Source/Plugin.BLE.Android/Characteristic.cs | 6 +++--- Source/Plugin.BLE.Android/Descriptor.cs | 2 +- Source/Plugin.BLE.Android/GattCallback.cs | 2 +- Source/Plugin.BLE.iOS/Descriptor.cs | 1 - 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Source/Plugin.BLE.Abstractions/DescriptorBase.cs b/Source/Plugin.BLE.Abstractions/DescriptorBase.cs index 926e4315..861f5d78 100644 --- a/Source/Plugin.BLE.Abstractions/DescriptorBase.cs +++ b/Source/Plugin.BLE.Abstractions/DescriptorBase.cs @@ -40,8 +40,5 @@ public Task WriteAsync(byte[] data, CancellationToken cancellationToken = defaul } protected abstract Task WriteNativeAsync(byte[] data); - - - } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Android/Characteristic.cs b/Source/Plugin.BLE.Android/Characteristic.cs index 2271e141..cb3cdf85 100644 --- a/Source/Plugin.BLE.Android/Characteristic.cs +++ b/Source/Plugin.BLE.Android/Characteristic.cs @@ -131,14 +131,14 @@ protected override async Task StartUpdatesNativeAsync() var descriptor = descriptors.FirstOrDefault(d => d.Id.Equals(ClientCharacteristicConfigurationDescriptorId)) ?? descriptors.FirstOrDefault(); // fallback just in case manufacturer forgot - //has to have one of these (either indicate or notify) - if (Properties.HasFlag(CharacteristicPropertyType.Indicate)) + // has to have one of these (either indicate or notify) + if (descriptor != null && Properties.HasFlag(CharacteristicPropertyType.Indicate)) { await descriptor.WriteAsync(BluetoothGattDescriptor.EnableIndicationValue.ToArray()); Trace.Message("Descriptor set value: INDICATE"); } - if (Properties.HasFlag(CharacteristicPropertyType.Notify)) + if (descriptor != null && Properties.HasFlag(CharacteristicPropertyType.Notify)) { await descriptor.WriteAsync(BluetoothGattDescriptor.EnableNotificationValue.ToArray()); Trace.Message("Descriptor set value: NOTIFY"); diff --git a/Source/Plugin.BLE.Android/Descriptor.cs b/Source/Plugin.BLE.Android/Descriptor.cs index 8a1b79de..89e79bdd 100644 --- a/Source/Plugin.BLE.Android/Descriptor.cs +++ b/Source/Plugin.BLE.Android/Descriptor.cs @@ -73,7 +73,7 @@ protected override async Task ReadNativeAsync() unsubscribeComplete: handler => _gattCallback.DescriptorValueRead -= handler, getRejectHandler: reject => ((sender, args) => { - reject(new Exception($"Device '{Characteristic.Service.Device.Id}' disconnected while reading descripor with {Id}.")); + reject(new Exception($"Device '{Characteristic.Service.Device.Id}' disconnected while reading descriptor with {Id}.")); }), subscribeReject: handler => _gattCallback.ConnectionInterrupted += handler, unsubscribeReject: handler => _gattCallback.ConnectionInterrupted -= handler); diff --git a/Source/Plugin.BLE.Android/GattCallback.cs b/Source/Plugin.BLE.Android/GattCallback.cs index fae9840c..41ba8d12 100644 --- a/Source/Plugin.BLE.Android/GattCallback.cs +++ b/Source/Plugin.BLE.Android/GattCallback.cs @@ -245,7 +245,7 @@ private Exception GetExceptionFromGattStatus(GattStatus status) case GattStatus.ReadNotPermitted: case GattStatus.RequestNotSupported: case GattStatus.WriteNotPermitted: - exception = new Exception(status.ToString()); + exception = new Exception($"GattStatus: {(int)status} - {status.ToString()}"); break; case GattStatus.Success: break; diff --git a/Source/Plugin.BLE.iOS/Descriptor.cs b/Source/Plugin.BLE.iOS/Descriptor.cs index f5f7a7ea..6d9ce9f2 100644 --- a/Source/Plugin.BLE.iOS/Descriptor.cs +++ b/Source/Plugin.BLE.iOS/Descriptor.cs @@ -92,7 +92,6 @@ protected override Task WriteNativeAsync(byte[] data) { if (_parentDevice.State != CBPeripheralState.Connected) throw exception; - _parentDevice.WriteValue(NSData.FromArray(data), _nativeDescriptor); }, getCompleteHandler: (complete, reject) => (sender, args) => From 511f29e897fe49d47ac5dc04eabc53579662cc0b Mon Sep 17 00:00:00 2001 From: Adrian Seceleanu Date: Tue, 6 Aug 2019 22:23:10 +0200 Subject: [PATCH 076/527] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a4be9827..81817a98 100644 --- a/README.md +++ b/README.md @@ -311,6 +311,8 @@ The BLE API implementation (especially on **Android**) has the following limitat - [Android Bluetooth LE guideline](https://developer.android.com/guide/topics/connectivity/bluetooth-le.html) - [iOS CoreBluetooth Best Practices](https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForInteractingWithARemotePeripheralDevice/BestPracticesForInteractingWithARemotePeripheralDevice.html) +- [iOS CoreBluetooth Background Modes] +(https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW7) - [MvvmCross](https://github.com/MvvmCross) - [Monkey Robotics](https://github.com/xamarin/Monkey.Robotics) From c7fa014808dee4f20786a07638a52bbb509bfa45 Mon Sep 17 00:00:00 2001 From: Adrian Seceleanu Date: Tue, 6 Aug 2019 22:23:38 +0200 Subject: [PATCH 077/527] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 81817a98..6437a0d5 100644 --- a/README.md +++ b/README.md @@ -311,8 +311,7 @@ The BLE API implementation (especially on **Android**) has the following limitat - [Android Bluetooth LE guideline](https://developer.android.com/guide/topics/connectivity/bluetooth-le.html) - [iOS CoreBluetooth Best Practices](https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForInteractingWithARemotePeripheralDevice/BestPracticesForInteractingWithARemotePeripheralDevice.html) -- [iOS CoreBluetooth Background Modes] -(https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW7) +- [iOS CoreBluetooth Background Modes](https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW7) - [MvvmCross](https://github.com/MvvmCross) - [Monkey Robotics](https://github.com/xamarin/Monkey.Robotics) From 5530e20d77fb00b41fd97aa46c476aed6a1b8000 Mon Sep 17 00:00:00 2001 From: xabre Date: Thu, 8 Aug 2019 22:50:18 +0200 Subject: [PATCH 078/527] Updated libraries. Cleanup first pass. --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 2 +- Source/BLE.Client/BLE.Client.UWP/App.xaml | 4 +- Source/BLE.Client/BLE.Client.UWP/App.xaml.cs | 89 +-------- .../Assets/LargeTile.scale-100.png | Bin 0 -> 10900 bytes .../Assets/LargeTile.scale-125.png | Bin 0 -> 14017 bytes .../Assets/LargeTile.scale-150.png | Bin 0 -> 16948 bytes .../Assets/LargeTile.scale-200.png | Bin 0 -> 23525 bytes .../Assets/LargeTile.scale-400.png | Bin 0 -> 55462 bytes .../Assets/SmallTile.scale-100.png | Bin 0 -> 3248 bytes .../Assets/SmallTile.scale-125.png | Bin 0 -> 4326 bytes .../Assets/SmallTile.scale-150.png | Bin 0 -> 5088 bytes .../Assets/SmallTile.scale-200.png | Bin 0 -> 6768 bytes .../Assets/SmallTile.scale-400.png | Bin 0 -> 14421 bytes .../Assets/SplashScreen.scale-100.png | Bin 0 -> 11606 bytes .../Assets/SplashScreen.scale-125.png | Bin 0 -> 14705 bytes .../Assets/SplashScreen.scale-150.png | Bin 0 -> 18062 bytes .../Assets/SplashScreen.scale-200.png | Bin 7700 -> 25651 bytes .../Assets/SplashScreen.scale-400.png | Bin 0 -> 60950 bytes .../Assets/Square150x150Logo.scale-100.png | Bin 0 -> 5061 bytes .../Assets/Square150x150Logo.scale-125.png | Bin 0 -> 6348 bytes .../Assets/Square150x150Logo.scale-150.png | Bin 0 -> 7833 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 2937 -> 10744 bytes .../Assets/Square150x150Logo.scale-400.png | Bin 0 -> 22766 bytes ...x44Logo.altform-unplated_targetsize-16.png | Bin 0 -> 965 bytes ...44Logo.altform-unplated_targetsize-256.png | Bin 0 -> 23974 bytes ...x44Logo.altform-unplated_targetsize-32.png | Bin 0 -> 2541 bytes ...x44Logo.altform-unplated_targetsize-48.png | Bin 0 -> 3957 bytes .../Assets/Square44x44Logo.scale-100.png | Bin 0 -> 2667 bytes .../Assets/Square44x44Logo.scale-125.png | Bin 0 -> 3506 bytes .../Assets/Square44x44Logo.scale-150.png | Bin 0 -> 4452 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 1647 -> 6143 bytes .../Assets/Square44x44Logo.scale-400.png | Bin 0 -> 12419 bytes .../Assets/Square44x44Logo.targetsize-16.png | Bin 0 -> 696 bytes .../Assets/Square44x44Logo.targetsize-24.png | Bin 0 -> 1167 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 1255 -> 1696 bytes .../Assets/Square44x44Logo.targetsize-256.png | Bin 0 -> 18428 bytes .../Assets/Square44x44Logo.targetsize-32.png | Bin 0 -> 1771 bytes .../Assets/Square44x44Logo.targetsize-48.png | Bin 0 -> 3051 bytes .../{StoreLogo.png => StoreLogo.backup.png} | Bin .../Assets/StoreLogo.scale-100.png | Bin 0 -> 4220 bytes .../Assets/StoreLogo.scale-125.png | Bin 0 -> 5452 bytes .../Assets/StoreLogo.scale-150.png | Bin 0 -> 6571 bytes .../Assets/StoreLogo.scale-200.png | Bin 0 -> 8811 bytes .../Assets/StoreLogo.scale-400.png | Bin 0 -> 18254 bytes .../Assets/Wide310x150Logo.scale-100.png | Bin 0 -> 5313 bytes .../Assets/Wide310x150Logo.scale-125.png | Bin 0 -> 6840 bytes .../Assets/Wide310x150Logo.scale-150.png | Bin 0 -> 8445 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 3204 -> 11606 bytes .../Assets/Wide310x150Logo.scale-400.png | Bin 0 -> 25651 bytes .../BLE.Client.UWP/BLE.Client.UWP.csproj | 64 +++++-- .../BLE.Client/BLE.Client.UWP/DebugTrace.cs | 31 --- .../BLE.Client/BLE.Client.UWP/MainPage.xaml | 5 +- .../BLE.Client.UWP/MainPage.xaml.cs | 16 +- .../BLE.Client.UWP/Package.appxmanifest | 2 +- Source/BLE.Client/BLE.Client.UWP/Setup.cs | 47 +---- .../BLE.Client.iOS/BLE.Client.iOS.csproj | 2 +- .../BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- .../CharacteristicDetailViewModel.cs | 8 +- .../CharacteristicBase.cs | 2 +- Source/Plugin.BLE.UWP/Adapter.cs | 89 ++++----- Source/Plugin.BLE.UWP/Characteristic.cs | 177 +++++++++--------- Source/Plugin.BLE.UWP/CrossBluetoothLE.cs | 45 ----- Source/Plugin.BLE.UWP/DefaultTrace.cs | 7 +- Source/Plugin.BLE.UWP/Descriptor.cs | 56 +++--- Source/Plugin.BLE.UWP/Device.cs | 28 ++- Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj | 8 +- Source/Plugin.BLE.UWP/Service.cs | 23 +-- 67 files changed, 264 insertions(+), 443 deletions(-) create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-100.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-125.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-150.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-200.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-400.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-100.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-125.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-150.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-200.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-400.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-100.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-125.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-150.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-400.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-100.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-125.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-150.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-400.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-16.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-256.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-32.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-48.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-100.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-125.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-150.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-400.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-16.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-24.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-256.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-32.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-48.png rename Source/BLE.Client/BLE.Client.UWP/Assets/{StoreLogo.png => StoreLogo.backup.png} (100%) create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-100.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-125.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-150.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-200.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-400.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-100.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-125.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-150.png create mode 100644 Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-400.png delete mode 100644 Source/BLE.Client/BLE.Client.UWP/DebugTrace.cs delete mode 100644 Source/Plugin.BLE.UWP/CrossBluetoothLE.cs diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index 70aa8470..ab8743a0 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -131,7 +131,7 @@ 3.1.1 - 4.1.0.581479 + 4.1.0.673156 diff --git a/Source/BLE.Client/BLE.Client.UWP/App.xaml b/Source/BLE.Client/BLE.Client.UWP/App.xaml index 27e58fbb..5758e1da 100644 --- a/Source/BLE.Client/BLE.Client.UWP/App.xaml +++ b/Source/BLE.Client/BLE.Client.UWP/App.xaml @@ -1,8 +1,8 @@ - - + diff --git a/Source/BLE.Client/BLE.Client.UWP/App.xaml.cs b/Source/BLE.Client/BLE.Client.UWP/App.xaml.cs index cf6e059d..346d0e71 100644 --- a/Source/BLE.Client/BLE.Client.UWP/App.xaml.cs +++ b/Source/BLE.Client/BLE.Client.UWP/App.xaml.cs @@ -1,26 +1,11 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; -using Windows.ApplicationModel; -using Windows.ApplicationModel.Activation; -using Windows.Foundation; -using Windows.Foundation.Collections; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; -using Windows.UI.Xaml.Media; -using Windows.UI.Xaml.Navigation; +using MvvmCross.Forms.Platforms.Uap.Views; namespace BLE.Client.UWP { /// /// Provides application-specific behavior to supplement the default Application class. /// - sealed partial class App : Application + sealed partial class App : UWPApplication { /// /// Initializes the singleton application object. This is the first line of authored code @@ -29,75 +14,11 @@ sealed partial class App : Application public App() { this.InitializeComponent(); - this.Suspending += OnSuspending; - } - - /// - /// Invoked when the application is launched normally by the end user. Other entry points - /// will be used such as when the application is launched to open a specific file. - /// - /// Details about the launch request and process. - protected override void OnLaunched(LaunchActivatedEventArgs e) - { - Frame rootFrame = Window.Current.Content as Frame; - - // Do not repeat app initialization when the Window already has content, - // just ensure that the window is active - if (rootFrame == null) - { - // Create a Frame to act as the navigation context and navigate to the first page - rootFrame = new Frame(); - - rootFrame.NavigationFailed += OnNavigationFailed; - - var setup = new Setup(rootFrame, e); - setup.Initialize(); - - if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) - { - //TODO: Load state from previously suspended application - } - - // Place the frame in the current Window - Window.Current.Content = rootFrame; - } - - if (e.PrelaunchActivated == false) - { - if (rootFrame.Content == null) - { - // When the navigation stack isn't restored navigate to the first page, - // configuring the new page by passing required information as a navigation - // parameter - rootFrame.Navigate(typeof(MainPage), e.Arguments); - } - // Ensure the current window is active - Window.Current.Activate(); - } } + } - /// - /// Invoked when Navigation to a certain page fails - /// - /// The Frame which failed navigation - /// Details about the navigation failure - void OnNavigationFailed(object sender, NavigationFailedEventArgs e) - { - throw new Exception("Failed to load Page " + e.SourcePageType.FullName); - } + public partial class UWPApplication : MvxWindowsApplication + { - /// - /// Invoked when application execution is being suspended. Application state is saved - /// without knowing whether the application will be terminated or resumed with the contents - /// of memory still intact. - /// - /// The source of the suspend request. - /// Details about the suspend request. - private void OnSuspending(object sender, SuspendingEventArgs e) - { - var deferral = e.SuspendingOperation.GetDeferral(); - //TODO: Save application state and stop any background activity - deferral.Complete(); - } } } diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-100.png b/Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..62f8931b33e29639c682c926f45d1c982f20d3a8 GIT binary patch literal 10900 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-200.png b/Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..22cc195d929da48d8f01322015997cc0f372908c GIT binary patch literal 23525 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

%~)nO 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-150.png b/Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0df8c47e1262feead2d901ca30bc124bcd8c24 GIT binary patch literal 5088 zcmb`LRa6v!)`e+lB!)&rLb^qe1}Q<19%@LD?igA?LI#PUk#3m589?ch7*d898tLvv z(%<{|Ki~VX&we-$XPtG{I&1Ck^E+)dGGazzEG#TC4fWT0|J?aMA|&`%JvxF({~3{o zx`{Uy7A@z0gsq{+ag2pU4b^z9XaLSR$axe@GdYLK&pK#fBVxT`eEd%FF;9fmV+=_k zJ`WXD$*e9<9N^tkZr+P$Ptzg9#D&B*io$G)Ph)M^#3S`yXDeW_^+#b2q`jBKzLK?k zeXH)5@_YDxbL?(LqE2i}eoGd8n1m8IKRqfo7lC}sK%uNe#v$NafpuJvEXsN(jWoEsF#KR;n(-ml?E zc-UIqzTf*h1HsXU}U^wj?oT$q^{)=kXJ<}f&C}DfjKD2L7r?i`jqr`^xAlQ5k};C(qsEY zktxYg()V?d1by`8}Slqsw4+hx=oBPa`pi)u!jMQ6)uJtk=PRjZ}29uoB&1L$a55RpOvuvxbK|Z?$oHy_px8Ch@}{V=YAqSTKB zG;KSi$4};^gQUc6#pUid35$xpyIHMsnYeHIj)gEMG-~N5HXI5po{yJ0$^9-c;IrB} zx<$$f(MwQP*catqaKGfX!E+7=pvj$LwxDyEet(L?IU4zWX~+V^e%mMGYd0BxS)JA6 z>Av4}t!8eUkG;PzD*$K$fEMZ7;EcwEX~tj$ky#f(bAa(9{pgU`W8TO63NHKluC*!WtC82SAQD>1E{ZO|0Vmon^U1h!rk01tJ%L5yC`up*A$Xrd z?|_@}F$-4f`8Rjk)&WfmL_R$AW0riBqOsSe_EI=RD?-G2#mD<5)>v77Z5f~oM14wC z1BaYHZpb>ue_uw>QTd)Z?_i!$?Js}l!jGWBTX}X&Rc+fK``2HerP!s}edmdSTlQ#* zX6TK{O)gzkq9o!i8d;b=EI_2#Ulk5z8Zh=P*p@T^=Q^F=Qj>k=`6}Sp-9d5yk2LPF zVxXc0;e%w2edd`ZvrATP%L=*ZodeX;X|bSD%SMd22+krm^4 zYR+aM9{P)2GBY=k7JiK$s~b>cF(4$C<`1!XgWD|gs0O*Z1cTd6?!AmfmBdIt&4*vC z16m3toNy1-_y-cCzO4#Q7f{J+l^d>%tB`OB{*LMuTKvqQ?B0u;BB8_qY!CXdGCKGq zzVjp6es$=!+VIu&V}Kt}oJyv1Z4AfHZdnl$GJQuzM>e$=PMlYTCG>12b|1jWLs4W}fcEan7((UEa#$7)454pyWx$?7qV7)P;y>A%Hx0u)7t5 zJF1II;04$W=2MmR5HpoX=gXJ^hOdWN%*@Id54|N6nWw^0o^{bP811lm7&$To6WSzpZht=||JV~&$9 z1*0GsbDpQzyh+d4Myt1N-~KMI*_|&2ALsu%1|yhiVg<7+fE{_;wKcF6ZQ`gKkLWIB zm!9-~u2h@GmTdRXGLX1>+uvBs$9;*A$v)t3yd(cLNVoRhvocRl+N0d5k}wVCXb zqe|Q)vpo)-3%$EBbBi*{jbf*cDn0Vse0p+0rv6p6lUvBv_BSVSvXVwCZ_(oMjO@$h z;xP-&J~4t_OHIEn1%l#d6qTGw?qM}_%0b^dGjH9xpkHDi+05X4qj1tGeKc83nS^%}Qt~OpM>J{5%=9$53Op zZ&CUc97${tb(L<^T^!r>;dC|k&-sR1rWBkS3L5#Sj(pQ#xApU6+NcI!NiQ>qmX0s* zg8#Wx=YUWTdp1^^@X_-ew7_c`MQ+5OU3MWW4bDz2yx{`heCUXCd?hir3cQpwKj#0(vApZvDQMtP8u5cB2`uSb&{(qwvOB{t2qqB8^}px%_klepl}gJ?4@! zw0|RL7U1_Jr;=EWskVy*LaiCuZsosn4V_)`pWaVFed8v!FpMyKCV_Ij-V~<&?)-6@ zwY~KG!XoCOi^&csE)rPLPi*A7RK_jf_dfrplUF%Kk{Jtl`U05k`MB&=sgxu~w-QE$$ijjeA2pGe#+rAq3@y#rX0du1SGeVM+sRgt60 z_dD5$r!$5uWm*oqnooHaY^PKP>#|e7eJOyQ0~r5MySLDa>neD1;3xrPBjCMn8#WaZ^KcTA>E9ZN(;CXSIB7oSCIk60bVuw#*)& zQ#0)Fz4dOgJ&yM&rIB%p2-KMTL*%UGUEK7O-H#`BZI)RLWZBKec~sT~1Q(6iFi;ce zZf|1k=*?U+{nVan4!UkRz$=pvdZfyKQK4s*wr!o4wQG`EAy)j8%D3Ka>_gdH?gA@C zJzIosCK1D)fFh#{-X+hbyJBB0v znS?a=W;(XX!kq0r3#sk1!9X5Qdx#so@Z}EO)?W_St&XX#kXV;mIpTbD&| z0_TP&De%^%Rou&9%UA(D&VR4tX>1D^QIh#@EPjBI;|0|ozB_3P02g%6SOlU*4q6q4 zKa4F3)a1zRjbQ-twp1oAulG2n`+6891gBzM=M&aeOw5u*svGP;pr=-0l>0kFewyD# zEXTEetek3H{7F6V3Aqm6SU59%_S`;Zf!pvM(0Xj=kcN5FCc!vs=EjSQ2fI}D;nTuX zzQN0mVxne!s^%={Z&7cJac#*;McM4T6F05GpO!kZeNOd3VWd&C(pq-pz_?|{{Ux1^ z6&P!x<^(UcpFrtjTW*e}8A)1J`@3k_TXdR0*a;&6UtbkO>YV_YzQ(^zIYW8^Y*&l; zwM+L7n+~EidYilpYDnt1u@9dA;`A*!rgjkg+|;kbV^Awn9#BlL#TMD6a2+;cWhz=`=Z2Mc%-Uq;GqLUDNlY6BEa;1Y|`##(Pf%TC?5|`4(h38TA10`|ROQ z%>8V>5dba+)SL>?J1#A^t*T)zp6_X~P16H_yq)An6U1l6e@*M}I1B~Ofi)Y13IPnT zyhqt{AM_dFykVN&{wmv7d>?IWHV_(U-(>r$EEB1q`llY(kl%_#!L&B|1|}={Q`1B+ z{GgSu%!mZ*E42Vkl{L)Xke_v@e74nY5*YsQK!4gFbv?|P)^8AwZ5>xU3NWT>r{|U^ zwWO@D!I><48zM7VUV46g?Rd)x18vq}V0da{BF;I^nrYgtj5L10UYMG>C|4Q(mN;tb zewtL2FJGDL0$~_*j2bl)N$whRkZ@&P-{mUPd)KrP2`w|6(fW~5i8Rg0fYg^#&6cqH z^6xzYN{*ZO>AZl&@~e2i5>fjFNGw<^y`m@MnzG+_%4_kZ3`X+`LG=XU!~@?NiFxiifgt7N+I8S+#{grS;LB;B)m61#SF- z%*;CR8?*roSBQ6GdydK?o#%QlFTS75kJ3!8+Ap(QDqu3Qb#Ao6P9TrN@c{4Q+lwWZ z?#)kPdNy+n&ie4;6TVR#Mpj+hy7jB!C>xwK?E+#xyk4*{EKh6Awhm@{4B8FdCzI5F zyP`vl|I;+d)ipzmm9lwF(gsN^5zi~mB@hY~9l1EZOIP^})b61gJ4xNP4->|6A2-Zz z+DpZd@bXeS`Y_tD$Ryegws?7wECiV1`(zoqV}uE)S@%CeqKvdGO-8g{Y#2ri9nye9 zxyy7YE~96X0ApsM!=O)P(qm4M zZ}sJb$#_1q+Gj6k5Z%Ol*qsd#k8^N+^wCAkEA@s=LBTtStcc{VeCmkqEmv zqjyyyBjHOa(++t~V{GDJR^{e-sx?qhQ1pY$iw09|Njw#1+7u&a2D^r{rN>C^ML!Ti zpY6(=jY~H%`*xT`66t|7FgZpTAuj=gP1p+|-i_}zed#zcWV=lnSjfttmLG7#3*$E3p(<;aUiTOLJZHXMY2n22f&OvZEWN% z9|vvS%I^C{=@0^o&LN^j5V*|qNy10kXi~zS;Hzz0;FyWO;w6eSyJ1i;uZmc>a-IR4Qah06L% z?H9E<$b{ecdn_4w|4Z;PqUEwDRdQ_a`4D4mLwh!6H9t;rmK#^wfQp)>X;h$}){EM3 z5b}NejG>q%O|}y!KbP~(u@;9`+{>oy1VDfrO%y6n?{vRv`$KpYcbaz91rhm>NGugx1kaiopN z{#vPJ| zdBGVydnBkK-@MTjlIAbul1$qWdsqqn>8nK}urxmLVv|{u>+(}a;1jqVHq0PPc^EU% zUZQ4+l5Jhc{NT4(;@Lc>KRzFaWubEsc z6YsnackY)tbLO16GxOob>+7l!6VMZ&p`j6LsH+(M$0`2{Je>dH;gbm7e}w-|-P{)q zjhgd+fv#c5ae;FHR^yJ+X7rId%Yl&o7f+1EpPcKJY6{}%+ zFEXAbi<`|5i*2}4@2?7rA(5&on;^bULe!QrY1)Qrb?Gd85 z4n=1dU{xBF~>TfmX_D#S^T0yJYvt}Q`& zq-t(&BlakS`4RSFO9B0PTMxgBOL6n^<;n@#iT^znc}93Y&64`7b)3V5aGJrpZOxoj zo6lJkeg=Ufw`rUZv^EY;kauewN8B_q;@4K7o_c=zwLC~H{y_@lk}#;&3*S|5muq_W zvd#MX5C4O=z>XdnWbOM7Fl5=I)+oFfutyf<>ZVQ{bLt;;`rQDyT4{n`P8b(U{t3PJ zNZQ~^-X+W)9svA<88RNRSGr=p2eC|W_=7rXL3~ZZg?1K_SW>TiH2x>^sqxmw1;gL7 z6u!oY++@TK*1(v?Ivjt&knoJAnYF6P=$T-j`)?Q0_)I~( zbWmDn;~mBZjy%0h@u{PKP@^TOGVAahYU1P|&Q@9P)6a8#{=^dQm|8HbR4N)AftAvB zaK9ofH4iI?J$58S%?Xo?h%F@qqHvRzBBQuT2l2M$YZTyS>H&6K4U(p_Cmy_rWUgOt z3R!5*2D^+kTcr-70sQgyH)6B4?n2#S{Y8)ec$1U3r_L_0G~$8erK!PClF1z8g!JRE zWUv*hL$naR!-xfi{8tyrw|{UaP)7o#?EDbTuTr9y;_ksQzx_)$47CEvl{Z?(Gnh4C zx;p3RQ0qy5a_H{uK65udiKpHGF+Mh}-|5>|Z+qNuDG2=Lsll{pmMpWBkC}^{Sv1{! zMQOQLSN^x`iQ1awQf;~|ZtwlGrf8>)($^Q})zwZ$f({1elh;52c>>#eRr2 z5w46d<%a4`3g_As=9pwKERFi*%?dfJ|9Gcz*{)JeF}fyQ9py;5Bo3BE-AD>E7hxGl zP-xRFWXe@!u??Q#80dTPBJeA+jp>;TzK}V_&^Xagko6~h)lS5rvbC)Y77^ZOMU3Y_ z+X7aufVbmUeDC=>nFPYPzNP=bEAfk;7aQZCXT_dh%Y$3cCk zavDhjnEzr5IPa&{Iv7^@fjVArk>FRbW>f4|n>T!e)g$C|PoGKa)&dB`E~MGVDNhx_ z9cbNOO-xK5*kqFBv)MF1NiB(Otdv%JwAhO3pk>b!8rNn;&i2wbjS@;S$G)@-$6;zy zJVG2tM=kGjepGCr@ecl8EH!p`(|_U{sM!5FaBw|P1%A@Y0I$kj?Kc}Ky=Pv!%9*%n z9+{SQ)nmw`okM?(R{ok%Yhdlgd;dG6iypkZd5NB+U$JO7p4zzih( zNPL;KrjBzjbIlXk|3=WgAK}6P>NcqDkNlcC`~_gnj7cEld8v1C>d;#3BhBBF3^7S< za$kA;w977RO@Q-H>}P6nQONo2w-@Q6QPoP-q__Z|EZ0V}MI0nYfHPW!+-Bx58@KS= zSh@*7#H=&lniPrGt|pAaV#5@WG1?wm$^8|Vd)$GnomihYU@OgC^fm3ny=iU5T@RV8&n!fbVx2jesfLms^lV;JL!+;Fpce+ z!LelAnfj}s#8t7^M%!|5*>^UzyH$J1M8FB?^-7UYp8HiM^36BQ)$mX#Cq?W-_aWnZ zk?wh1jcLrHs0vN2UU0Ou-I=V*aau1upj#!*1M=#p$j-Shz4~!(%__erXoDFMEr$x& z3{poOaF|gxT+Ccf%s1&@r7`LzeR@5;ik@E)2<=SnWy5O!t#d{tj-f$KQRB#j^2~9>(xG{zsh3iAIVw*aa92X73f7%0-8thWY>*362>ExkJZgK0BD765){Sgc z6x0(7u$K+;1b4=cnZpgECRY+7aSP`=5v8?gTJ}eViYfiJfD)F}Vo1E2|Ci@>H_V+yP+CvG@O2-_Fh=GGLkteUq zt@W8cE2g`(1@vU4&Rv*g>i_ z<2w0}2O2d13lJKeYKktAB}*9iSg|CfTJvs^4l1c6I2_+;7<)9ZRMOjV_RvnujD5Mu z4}Vsht{9x8!WH2#)ayHPX=(h#r^P;oP@1Jprgsr`YFc=8ROE^9kc98ivE<3VhT<*H zGl>Mih0K7*qQ5Wnsopp12%4d$@E4O(!vg3E2e9mbp>ks1UYwJ2uno^b>+>VBYYgqA zttxf3`-)Bs0TvsU@p6(}M`{viRRLn^dD=v}`3m}U2fb@~{_a{LTnUD`%cZYT zyezuT2DF@$Dohf+JY()o3#m5+Ga887Y15i+L) zp!{~&^Evt+ct3bE;^jCk(AoY-`g_|`<+aF%K?v$7gJ= z^0SPQ2CS0S9Z*bq9L4Ci*hcL#-Fc}o0lfI8+xgbVgFHQ_<&Ni6`aa(+5j2DU(xL5k zAn7Y<@;YEjjcmbKAgG0@7HkH)QcN>}GC~|osS-;KSqr=W?T`nAT^sQ9g5+i@mi-Wh zy{+$PJ|=V7Z5}Vv7LG2B$L(NI{ZzPEnVIv{{i|;If()`li*<=U#M%Ydy4WE#8VsdZc5 zw;>_gGNZ|$<3wsM7ivad+z%`N;rrG*rhN0AYCM` z+_o)n2j||$BRuF;DG`Swn#_o*s0n5O_|LWat|E9TT0qD4IrBCwZiU6))W}tWY5sbt z;Y%}_x9AVqtYYzq-;kwPyhL9%T}BTRH^sF6oH_3To@NN?&P;=;oyqZw05+xi?8tvt z`V-1lxFw^18a}V(ddfslb*I0KFDQW&bo&%K%=JXhG2&b0q2W*hDTYJY!Q29aVeLH) zQRexcbjqE2kzHC08kCuhj zAHB0;cZy<9Oz*F4MR+P2&`@U@`9P1&ExqY%Z)tpnuBF&JfJx*~qz>8KQ-Rho5p0X!a>{sxh|%3K`p} zGr0YtD=im0j$FdK-D2CyOyKE7!Zh(f^r}g}xzhESat-4uYf+pHx;dg?onL7#%!vV9 z5C}nH5=gXs;NX-#%N_BsS9c>=Q{Edl%?%<72y-gCt{evHn;ntxGfMN)zy4gF+3*<*dfbf~nCTDV>w7^Ux@CYpydf_qDG-chkGk zt;aHE%4S7QpQPMeyqpkNYbw7vy+-EXoNGL-abkBHSefvpm9S1CtRjrb^}7Ak$CT(^ z{BodpI9l@gi*4UN6SZhMcM9w3wY67p4*_>rTYmCg)?iX})LuC4%s2si{fl!x%e-a@ z_BxX^F0`p6;X&G}sy(~?`g`*Y=HE7+UEuQ|Go}6dAY6vFyy<#rwn#zC|TO+vsr z6Y2_p7f$N;Z(<>~jqm>GhJ#Uz?b3;&qmge+i?!Z7&y3L}DY!zc{|zo89Jr>VE!~57 zwo(VDMUHb7J5LPmAwX(Q!J0# ze8#OF|4vx(B8uX2KUqV{E47`txRp0R`2XFu2p$%^ETJYc(|o$Qwt}daGSiI|T1~p+ z$Udct323e!Tq_iFZpc|{UN#%(htZvEMHqW$6%k%=vM=jB@W(K5NfLr-d8forjku=Y zFR^b?^U3ZG|4VTKgJyRVoVIn{kCDWFyCmn>8A=EJnn-9h-weO@&RCDfvSfDi|0QRJ zU9;f?HRxrIkd#MR``dj$OI3?XcpsIe`#VQ3ubyWrfJpy^-pO$E%cK4?(h@+MEFI5A zn(i%PJ6+a@O6tO9Q|ap9W1WXGG4Epv4RDj1C-BL2|HZzKsR3^DvcFE+ni|2scbwWo z@wjD3AkDx1(G4oqml~pQSS3F-^lE z4Xt*_2K;xQEb=4`=smz5JS?BGa6*LF3#WXi(7RJ?lpwC2T?+N3qRhu<-`D(<{KKT= z&O6SczFQp+maVj$I*2^AxpY!aSb?42-UX33)}xC2_BYMm$4No9PU^kXa~^w(#cvI} zPNb7NbpP4|ZoJ-5Sdu;upbB@FqUxFjV7i~-RnT^YO-#U2*T+xZ*6^J8FMsV6sG@jB zHT;A@dR>^-zvuCsQ{LZHETaIJcj@BoO_yA)w;zm3>7n+z%v(j?gw<=tU*_3E%X$_s z$bxoA$?FE5?+k-;O_Z#=GRG38p0Dk--e1ig&y)l))@?%QJ@_b!ZoVt`*}{O~Od&Qq zJ8~C;k()+P_lyI#E((|fPNr!dKqHUN67KjC>udR#j&7%W%zp|dSwiwV?)6FWwyU`0a z-VWNQRAC$xR;8W1Oe))ee=N)gya5b6J8PA77{18=?6X|y^QoJ;t12!0k?iJmnrup$ z&~Dy(4FiCJj5p=!1fKo%($|zQ*w?!}-wK!du20?@*CXc_75!ol1uVc5jpakDUMpLg zMy#No?ywa)IP^AQ_V1Tmjk!?LJfOf+fKzsNUdw-@YOOAh@G&jG$7(nsG;2}{>QtkR zSBK!4N9ZYD-J0Z05eb}b-VcJ!x^5}+Q)oAlFU%6EMV&O@=iNwdY=1%Ys{~NsYOtsZ z7!gXztaZX=>@5`dB&ZzLS{-5EEoNoi+r#<=N`y(qpTh3{!`c1c=k-$2NW0_DO4E7y$uTdUy& z&EgKZA%D}vRsBy@b%qj@@tQ@j8@@ZaDJZW@Hhs+AhEn0$YM;NpNcAE{kfKl@P5a%9 zSxk9}SVY0!ueCll^oajxg7&TX>nmYuFF#$|0#Qb`owcm?W`}8xph6QzTpJ>lZ&K#9 zIKu5*ldFRCRf`5y0za$~&kcLMGYy`e5`r5*k$Nx{`>!eZ>kQ19 z0n|+`32nPA&E&HS!|xi&7iX$IfH=yRYN3hpde-WppW zSg`W2$}Jmv(*$);ocw&T2{sw4qgg#Od36eNOd?K~g%~FJ_B2k7c3l2p?aC}Ny`-`9 z5}GkmcgBMaX5qs(T$e*8kPVsyKA7 zyKJFQ)#_}bmBo3YdmaeKOtR@9>}rpLHY37xey`HPbXT!p7$g1|o;f7lt#aH#P4)3z zQqneW%NfhwbH?ky=6EEUo)@TcpzE1#56R}4ithVX%dpjX6d9ytOEZ%mf*10u5t0=h zbn9P%C`7&IR&Z`%4wnl{UN z;9u@&`_OseN)&hGtyNXN8O2M_G1?k<3jSbI)w~~9W)!b1RUbcXKC!_goM&%=L!4DT zNjZN_H-T*F2L1QFCkX0Oiga9{5Y78gpR^@Tnhu79k}7#KPX@{yifV<=u-47z@z?F2 z%Hy$%#2v^gHX8WPrNnssclwt=LRPDKU4NtNh;NXEQR|p15l7OCi!%|crVguzmd{pe zX%P-0>NNTbTPy7mb3?WwpPLraA3~qWWg6MO+{8oI5I|Wds`)d`9&na&^_6!!mHPCX z_99re%M;DGOC{W`H%Y$niy7F5@?S1Pw_yHw0MDn*$7?64n+fAMf-DUKZHFYBB0|eN zLq1{yzTp>$BKA|MGAMEMU&Nlmg!8PE&Ce4*3|{m{G=~BPGZl|$kyVQzfIgutXFuz-QAzyx=zV@!@t6m38trd^3r@jIMUfLPd42yh zQgF6hXY96-b4T#|i#)BD{9KC0_H-)n{=yn}S@#xxg7KV@&*l}wbGT%;RV&`K;<@5r z!-aqG-FLrVPPM!2$95YfcZ8gOKi9vuu{B>fX4L8ijh;6k3F@Z529hjtMv`S!aq`uv zV^|8PofNv_6XNqehT?*nxlcH^6O+E7E6@y%#`Ac&LolSWiHjB9bkJCE^@0Tt!?7Og zQ&`8oUUcF_ZP2o(sSBiKH6Jo#h~cAzUpyvyp((m|hIv`=1e#~bnTs2$f3E}y2Y5l`DYl8e3x#4^HNVchTu>G}d+^TEP1S#|Z8l+#W||Biz!0fl f|F7JUXLOGW?YJJoh>rg(Bs2|GU6pzz+o=Bmjz9s= literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-400.png b/Source/BLE.Client/BLE.Client.UWP/Assets/SmallTile.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..cb8c45ca92f89d0f548ae5e6005d3459403f4ddb GIT binary patch literal 14421 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-100.png b/Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..ad17c18f53facdc2f0135e3d30be3f9522cb314f GIT binary patch literal 11606 zcmeHtXIoQSv~>W>5kyo34qZh=x>BWsO0P<Am+VM>+(gC6G`Q z2t8m3Nq|t^t@r&2_v8JLCwcaMve(+Pj4|h!E5bleot~DB76by(Yic}u0RmCGfIw72 z|6BsDgz)Z717BC%HOxIhAZFe_A1cik_kM#w!vAPKQ!(<(#4TJ-W12brjb9qY`TCmg z(BCj{mb&mvsHFCeR_#mG;k?g}?z7qMFg?G=#t24$RnlLw6!NH2J$?Q4!Rx0N3;0tW zz{n&y!WewSM!9Kzj{5s9neoQs`9QLeKUdD4xcE9pHL!zkGac=L)WDCDe|vz9{q(rN z4g$R$xdChyB%)qJ1p>8j{NIiLGs*v6Fp#b)fC(QB*)!6d^*wb_7LoU3cwthEx){se zd2O95>95zE(@l<-8q-d{OGH(oT*Xu=69EW_HM#0x-=To;8Vav@io%V#T>*Kh)=;?@ z>v_ue1S2_$GuBvNv+-%?wZx5LeDiZN zr6||afNcii`euROWJH2HIbN`$rw<7|TfzG;F35L{M=tDlQY-WRBL&)>*bLEkTKcX( zbu~YnA39dMU)H!r=a@ID5&19wBg5zF+|DU7Wl!|R8RN)ix@1l${jI{Aym zeok~s|6Al=x=Z&_m&u7=aJortTEw0WiHbG9!BX#*wUw>Rw++s!mR!` zG*}I$AJfP=M|VpC0cm=_sP@$d(z0E{e%J8w*z5v<+CcixdW)O->mS+H6!IyA07vFq zC72v{OdKvzfeep_5yv7N_xxG%W@G_7!f{Vf}Ik96?MM!#pfO*ANI ztt=hg)^x4kA|=KAd6~Z|-L0!*+mDXZ5)R7l!jE(7IYX#&ssH>damjm@{}bOq`YxWk zBAZaAgMP@Htz*i+E~c($j19(Sg&15CCj`V*MWFIc4@yaD9b17&YI+d{zH}~#7x#p? z)DfC!oPG~lhr+&U3s8c#Ca(LenrX~890WTlkmQo91!XZ@#Ie90Ft>H5 zyTCR<`$_V%o0GdGG}uqBl{m|ckm>L8)6{|v6NkR+a) zvQ|1lUmqfz&$z}j;b{kynf8}upsfeM&XX^;DPo?JKk+%IXM0w#I;@$j@u+fov{_)8 z$yWXy9cQ~*N6xlJ)Mr-Ip3sIPLWY0hnvUCge6gB?4WZj2=fPXqh?g`5yk~T3QbfN_ zMz00N;mme(|B6!6XHkqE6MNTEJu#BQvFE2Th5IMb_6aOw_%?W3=DIgmpuqJR>i1Tz zk^PL$GRr?Ni7ls0siGw2njhXHA3y}9x=k?7J6Q>u2uSRt6XXVISIxHr+ z%fA5;xq2>rtEFkbMh8O@Bif|ha}yPi)8a4v{X_g)mafdzVwcQCvO*T^JVKbAPX<-E$^US0lZ$*Ud3z$-(x{vwEEkZF(FJBec#Iv#9*tAYA zr72kgFfSH{>=@sCcVatJRI5iai*kz?$q8sqH3{EM=4>Y)slIr@kqU&DfNvT);Ay3V zG2M+PA#p~ptX1HzZLGOCn$1LHTT3NI$r#g(PX~Lq*B7N`x*E&nW-WT7VI~tk-YuBl zs`30N1#@xn3kKlpE+CF8KAfaLh1pzF2gCXKFy0gm?R>S59s^idoh>0HM6`O$T;%I} zvwr76N2r)$t+Stpg&K~7WH zBBXMd?D{g6J;-Sv#m=%lcWT#6T2AqKwsxN-*A@gov+fmN&Nua3F0+q3SB-XS9bANq)Q^2@Oq~SSqgKQ=KK3nN34rb-O-v39#XfE^ zaJaT9khPb2zr1Tn=;-21loZj%dxR9@FKB0yn&RQw{uGDDh(LKn5!NExAp%WqS+Z%R zX%WJCNAE+2_a1E}FKeDIRUhwwrdfcD*19;x9`f0*BW%a9hQr_n(*j4T_PDc%W24MH zxvK0dmi0dQtCFMMfma>VrR(x=6LbXxPD#%~#IDZvKvq7>@Lt8<_w|XwSJ_~$jRn0( zt`POnx8HwDOyzB=JbDpPjOD8Dyo!W4!7sdRiv;qMKMu@YK_Sp)+E^P#QB7}+_XIb? zR`AJ85PjVfofFF(`*LB#3~u6%0J>;si@S^)24RnjQ?wNQUL49Fy5W7#@tJ1Zhl&2IK+HHQR`=D0-h?0n_)l=twV45>! z)vrepWBjV8_%Q3b!jGT1&w{3i$UUxVbOmVoGTOSXDOlrtOn9}$fii0w zcHEFUv{#*=ArGq-@cvJyZyG!#OdqItI@*tyPBDU+fVN}-L~iv$97e6teP;Fb@fLoO z@Fg);>Dh5MMqaKcn`m*c889SRk@fLXvU4kuwBhe-vPUYha5w1Sbsbo52ydIU4d*nt z9lGhCIWM;pjF++2s3i(m3KW&{lxKS@@_>j`014`x5!5A^7d#{2?oDDwu$8Zy=~ww> z?*#JVQW1|>PbSru>5m|`Win8Ir>7JxjQ@;Zk#47a68D$Qy~+el;0?I=Bx?uGgYdOt zyIF2_M{O}TX=P6or!+OAj?`N>W`2qN^7uZNLG{;sVn^~8+=v{OQ4W>lj7gY$)z172 zJtfl5okJdgp_YQX`Rii_To=DRv33@;RsY&)#;C0&UT}r~fu4i@>L$BNr329tT+7b=C;` z?+cR%uHH7MdhzzS4!~eX?*#fRoOO(`wawm2EZX1pl22*F=!47eirEgkp znGZokcpR$G*V+2U+1#Gcc(GsZ{;j>OlP#wBS*6iGm*q)PYkx;GoQcnuALr zp>?;^6UCeW1ed$MpmIU-D#gA>eY;@0(`{%ve5^hXHh>7gIk6|0e>O;VqC1q|@6OR) zefK5`+nS+YKY*5A(m(cf=Ka2SGCe27t)}G_8uFCKe17hDp}cjRS~>Vn&HTKWqJZok z7oTbcTh}+^Yu@ADE#eAqXZrtCgulS}2{q&pJ=$WzIiXt}6HvKfuqfif%iiOY0kE0S z*GoN_`ML;g=)Xzl=n1K(MP?ICD7XB|H&6XXVw+0qNCU6cCyH#C8}53HM%#>r`Dd3rI6<|Lq?tAyup?RGAYGTExaxVdX&B0O_ z`_POdC!90X2hCEq8pX}ww(`|AjIFdmULrSt-qRSfb7+g)n_;QXue?omGBjo~nIPeP zeHwIydC(S?6H5zjXo~fAedVav(kLtTp#!b#%iy90@Fb$;- zEIp{XgX}MBWbh1Re0%)%CCzWk;?Ho5$xDGB)0HEO>&*#EVu9nIVKE}&g%}=dT1R{8`%PRG&xQkHU>UV_J z@b@<6uEBfy9j!*Y+cQA6-^m28FUb#Bsg)fXGd}v3p1{ zCzPN6D#dR9sr71u?KSi!FK=y<)yYpGIPnZZK{^{tlZlq`$GwMzr1~JlwNa}cLq5fh zdcVqhQ=j}4WHQAe=L;F?L#owVnE{~OTRoR<3sx3d1_b-th#MchF?uBE5$n_xH}8Re zH228cXzJj+sxD`oT2L`mr$(`VVnB{RYF7u_Q>CEPyt z-gLflvFX$i<|deZU(q9kx3*~*kK|#(TlD-Z{%n_{Q~8WQ-X-OI4rafAGp+`DlX071 zi(gAMk$MY!pHk!-`tM(S83&XlgJL=|I?_{2U23qEUqnAUjpyMzv&Ud9yA45ZjJo7Z z1I{gu#Gc-&fG&=9YF`G@oedh;+hrfJ)`ZC|he$lsUT1GQ<61mFlw%dA2yQO57AjOp zAvqNYg61td>O*v<`{aU6W*S4uT=#K0!Edt;kbpi)S!(vpJHUGl=135*_qACS4=8k@}TN& zmI_2PJ#7G72OesZ9dH_1yj0mI2<XAQBev5)wDWbESSWVRNrA0iIk)i^<6$`>lPS$ob+0C(ws@qhw_$n3**^|ChtP~ zoUibieA68BHw{ddp51noV5HBD9MjZg;YY2|QEGp}q9?9)E&SH7E(<3Q13>s)wBMi8 z?WLPj&ocf2ut$Ah2N_9sosSF(ZpU) zp0iiSq&U53Tco6%SZ2MfK~=TZrDPQod4PiJ%3f8H^!SO1h+<)>LI}owU}%+WI+R*2 zt##V~DaGw`cGCq^2T)#e{jmz??~oshnD^?iulVhh7KJWLr!A+71_`07Lp_wFB`F(d zh&qSWgL5Qu?RQNm!cZNiDbMQ`dSERz%l6@Pk~Da_I)yzK2R zoAwBdM=?nz&bz+4L=r8nzuVoGHGeSf+XoJ#q+y@v);>;13Z|tN!^IP@z06qAlB-9Z zV*4pmyd1xWr>ceH4PLpYs#(rQ4tJ8rQ!Pamq~w}5wsWvV{}EoZT@qLNaj_k0^!m4K zfQV{h9QubbkELDu`Z`ph*goH`A;pc*U=&gef)q19Mu;MFC_ac=&Hd@uWo1Btw*Z1CNtK#C(0{m*oLnA~JTM@dtP+gI*skaN zFcXo-xx){4X@{!&X7c2E(L7_el}T-rMbkbFrQMf#;7!f=f7}#Av|++|*FK?61F)Ch z!uO$-I#<7O0n*AB`}F;=;6;^-CngUSj@DjmdXnNv-%p0WtMUz2e1!7CrFJ+^p=eTV zk!x5A3$(j)n2h=UQ+vjzVQ#&Wc>tTq$dH(wm2N+9zSKKzHz%#MUc-=y4%a;mr2?`3 zNeC}<>j@^QzP%}XLQ%`SxI=u02g;mew%s2%#2vuF8`oK5)&bd$X6qOwVa(*5+j(lW zl6wvJ|FBiqDI{K{^gQS+Ovw7E{NyX;xm;(lRK9Lj^H%-Zqk{7$f(h!>N+`}8Jd(;% zazdl?RN}jpp)DhI%>WO8D9%L{6%|d>Tuxu9yE~-F?5(>eDIN|PPj~QgRgZ0K;LZOj z{-b!k1b*I-)Q`4d>a`HF*BHO-FpS!69_;Ky@BVh&N~&b%&Vaf#1mgUKeFNNJ&n!3n z%V|Uv)zF-+V4ssSpoT?(c@maxo8gyg0zN&=`qEHTT}HA4P5*uOtDf+J#DvyT(-4yl zOP2fdGLUy2PzmNAqc{H2x)q85#nYZ8k@0luS5tH&JHHA`J3CB$qj8q2206Nr7 z@~;R^ync>Yp^u2K`rQc0h`Xqb8X1I-thR|%?$qXu3ETBX+wcEcSJJSt@ehnP7GZ}X z9d&{agJfDW&Du|XHQT>ug1#6Ne|*^#?0264G7oR_ z6K(SzhhV&Z*>5b>^s7I?c!@!(kn*`Nj}lwEUpbjtZke-JX!969S zxf+4b`K+|mlPtSkZS?|QoxgY@>Jj=stwT*1!p(*NYr%XjOh+w^>GTN%cW$K{gec!1 zKQ}27HsfLOa&n1VLK7ZS<|o`xZnZRn5j8}A(N1FF>89x7o0Nje&us@^=ftoJWdj!7 zTqVpk<8Et=4A0H#)8z6)_wrmzC-Vh&(LNm+lg&*_}O*!VaCPFl%p!tS#zYc9!}1mb#T(2E+Ju zkdGMlmv^egF@CGS24qLHBn)$Yx?K7n@j*{VH*`uvZ5JhBJ&tWEx!FXGOB4-FI?p)% zI3M(Ut%guOCjaD9H?gpTg7=LD@@XQ)^xvcjH{trw{1BYc8zFvE;$tnfR8Mvz>l;R< z$OPkPNnR%1L2DZQgwy8!g5zkp3U}RN`YW5sZY%Lvym=?HHT&EKd@qRkuWs~BFE8;p zlzEplPmM@LP3Wk4hU7@^q}~w?6*A3y)56hWI?ENBj8_)kk;KjN=2f zyq#LRGrdpl*q@o}_NJrzS6WOi4-%~{9S3YO2{EJK4iPd;zG+gP>d_P)FV4MGJ zplZps!axu3q%8-jGq%(=_~eMfo-;V?7V3Rck+nvzEn91E<2C$NKWqHbUj^fVA-*6_ z_m?Y=y7S@>*w#ajA$)qgKC0kxd|l2;I&tubWR@RHSZx}?404_yS08fr>*&6y^% ziIVIK37zF*Aj{p6Yw|dCI9g}d?#tmWnRE=0#6^@L{{Qn$(K-sk_+@s<1@@{Pmx&i; z@BZ_rf}i$4Sd~Hx4|b+Uxy}va^6htas<9(8>^m1}+tCLfp@ok0z3H53Fyt{I{4R|*cm7*9V(A*S}Ml)73-HTM}wwm0I=}rE52sM4g|sj1nRe%c$cO} z=Wr3}{#0<=A9fEOdC2iwYw-AMEUfKtk=5si(Mpi_z@kOLYgkclr5T+mA5sYKr*%!S z#bCE>|8QrvTgh6qdh|%`{YAYd{H#_MCnVs~$cHOCotJX0fYoRVy~hnSlMZIQ!0-Mo z&0J!kJzg!xDvcyEDkjTS5B4HdizSi?daifH7s0$okhnUFbOLG7qQyj{>9w#qO>I#@ z9)IgP1I#|>5*(%m@Q9qca1BE;xvY=onxZ!0KCBk>RKzO1YGSMpg5Y3L(WlQiI3$Rr}+W&OStT4axS%D z!W;jgL2gZ%^+%z-&(6^tcqCA}%d;aUJUHTcXV3JxfS8}DNcP2=%RtLxByhKX<=5fb zT?D&}fDDJJvA|El;3qJT$5M-`n8UUv4eZ*I=_N0iuzq*bvyP9A&7fCBk&@o*62{`D z$mwJWCNn^qoBT0vl<-AGRLG|*CY-2}-u9ApN#c%}{Wr`^2J2t-#h|s6CSQ$wL)u?5 zxXu~OI$RktT|Vt;EjoH^QMEm(rRN&_R-r2P4cqx%@_x7OqbrBdkc>FiD6wW0M#)=H zk`$NaO^+eC`d}-J9Vqii$9#1V;-vwM-{)Nx9@e>p$hl)}m3JkUxPf$aPM4n6*x@M`h-(^^ z;trv-6usFC5)K}7b&Ugusz6yK34%wf89BThK0aek=4>BM#72(UQm>{P=hqh9i(J`X zSHu-!ztY#+lI6P%np}JU@sK~gTRD2Rh&7&{=FC{Up5`w+cre4K$tZX7t5XSlCkz6S zi<~Dp7@8Mn69QiD+-?26dVlg8tpw1!-8q%hNR=y!cy&>qDV7yMd)&F-mrn1|_obOP zT?6G*(YMU+?D7$fOKl#CMVRk*b}0I`e&B$uymBB}X{&`wNo<1utoe657oo#-sMoUn zJMiF#O;}b18@2V`umn&F`N#iB_Hq8gcxwM(43n2 za(`0`qC29)TO1dcbg$4hBdoB*Gis-$Er#-oZ%Mo5;l|4<+-X7Zi{lkET@BNAkx-Zz6hR zGS!$w^5Mw9XpSX^G8PCNCNFQfhjM)oJMt7rf!unSyhJFCW}o!6DBadww^%-U&=X*S zQzk7E$7-zxeqiC%wL79Tsl%*oKT%|%sX!*8=dm6ON0qA;QsJ{J3R{`;P!!CoAts#JDVJoK!I2S! zAl^l-ohX84fr)YM@M|}w(+#E2-Z`64D^<%CtGvpCR#ETFslfA%S4)?S*>`+qMWW}O z=FlKz#zY7Y7Tf6SBl&P_(PkJzEU)vGOUx`7R;zmkg_Kr7_W_Ac zhvFXd!9%vjW~A5R^+>^Bx}W}0ni-8jFo2P4@o7htne3`_c^=p>G+Q}r3eghTv`^^Y zBM*vZtn5!878+CDOSbx|+gCWztzRsdRGe1GJNhpn*3Dl^*1wOQW9wRO5kS5W9j`5f zlIA+!IDOP3D~46FWa9J2y|g6nC?jG@o7P(Se-nDUiF3D1gAF&I;c*i~r{?suxoUq7 zi6BQaZr+Fw`Nfs5#Ec-c?9v4y3M5~IbGMmdeEuz+4VcofV$TY~9V{qtgS;64&zL;B z&!oT#@Ya*3qptvXauR=DAtjAjm?~4*k{9j{{?Z;Ft)pA~TDlkDxAu0&i@B}hi#)i_!?fVkAGH^yBN71d)xV;=pa#U9_1>b{ zYhH8?a3Ut71iqF}8v1AR!{_7L%P&l)cN}M4OyIk`mSYiymnvo#JgNU4vGIx6D4^Q2 zP|8XQ{k8F~Xv25&-TQtAfv$lM8J#7{9|J6u2nEI1IN7a_h2j;gz?%pJc!*Ef2VH9N3bdx00bwt7OuD_!Abe&txb zNv|8$s_9FM(qkHYrfd#gd8MqPz4s5!XG0JL=qzfG(TA5bKdHkIv(MnL)7L&5d9@VQ z%~^93RqNYD6Pkp>YxPfuB`TLJ@D4>{m@p$^0gboSyR}+21XL-p=--H&-;Yr&$n|l? zg-ka5r=?^d<7ei{mq9at#P6QG@j+3^QmOOx`G%xaCipdn+dXYri(uqLSp(9LNwSDD0P?ZSxgfN5*(F)BYgz(9Rz)qw=?NTHh`8<2y&MPp z>t4-5c^0X9CJ5)w%M*0}1cJV$>kway$_@$ zBbKp=OS_w>LiQtbcT_&<~UuLeWwIYZi3AHCZe?*d?1kfy5M Kv#KXA-~T@^Yf&Bm literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-125.png b/Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-125.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe21b5e4570883eccd0a478006ea803b3f69b27 GIT binary patch literal 14705 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 Ef1QPYi~s-t literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-150.png b/Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..d74057f9b3ecfc926da7d0c2aa50bac23d95721e GIT binary patch literal 18062 zcmeHv^$qmT? zBkp^CKllC(_df3D2Oh+O?VQ)^)bl*gc`sH^N1dGXE-45EBG-7TVgLeNDFlHoeZO%X z_{%}E-#+l|=8LE1z90}C7xC+oh5_ea5J>H@hRPG8z?>}ZVUHmv8ol~Y z{ zzyJ3h{_6+-jf4M-^T22EH5rjRGzk4duB;6^X0O%DkS6bGFiOTPhnT=OL6 zGH4^WyX{oSy{a#w&`E=DM60D<4Ey7YW6PM>-aSM?gsaU6!Vjr zQL(eHQzY7^7y9|>3SDQeCL&IF&+0KWnP-X@Lg+J_jRPE~HGPS9TleLBAf z-0i_DuGf6MEmHzmC1Er@UCi|0qmj}qNwd39Cj)*%ZI>)NuEK^P4`(iGN6Iban4f$f z#R9W7p4mBKLc6mxGvN+NyFA=zSif=0xikA#phA4tqPsRN{3!@@$Q1by^vP=jpYWh* zAi!h-sxWdltb%jp4l3O-W`*ay4k4OW2(tRjps`Ye@L*tS%Y{)}vH|-@Ub|y)a*G$s zSKr_A94{=2EzET@JF$G193uE~_39#A^LKpkc^AqDDSVdG&qZiCd0bx3872LH@lH^wB-e1sbd_V?z z<$FUP^fg=vhEA4_{rWlxGJTK|>0gf{59XJZ>q*eqK%Xm(OjOQV=$r1{HP7k`sJAMk z->grHeiMYy9`|$i+xgMOhWu-O8T3I|=?>`g5-H}r$JTgQCw1Dau4Ko^lvS1qJG)7B zd8w{|uZcl*pvFd77S6Re=yE3)6_#a7;ZNA4$OTjE9WBRe)}XKFaksC5wgN(P)mT?{ z7~nM8n;fhcPb@_KES}|wKN(4>{PI(5T>f>u*tj66qQA?Vdy-Lz=luaB>nX3zZdabyxE!cIM;?kCl5dh1;Mak!gJce(==W<34aghvW~ z^Mozd{7$|CdY%u+eOyD=&opa{l&9RttN!V>NyBH6f2FB|<;ezl-UFxQ+~@dl^zu#; z33?Lu%%Z#OI_N7aQJ}@Z()xNgx%Z0AQ6R0QRXcYdQY>3GtNw^QJYQJ#v&&rv4}MbKFHYmc`f2F zPNx-Hm8BpGdVHn^#J!tN;sx2&#Wja5bswMrrKfR+xnM{@$CVIe)keYG05tiG-A-M9tNvW{G<$|66 z(M<`^?O7^nJ#$aX`$dOWASF*HTa#Pkr>wJ~IL)o_IPTosr_;=Nsndh!_R^vmXA#}* zPt%qj=Bm_^HnYF%cv@2#;`_NrI65dxA;|d2Icgz?4D^DWsEM`-jEdeYE8Ad=!x@v4om_a30Q;QRo(ngLD}pDIHObrtriijIyXRYa6D%?>riql0db5@otQrbX5iUmUJ3;WnXCZE`d zq7L$apYP*rp$adK!tM5l`Up=Ub>aCery_DprK?3xo9V|sXqRxMJbnZaLdQ7SIErd1znaDrVr;xSkgQz;W59g3QH@A z@kqjn@B9N5>yLcaSYDc1aTW$T&?_Hez%<`@c78!YE8zYHw<9^|U|X2`F1~1DXRCAq z-QlzXl|S#5Gw*P!I_gwQ?K2%>2_hE|kD_s3sC;s&pe)yxHXgW6^8Z8_e zREI{XHNdBr>Tb2SdbZlL4O{U=oNqg`m+}-kw*=}o_xs_~iqHIy<$RX)$yXBSqPGHP z?A7;_JLd;V@Y>on!|rRN9`c642p1d{uom);Zr8zm_3PI_&mRD>{q^NHv)>U1kKgW1 zZ)MR?WzAhLk>U+_Hft~^p(uqln}9Z5DsrB^RH*^cG3l){wxp%+!Mq+9UCE7>1x|F{ z)V(qn4^2+rg{SM)E)`@x16K!{iRu3QyH(3UN2j|k`7PG=66hiERLrz%BD*>$`VB)F znvGljt{Vl>kq%$UYX(`E_Hfk4p*WeFe~wr}I_Dl{V3Pyj)&g~*pN(qWBc9FG-RksVC(%|#XK>tv`1WPUwNBT!@~$y{bWVhLSMG{ zDQvn744nAam!c^UsqJ-g#!(3;b04wKAfMrhZIbP_B2HbQfr+LOjkx#j9HZnEpmGFJ zGKWv?iH(=YAI6%^D1_$B{SCdll~@al7AY0nMzBGvePXAAx=HOK@2pNQl2v6{!*%lX z`M}LU45|+K6hc1y)#+Nt?pedgZr#m2$6w?%lhCsYb#Tz}+mZ%9Y|GSMPC<#_`1F<5 z8kkym(D(3PI?>m!gQk3m2BaFuI2S_E%lxe9iA`z1TCjGs);JtbT=X08Va@|4F7Lbx zg?9Yx;#@8j8@$;ckB6n>D7ysMMjGtJU?*1sO&33z<^|g4EzF!tx&D+2=tH+Y$-mWA zQL}I~CR>5m_I(j2)g1Uyk^p@S`*{3O1E%BSYCeu$TB3BL ze7UgPPXW)+x|~zG0;Rkw3nnGwNXkVU+?sn}#2gFm_JC`Jetzr6lp@3yu~)Pyys>w8 zcPK4simOd%VO{|{a{$SK=G2=hWSkY*&$kwvm9oIn*6ieHzMLKlad;mru1$@BUY!s# znZpl?WMu*Eyr$veM*KT&?E%tY$G|$s3bfNR`sWd4y2d>WZl&I_F@YT0pDk8ggdrbI z*WL1ciJthCdre6pXuXrI*t?Gg^Tv>=EO$v6)|5>4rzXHpHa*2b#V-P9o5UZuaK5Fs zO1x%u;F|Aov^_YcM5Tws(E2)6rHPCeW}Mhe|C zKJ9TKkyUf%+_UTw*_$-+ zbMl4!)~YK?;h7>$MSd(9LiypFUJ2LVDjZ|xn|Hs0JA+qh{2&!&)?3=+q6< zcV*PDLT(qj$o+^_2s1(dNx1In;o2q86d$qFyVVAd@Qr_07oh!=w!StN`}Em)FxK2> z=F+#Oz6imX{_eU^KDDog*!gCols2t^-7$&^hBJ>*3#6Tq_Vp@H_o+j16vCC4WUDD| z`y)v-24UKqLdZXV7D~>1OP`C1O8$edmJ%thQITnF>la|lH^j`Z@yO&w84e-e?3em% zm012xij`NOqbo4?Ak4IMgA=ypu6Yf_dun)X$~GO0eBwP&w$w&nbP29*Qhlz<8WvV7 zx3HSfWDnmCkLx%(r)+rMLwD0jx;Yoj!)IMsJ8)i9w;3~D&vTY0Eh7c`WKD$rscHT_ zWF%mb@g+?)78axy7HK!|A$vY9A|0#=w`^6-%WTj)oyB<|4a_(4#s}twCjEV#rkvqy zy4u$FIt4uiA283p=tDn|HHen@2p;6F6P zi=Ajv*|(M-`=!UXv2a<{EhT9=1Cxu?YRd`oYeiq_8`kt(r5@ao{Q^pCoEk2V8~1v< zXO+!(5bVeEFsA=2z0<%Z<+CKnR@@RZM=nCaqBN|_KvwtHVTHq8{dBlZiEG)iyTFYl*!h|4*Q$zyMvpP@mqU(+jV_oxgq*PcSe%A z)I@e)otaDiix3jx2@U+JFo|tKWv?gkQEKt_yM3D$0~LM6-bm{A4;;rb%nRvMC){7O zrw!_nkyM1KO%JY)(!#MdlYeMG!vM=&ss0$CWlx; zASdjZoiCJYW@<}BC>qB5`(p-J-Vog$m<DOtJlY>+4G(e-$=6y!t4ljGgv1^;Oo(aJ?O-LD)G5suJ(sk%(&w#kr+ zmT$-N{xul<#mUUi{&)k$ppdwIUX^?^8T5if0OkCm*OxyZW|A_n>bAA zE?!!BkRp57@9yh>I#DvkHC79ftXzliKi{9tAZE^wo zvS5e9qNvYpl95Oh<&>;5G;yOHP=d%l$G*!a=xY zGt1~_YtItH3z)%ndoq6BBDUNm?HSvau-l8H_g#vz5|2QiMu}jJcDiqUQxhC#=d<#z zPqWX;B-r?RLM9j2?=R?i=+qtBBEu;E(*qHdTbzDf0a#z(=sGl$$8hTiHM@d^Cb6zc zCQB-q@y<$zuUbzf#N!asj|){zXY=LJ3tvI6+WxhYhM)Gz(+ZjB&0=Hh?JKb=O84_` zb+(>D1ZWg(GUo^)eC>zcNP}L3#&$x6BY&qB-e+CpufTCbmXq2vp=1$Okzb?LnFwUG zEXcDF1-QKXdlecdH%f!P3=Lt!3p3$g5$xUgbZ;imrzm2~g-!Tx%AlCUauyo6OztGN zd%Fodkd%Lf-FeD?pAwqOmDP3Ofh@eEP9tJ>!hWobH|!b1hc3E_qbj;J@r-AM|HPIq z!k-8YCk@Ssef)HRRK)4ZRTeCy1~i=7Z+Yy<1a8-)Cd4tQF-5Ev&8w9SX!Q|Glm-xh z&$mZImTsFbcKf{eSQx|NsV?dI5N~A|-kw%g%Ae92FKG<^R8cDs%gvSfh)Z_u*Bkkk zPY8|+W<}jUg7f@E+n#XbYGvklMYmx3=#@%uC$Wr`)Z;_K(b51JX0b{aEDPBdFB_<0 z6HFFYq}BMkJ!W%l%0zIH*(&MX#_ls>_iswnqE3n2B*&5Q{EtpeT2<|=*4+IQ7?XuY zk=11n)E~Q`{buP3tVK>KdsDd-cbS;%(=18Xd*0zq&)z)Aml9vE?3I3m6tZ8;5i*A? z$e%^;9iD_XH^*l&VnrUo=j^8J`wlPO=kp<9iaJ?hgNr*yPoys~zOZ+1Js8LLG$5uc zf>x&#OoejZLp zHoP?ah}KVw8!OCU_BVre9DXgS7%~hwQT#w(CY18&%!1Gc19+8m>UrUl1eT&Ss|CbD zC!Rqdn-MGXw`OA6k7d!>s3xU-AY3u}eYU_wJK?m+9`@{~k{bN1GgQXAGcu=*UXqbs z8=uSIF@qWY+`p=G>n5l?8wk9wc~(1>g0bJBI#y}!StavP<=1?tHfm+F&$@MYL(lDY zqM4tK7*BBc#j%9(Dy6Po_}IF=E_mrJ&|*KeZI)2^^73KeMfM}bX6?a7d=6m5st~mY zRhi?Lj(4X+SDgVzmJaU4Lyq$AIp@9ThxSc}Rc{bp41^hS*+$qLLTuc7G7EzmdPLB< zkw7utx<u~`K$y?I{;O-CJ#ms+)*n84O1|74#&HU@da!jF*-vJ8ceRKdk8 z1sftWhKa}iww#G9*7i8heA3VKr2=ybq8r1Tl{2FaSA2i`*ftP-&v8gqv_ZX6(G3P% z-Dfd)!0T6lhtrgMM3^d<#=7E(d(ierLDxP(IqZv8+%nqX*}2`#m8;A_8bbzf)9QF; z22zk-G?6xupYX#{qtdbUcB+htwBU@SWOVv{`5|wl$a(UL2zqF`!c#rx&U>yEDSySa zUlguX7HX>HS&YWk8Kr`gBR*nk(^{KPX^Tp^I4=CYS?4c3Y;Fek0V&&N#AbWOvCS>! z(^*%SqVM~T-QNbSxbNr*C}lI8Z4!&`dPq&5kL*9aM#HOeFd2%v=vxSVKUdTehD<(zq&e4Bx>`e*5+O$O* zNpr%6^fEwwD6tc}S5(UX^xAKlfEB_C|s>5bf79h8^XN&UvrMQwA1#2Nu`806RG$1&2vRK$?9B!(nDxZ~~z zvnPB*uZMhqysnJ}q5PSsRxSV}Ll$u~uoJ@JZh z>!>Mi>DDk{68hYRq5#YC|q&#cySbrVufnRWpI#q3lVSAeiN1h7JeeKt7SQ4((u`CpI{4 zQGPEF59ZH> z{;tQFUklJqL%NFe;D^Y}cRqvlB*vmO`Qhy*ZRDf6sJB61t?85veplET9W41K)0fgQ z4`O_5X$!cn=^u9kxidN7%qbsXN;P-UE@&LRoFx;uF-BlOZA7pch*nj3G9J zCVR;yMV-9toz4zPckSN!ReyOA{6du<>XBMAAj>QPx~n|$@rvMAjZo@ zWdBdgN(;%c-MAVf;V@~+v1*#SKvtjZqS(%F>{g~&Q@4V>ABIiH=sp)h+x&T-%i~HB z;R?Yj0iJ|@wpvdv-Nm3$g?#u7bWHHdVr9z>{G6303q1%N{!{ z%EZpE=8bz)XWkh>BZTe7X|Ti|_^~w6*I-*t(i#GChQ_@1>^;J*1@;p3C%94StBxdu?~Wu+c>Yb88g}XKtRAa6v8?f_!XcQY*W0J$i&FLP7U;LG zwwdhyU?D)qRNcchupDin*cP|=F%jNJ95)TGC*<+4$)`Pt+HrqT8KxFu1!UV9n?}hZ zb2qRU%KqXoHpe4kH}6Ura9j5O^aEI@TRlB)UR+h-5#@8WB~RYIx;5))%e<1Bm^K(9 zY6^bTe&VbgQ0k;+obZQyFr5dIATgt!pb&yMK0G!Tahtf@eBb$ zmJr(2#tf?hQ)S60@}Ndn8oiN&YXM#9T`am!WflJR{uJ5SOWg(Q8=Yo)tR`h?BXtJW z9Ds^M2V~iY51alIaDz70I6=k#u5mnJ0&o;VZIeiZS>;L@S;1;4Y}ZTkKlMM1T9EUl9*6^#Ok3F@=xkgV@%eO=_=Gd z9+Ouv2ziS%*~1@^$3$MDVs;>_&~6_+OPi=KE^1*!oqo&*D|WgQfJC_2779Qj7lV{H zNmX4o^2T1{Mj~;%&!gAkrY%>-k*ob2VWV2IhwWYuhGy{LAGXuH)1K3sinR;as#ASMnq6PVpiVlSy|*&p)3_Pw!O&}U^ymS!^5#S@^`zK?7bgM)p=M8 zUJlx##&E5gQdw6v;mU+ASZ6{bn%^nHv%TG+nKLWp5}?ocN^w{hWcIs?IBkJr=ppiS zs(9NVBsXIxgVmHX4f5dZT@X2w-*V>7}Z*CH(BsG#=(z~8i=G(tquYfi{Kqk)p%BB&!(-Bc#UbAAkYXjH z$%gLIQj8!;yz0lE}GZ0_j~UL zv-f+$QWRpT9pKF?;`-%CT~>)?3JQeokn`-S@bBc6ByTtg%RFl)B=krCi#d~4)MR&! z>noqJ(}q)c0d%)WLZB@=#a1f?|K)Qg!Nc9c&gkYIamu=G$)uZ7ZlH8Anrs#Rr$40Zf>PN&129_LA){yD)c4 zfE^Y}*M>*-Y*%gBFd0n#Ad&XZ1Io->pvuY5+9i6=g9GyB#Gr``OYH9ykFCg`b#naW+NliMAH`5Xj| zU_M`YD+^@_ew?-suT4G0#U}o6j&>=5zs>TGNnQo|M5g~Sp^KX18)Z-A#A(J`Odg+( zK)}|Hez(YbD3U~I=%E@I=2CGy{gUtdwkWZw3p$#X-o@mu7PD+3 z*RL|3jp9Yzcen>?_X!2gpBZ^TpZ-n8S6uA=#29&~8TF*j)jE!8*9@u7Q$k*yIe!mW zu89f}tV)g>$HT32^%Dduxh$KEqLvg8RFiZA0_o!ECVdifJ6{m?{eP{onBDWq9x;LO z1I<&>cdpm*XPf}PN2F{ACppX5SBia#rI?csvCtHzIW`;I(OaR>v>Hn=X9`pKcWALV zA8nDS=}@ZjVw&W2E0c;4HTs%!)wWy1OLgoDS&E=X?9 zj5p-_nMw1iEfMTeiG1FAx2y)_`BH?3ppDJF^aVxjpPsyPfK(07)g)~Cx=nRTx}q5` z&?*RGkH&ywqJuUa-Ct^T<4hUvMkzW!mW~Y_*hSbAIP)&~FqQrs^G2<>#;3 zBZeXQm0|iM`wGfYsD+mA@LGMZ$BWEt%dXU*FAA12yLOm#h)93sKiR)WP4D@Sb=a zzI1kn@%&V4=jZZmzIJBV1&~tMBJSASI+5&4h&>O?|OVN<`bF(n1YEW4dvq@ zK*HW`Pha1qo1uT5L7AH1HUhGVM zog0r(*k>aXuZJo85m-V|-+}_o3C!A)zT$?+nI`a{~ZuUYN0D8ugLoyw#+YGqTaqrJE z?{L)IlB1~Y#Rt#P94^o&L87;>tg-X)HM5UE6l7Z@yeWppUM}_fMzr0-&SeeC8TmChujD zc8giwaQP6qvd5UpW@ZR~oAk~?%Vv8x6VQkHpFWO*i6$ahS<{tUd3*qPg>>8s3@`1t za7k~P?OvL(4MvxYIPOoWQV-TFNZivA2~cs#Hj=^(wT;-WpTJy~$pU*|(Ww!QXRJZa zhZdPIzqXD&7o-o~0$6HchVOpmnzwKIbIADqftIUF^xqG8MCSaU+i~}NSe&|g(4)M3 zNhZq7!cJL=VJ>Ms2+)f4pH{zjs>PCbK05`zvE$-9+kE>ZKXiX25y)t4#px`0vP_|d zOqshqygWDh44(XHVG%8mH;&9}MXX*N`PLJs4e{^`4MCah40#1z)q`*3r@JFL{u7SB zEJYm6)TJLfBk;zRpU(WnQCY3dVkXSVggSX;sAA!hIrK(|D5eL%w|sD`A&R!MPHhW5 zhwsf!f1H8h>HaU=Rijmq*Cm6IaZb$MNR^U^&N%vR=l;(x8%yS;wM%SUy!(WkV?J7_ z!Y)K@V(MPE-?yMEh%ly_gV|BdIexVi2^i32r_K0g+$S#k5T4=QxAyAPC_!Rwh+WaK zYJKrJ+{U|W8|T)>^)Zq;VEFZJ8LI%m82fw=AcEb@o|mrQ!fg(KT}*#QB2M@I!E$q5 zW+Ox!&+5%(Z+w^i7rwv27~Zeghe);UoPenuhrtXns$7oFAD zH~`NgvSo{(PK_cfhhpNt?~uaNENl;lg4~>@pyLHBE5ACg=EjY`jA*o<^4SIm@nI)9 zo-5uS0_2br^~;XOQJ0UAMBF?4mtbdJXelDu_ykakmPpcEaqn`mNY_&Pdo64?KXz$A zo1RTbAWLjvC-C7AALXG3A5u<=!=KD8Rp_Gn9?*rVmWUS6zSk3{k=c&U=So4>ZFx5E z@T$SHU}qv$vTBsBUshFPFT08sO-E#U0bMVBlPkNVm0xJ9y|VSGT8qcc`5l(>6ZwuT zK@)b~o81-}RYY$Vw@^;-Pk z)rPR$EEbb6*_IDr3vmtE(iY!i7o1G&1MM9KW7H!j#1tK;8@G|_S`iECzP}NgloK#$ z>zY`F-*~<1tjX@B`E_+*4UF`wBOMRgH9&kH9;E~6nG#zpR9tRLaH_M{B%4@bSxIVn za7-oknGxm|gFIN!CFo0F0O_d22xXc=u1-o>FM<|fO?Oa1Iut&lBF95{C~bHh@6m`@ ztvg>w-q7|GK#$$2aY{rtcl#Wkl8bmBr*%e^7dokVcVPm9rlA1`;w}_vF2mu96jF~K zzV&vq!p+2QpWP#lT(64eT+MW^fmwt#PS65S3;up|_|9LR9vg%2-L&&jIg^87lNq1?y4U;o;m_E!L+s=XN5!9!k zaFy>VAJ2r+su12S2%Eic3;sSR}{A^ll&1e7|t?N~wHTjTEQ* z*}3d)+`yMG+yEk%NbvpZN98p)=H}Z{x3brzc)f1H)z8l-U=!#Cd(5xv@I}7aqfehs z53(j#5-*N_jNhIXm&M%D4n9Ml8QnVUs_ya1FB9y;$~|x6H*0IPU>D02bDYW-N?Bxq zT%5=fzCsW9uCIchXec!_%0YAE4X9(m@%EHSA+>VN3-x_VIS+ukOY- z?6CPs8Gwu5}O((ixMtnB<&dcRL;xg4mLb8#3);_kl*I4oc(Fr~<| zRd-o{>eUrdRSLeBpm73t(j2SBrIJlj%o5F?c<*%2XO)_J#W>2d!hah*jJH905B_nX zaawDw_xZdr9#(j37e|J|I7LjdGq=zO>vXYn!$fIdM0qLyez%wF1FI9bqq^ZnrIC7h zh9Ul0C0RUSPPlTemY>uVz!*AL7L!!@B+BTxeMEp%l?91}o(#S787djUAD>dL)}-U! z8b$UpC+Z!Tq($2M=+ASkoRB5*1%v_+$zk&+_01KB&sN~O{*<53TR4<2{U)ZYt;LxybeSlQ&F{*38e6t6O6VuCDv|q->RW&deix!zHBznCm{fq3n||@* z7UlU>m#B>T<(NKq?EpI|0Ac;J+o1hGic0knm9{9r!k`PwX9h@*9VW{79Cp*IIJc{d zCZSd4;{otvVCPBH-@L{U0v(q06CExK=`llwl~~+9__MFv){)G_7(0Nj+$@ znDC3SL161t%O%rA-^go3)_hc9XRN7jI=t{o?{I@+7WG)}@#f20b#sJ6JvE`p%eGMn`3UT&x5u3Av*<{ms2H4YOGv2KdRFpG)JI zc4X>bjOq;9iBW_5v+|dzeWXs8HTVwLFWT$E-m&kaw||<3L;~w36be$DZ@qZoVIySQ z{2vj2s)c%@ zeTPjbnJt1>N8km9b2^w+85R+vj8{I_99bsvU_?Fuf4q>z>Ou{*HwW{OtcD-?NNo@+_754$gi@2*d^FTX^X2fNjBkQ;Hy~$}` za9`sEh%|78t#0(AyP%W_RO(?!U%eXna39&YE&;bz)bPsX!z`$pJ{w2tbOj z3aMIH7|)D9=IRK|nte|kGovAvvF)XyzMB(neJMX3Qmq?Jw|knfy#n-QoOkx66++An z6^^~$vJ{9Gf6C%$@@uC9M=dOvaF_6n+gDx+PZaKk@QFaxGhA< z^%B88mK>q^IJ+d4>aH8w0$E1P$xvq&0n=P$^}^0Kd*^|cH!($gH14eMjGe#BpCd*H z{|+}v#7plY%k~L!8Irq(sO+#>T14nLdyl(|fzh4xOZHBh=gPSgP^*QF8?7y8JG;B{ z@hl7I2B-4Ov8nGWJ=07DnsTmjioZVEb`E+YcX2THl>^E&O_LVHEWL3R&TVc|B-~|T zmN*3`!jAGsBNJ>e#hlHlK%h`GbOHkx~#$_@iOI6*?6|FG*I0 z=+d2(QdKww@u*;@Io=hi&ufdxw2RMQ?nAQVD&3J zG77vr(a>|>#~Hah-z;}B_sskNZ89+G4>2*{yZR%pH!oJ}i~ZZ8D*$sTN5uBhZYE9h zdlB>~hE2?8h5Y;3ut*}MEOH`5U&_+HQ;2qSIJY}qn{TEbtVPYYrl^)%;v;!WOCUNt zs9LU}aJGP!7t=z!`VYQmXVm;wBxOXP(InG_Zp+Tn>*+}MlrP&{}9O}2jcZ6(F>B2G&&VYAuPvnI7H`Y9BqtL z(=DAbXl0_)#Y6ig!joXDIXPgR!qjh_h3Y+u7|vBAdHL~z`|a#2tKJgYh}U{ksL(BZmr3;Lp=^veD93)p}Njw0qEa}R@U4w_+Ulr8MRHl~+$$ z&AWE#gFH^39TNnci&+T39)bgra4j^3KQ;NfIpc29<4h*`6!u!2reLFF3L=2F320%4 zJb#3p(Vf@C{5Jg)^Lw9A)Z!kSekaQgh1~*#oe+gNaLOJ3ytuljW>rJ*8Ev$Cw+w9d zb$R5U1}tB0T}k>g(V@}JlIT4DQoPvNvem6W!RTmu3L+{V*bayFgQlIsNAY zHg1@|O#MQ=x^*sxVl9e$mYjL9wuk8sUz_J+4^6lulz5E+#A}Qall`98*{!A0HQ{IT zRLj{(EzH`Al$2d$?Vb6q<^^~HdI0R(_{mjOU?S=@m2`xD7+$gwT;vS8vgg z!jrH!7qA$`SIP#p9WQ(UFW|=)+c{oZLQW$ZbEm5G$&JbS!G*@|FmCYgj=g( zu7;IR0UK7~wFNf>fDq$G0X&&Z?n|S8+g~YmgfB(&%?#nf_FR_9c86&v^JRJ=XR*uV@#N&ps!m+{_^k*W0{0+dYdIF}@9H!Xb8UxaM=J|nJ=IN}aGt9jnPLhSA;-fmY@)-2w z%e@PP8ytX@pw+dH;ZDOLz${q;wru;7U5&^M$VYT04BGGmAQzzeUNKn=L?Y6LbS=SK zdew`H6Gm6-7L6RD>z_i>%G7{p0Jc25JOs+bi0dyda+#zMurH*Y&R?UJktdK_u4GB7 z577deJo@@+ zA;Ocdl`xQ4C9h%}m}YhPnIYBPSgw_Rj=TM5$Q*0jOd~KAkR+3oX|sxViXaTSt4dA_WhYibF#_BL+!E#sO72P zyb{hDzNu_^qoI*|9NzieJ(;y zv$p*xFlZ0$n6!fMn5Xui^_=kYvNaPoDn)Z)lXrvtfmxH)M%c`3j$^hXrb)FzFCY?E zk2a_0qg%HU!?x(=GTs5b@&nBFX)Y2bfn}0=-b2-TO{ve`Fi94d+ zV0Y9j3ljQ6es$>8re*BM-znve>iJpb#&xSdI$YRYHRWu99V1r@$n%imgO~4tMVv=Y zrIBC&|Li)yNSk+!a$$vYa$LiwX|-dghe@sidkn;59vou|i_6f-rravo#RMfR7@*{2 zZp|G#p#I}96cVGnm-rX zyL1UOBTB55HKe=Sg2Py;7E7h?Y@1yFd|Azj9zM$#UZUuTNXm!O^2W7lzc@ z{m*6ljWaegbx@T+CqCJ5F#dNcJR$&d6?ii;;+tVfcSGo|*9QLaiFNm0>l%~J98Cy* zYaO)JEbY_%u1^E~_6qstmqXCtG{L`#y+IldHc3=K# z0Y3yq6_n61__%HAANZdi`F@l;JXsiqxsPM(CU3+r3WVR2YZekM0D+J|T?OH_TATYP zcLs1b$E_#Aq^+t0_18t3Q;Wk@AyAv%&WpDl$Frn6GX-T;n}$`7e%6ZBh%x7yRXojw z+UBSCz3`D`(2mnwZfKU`4$rUOw)spD1$&Mc3Jz$i#p47rgZc20z@sz7ChS=Wj**t} z1O2f3VH1uF<<-*-q35a+OGDZ}70XMBIqROi!y9iYPWG&aN@dTXd_BL7i0a8xY6{M2xCS-8Fw5S~)WC3wKA*Y_;Z5s6zdUEwSRZgrCX3Ap!^Q{|r%y zvYMB1aUkh+JI~Nr3T(gwMk;_3Zd!pp`Oyt~Y624EOQHbK=#QgE?(vhL=H8Hbfs+qt(R`)J%}h^qIjvO*n*Sx`jRxc;c#Q^Sq#KTHQ4FNmjyNUX!V9C zsbF+}YlK->ukT#~JtpR+=5AShR5v?(WR&Tkt0W|EEUZ=C#NXIzW;+unV3qQaDqKB2 zJAhVqv$3fZLHfU+&C*ZbIFXeCAyU0-*B_fR|oF=`dhrH z`*WZ166iA@(M2~^%9dJ3&tEhudQW9XdC650e4sFDE<2>LcD_YTY0%{jxE*&94Hs3b zqTIpZw);sA2sFb&e5JeU17Lw|<8&&z)bUJ1?92;AKPZ3-Na;zKC>HEKh-ah}YEopR z&YRk7&Qbs#sy`&6f+;uEN!*-U1jC&zv1P7F5wMx9+uaTFOK%%^kyW4ft7osV?wXV;pg=M@U`!VVytAraQyGK)PbJVfD?S2;3ZScqmxBZ^BsIUQ9UmqPDwVj@&APxdm{#!pq zveTT5HY%Pp`ulxF0 zaaIhjzJ1dD!pL-ou_dV<(KEr#rBeEX8`V%*int8|{iBOy9>^U06v9&43g>uoSYXZL{ZOOgSLDdmb!TJ`>U89E z2Ofkr2+##SSOHH&=53qF_XmJ|MuQW3y~9*ARFvjppBF-cJ=jL9v6ARm6iN2QmW|w*JTcqLZjA5qU3vh- z60y%X=sh%7J3y-*w89B990?BlSBDbv?bKbs;K^*)wAo<_BUv3T(>B5->dAdGTI{o;E%ZD~(lV6mmt?S(N1F*j^ znZS7X&s$;1skaHMy?5pB+OVDT=s#RK)SkEG-qss zM4|uvn1}zzKIY=p#Zov68PRUHc42uvwGB7SVjlv(@ljm^fu3^#wG>pX0-(%Sser*j upQ-hMKbWusQSw!jXzu_1^Zzfm!8^3a(WYUT2IO22NJCXerB>pu5=pYu7N^EoFUUudf_UF5t-M@Pr>{Mi#d zI=a8c=;+Rx{7n!1rD7DE3A|izduHlMN5_8W+m&;KXwzQg!w)!`xMIh?IetpS>=mgNL|-*x|6efildG|% z!xQ7{72xhbe@8|1c5bvaoXr1}q%WLG zgEcV{`=Y$>x!h-L7{WyBNE~Zhmj^i!MnSYdsMD=FIZK`+^-KL__8(k10RCY7_=G8Z zQd#An;u1XsO%CpW_tPCHHB8?4^ktDd@-%&0Fzt#Ywt`XOMrwhzsYi&U{8o*#@q+yh zrXTvJ>we(s1e~)keCg=c7J9kING~k0yHV1nYbR0dM{#WQpv34{gsAk%J zA(e%&w0zaH3#-g3FO`KHrkYEY9J{92l44)C{-H=}!uzo;lQd_zdO_mU74EGXsx`6a z&Xx_a!q_O7K;v%mGY=?a{|g9!v(mtV0ZZ_7<>4;;w7~Q$b)vvsgwl)PW2FMIMN6L$ zNrAsK)&oCawpN@Q)N76rN28o2tunZ6v=sIsn4?{{ay1KF+}&+o8fyf_M!`+hm7!c; z@UuFa1wVi-W%K+Ea78*F>))$!MPhDIjK_b=Bd)(TX+L9ogY%O^7e@bcm8b+^EEYs$ zuP3ar54kowUTgj^L#4*ekgdi?V~2|0>(A_j4K3MS*;WQ`?8>c6O{4+rE{*=wa;KQI z%MoiX*M-3X-P+u)*N*OmDc>eeZl)$6L|hlyNMVS+Kp4?CoRcU#5!UU>jMhuUKkb;< zar#+JIW<&`kE_orzFCDhPYiowVdRCyj#lc$+l(!AUtMzMELiah#50dLZfV)1^R-@GblH7p z46eKv9aCqgJ^pN(9X>k&m)`yt*c0c)6So?hfB$r9YH(re&_q4!6@4zEq@ORcr`)CK zSnv{rwnCI!Gh z18==NM@QFdd`vuu)1L9P=4z2XH*+|-HS+l{sJ|7lQa^Fz5%`8jS)4Wx7k5y9Zjv6Z zgoL05sED!9(cOTYT*SkwlQ5XG;WFlI9+(*cb2ym4xUW4xGOA7$4~cVEH{|B!R@^cY zHr;D6>_6JB3bW(^9x6XQdRrT!92CdYnsOWdP~AvfQq2BZ->B|Flr)Z4;@u47`RM!3 zMGm|{pZr33m?bCh*uDQAyX7;axIn}Np*jBctw6l&Wx@~qDoX%Avfq8ot<_p95io>( z;3G~Wb{F=82?H9y7CX=gGnZn-MI!0xqZ2*pGZ|CAFLq*emi{cJ zzzU49iu-V`08`*}El*eD7Zu+t_hh`~6|%&FK{AhyF^|_0h?r=4Gp@G-y{cBW*Ifyt z{X!(fzP1XA5r8?n{~i+r9mK-MW{g^>w1aqOY8h$>YaAVB$-dmJZX0a-oa6i0%lz4X zwWpI5Vz)qlI$@yaEZ|EVe>nlc-Ssi1-m@0_4H9_dc2(YR%?Ekg9GW)aC=ID-;`lJZ z$}KTxuMfT_n7$v0;tH?;Y^6Lp!Pc~dKPennpSSlGi2bUGw_$3!{`)bAk9gmP{74;BAHFa&l>=!un>IB`Y1>x0wH)5*1&Lv0{>t?O}XREnoXLg4A0yCGNQQ`x2W4 zJGVrxb6fJ>M@t2PsR3cYxFV*L5VNn&$z9913;Ba8SQ5jq_W45%kgMWl)d@wPIHC|- z&K870&{4mgk>WnCpY!zY2>-1m2-ry}F5U+~kCW@v--_O=O?o3aqAY3fUPcd; zP~4~`GPnNa&_fwsp;C2{P3C&Zhr$GHBCWSsTqf48x#fvC0)M~1^FYkT)a6B;gGQ*O zd7bW~7BN?SP%jJiVP5UfAjfI>-j~143q3?3 zGilBm#eV87sRNL!F)MM&az0Y?hR?aTN(Ct6uqcBFK|!Ui6LZiU{j>A5m};&20w4!ps`|M zwM~y5sWe8^bJ`$L6JCof8_506x-QGNv3*`_-a#DjGteo_Fx@k25|vz^Nn<_Q4Js(m z6Lqo>tgE-73vI+DP|D`~$=m z!ztv1cyMvb+Lh0{gBN`a=PyL_db|l^TKRv>N+15FZgO3-0;gq z^ucRM&y4sfbNc%wc7>CbmOA;)&f|K5)ZGdNZa(%usp6aCj}2U|GC*uI0}&y%c1j1S zFtx{o>8F;UaukpMh6-}hq{L0s%A-EhI+UxDrXL_HYui3hS+@{~pgso@Pjkr0l2^=~ zey^$#j|L!G90ksIHkBYY3ifHbeE)s% zETUZIOpCxJ`oJ~z-azbUj0jD9y4NC^ap+sQv!l5yPQ0wAorw{`nk~H#cU+_ge0K(b#G{oLTL^YKbzM|Q36`;oC%9LE^UlV2d;u9;ki5rK* z1vaIg{5wq`x++dV;cmtwcnpVw73N(WvrET- zLO8TqfD-(rEmu2hpH|~Aq3EEJJmUnF7#Geb+ zzY|ZtyxXH(TJ9%t3HNnGJE@293gjBM|H5)aVP8xBjd%c)Kb)TRi#(fMlx;|1eHtyOUvBCBlOcalQ(Y27|qsCTP;vKG2Dj`P|4kYiyqjz9XCnM z)E-Ka3BHB~*M+cEXwf>mJz9v&)2GvvfceHP%ez0T0Sr2gx*Gt})pjyI5s+W7VN*9$ zeasr}?b({?)Lrtq-gZZiI&FKV?;=z?=W@%GIi>DM!8O0(P&!?hf7@4h5@W=FWqbc( z)qP>XR^AKUm9}BpyX03JcEOEb?z5f)s1C;on07WSE;cZvH~-S|0WBGEusyz+YD6}= zY$4_T5NYKC-{TgA+r__b`|_^LK`kRnEUtQD3-|aDe;zc`lB-D!}Bedv^hJ=dsa#mo5!2Y~n|*ORT?K;;xpG=+a| zM~DYL%AXVZIr>7aQYb%5a}njjZD!Nd?BZD$d_0!E8P3^H{9@g$7pvW{MBaQq>NHVe za(kdi1>^RuFgm^4Yx1zi8!r~q2O{Of2aw-hRT_Y01?Jn=l8lA|-TSRBv9UzA*H~Kc zC0=oQ4LFO2qr&>#GjtEPuGAdchehs)4%b0ry8YA{yj+lx9Xlo7*lmVnXlwh>Q~f5= zhYsBGw2kkfwU{)R<#jL3(Pba;TI6h>~7_hQMu+EwY zY9#9{7LK;flvy1ePVx6<9A|PdOG$%;KXdv$Y#K&Y*QY@Zl)g$X4`DRZ>Zgxan9$VJ7q1sL@tI%)p{x zw6b-i?I>m!?H%y4Yd=jP4;oD_aIjy_dmG@;R;ZqjG?T9 z63muc&n$HqO%?O(NPBvQ<=obq;oTX1 zNT6vk)K(0)GJQSS8yk8HX1}vlik=M-yAplHC%qg|mhg)H-o@zpt&QFIg%l-FL4gTtspURKg~h4VA0IVP zRGNuffXMWH61{$DIquFnIpfu&WZvD8sP3&?-mb07b)rlg@3o#hM$W_wh(}P6BH00tJZ#IRp@Nt-%f|__NZ;1oA*`1 zm8q7pMMzJTfAOBr=#pMfo8gqO3C=CE-bxQE8A?*OZ7RqOKpWqEu~mlFkC`yO#X`;# zfSBdxeFFjVQ4%7m=gGt;vs84IczlH%W&T&d!B5<+YE#V( zn$wAxM4`pT;%elJPSoe;=jJ7AjPu`qRZc z!M;?dXkqJ1;Rkzv;zjo+b6ppG7kJaWu_zsKVTa}3Gp^>M7qTXv!VXFVqX}Bmp{f0E zEOAZ;L3#d2fB`5$nNKp)pWA^4Q9j~jyo4pcM+?ycI7ec^GvkcGmeB|BwEZNb<`&aI z{)w@dY8juL*Q9PuND!1i zd&?O_@l*%B>D*1Rg zax<-Ic8S+DxP%aCEPO@SN!36_zEKUZLuWJr15cSmXjxiVmx(JYPAj z0(=0X9}9XRGf|`Y_N*%zjr)k@1wjO+_5>7zW|IC3iBt991-$k6nxu{84WiIu^+rTq zAMYei(N!cJ)jgYb^vff)8M~YYvkT#N6C#kbxo0w+ciKk7SO`BJWsSnkO31tc7Vx94 z%cdRX0qPLN%~%$Su5AWu9=j%pPvY9DNkRpG!t)w77l5%0n4dE1fJ+RoJJR2}@yZ+4 zlISxDKZ~EIV=Z z$(e>ehh~`S846ki`nY<#7-x86VPwprn5VJOKT~KV)yOuge|Adh)1PeNMmiDY;a3F+Gr2Mnq8{t#XI}_y0jhpv*x;~ps3*3PXJa; zPxB>Z==CtdLQg!5xb(viWoS?^+(723ce9Q)>oE5{77yC634MKDsijm`7DWAg7eGps3i#c|QYBsD_E>fys%dWe2yCC^-T9+_vKGYk}^I;#u?jk1*vRtLzA9v3$jF*QVDZdtS9tH&Su9r#?9LWn75pe`Ey?D66;qa?|WkuxG=5;_CL#-=K8fPAr&8i z92u{65`W7s6Rl_Dn<jFh#TF$ZI?L}{K}*BA)E*FjYNdh4^bmI1;e1H*yRy;; zZjal}fvWX7M7ZUkp4OE)%389HD*1y4iYM?>6VaNId;0h%}{I zx;?we6w&U3tiopot+HAK<69^b(E=rgibB*QF>BBI$ab#V)}HV5;bW*{8M{zzWn1_v zv6)mCz_2o@r_6=Z&_CL7J%28AVux&`sofbkVb%o9F1+DB%~#%bL;<-41H#821{H0> zpX=S6T)BsuoJYy&HAYKe49Pu=DW)vgei^&&?k8qT3Hc^@6=xu&CeKhu(CEID=4Vuh z^b=&n^3_T?qH0Hy$Ut(w;oA5m?#j@!NI=W&Z!$HCE8 z8Ol)yM9}E^z0S1e-V6BdZr0^V8y0UzaNbElH~1{O;t|CCS$}imQ`Q2pp^#)2qtcvu z;{Z9kN<}4`6m54*WKug<-o~T5>;o%prQSP0ZBRnZlq#=@qW5lFIw!fbr@CeuXv>$0 zbnaqoKUjJ~>%`if)_K~erXk)FYm~TvFz*2zz+J(Ygng$V}*#hcylVPRA6$U4~Z2VOu4Cn>yTzHq#6)pl{@=MQbW z;C75BGjaW*1Rrp6%m0~|f>9j*6KY+!#am%$R4|N!fe#md@}OhtNX_|sjv6+P8Z>ml`ih^=IDq-pFfmz(0m}H;0Ett+G2=f zU0*h(ZTkyvDV9z)Bkn+dTtS zoHVf})Mu(Hlz2CLJ-7kx*(;~NG6mr#(_6BLS?1g8z7i&6WV_FlLcN#0FHr{AREFz$ zzUS(9N&7DU9i6(F(JZ1>baz?Iq?2?7$)Ti=<25NC4EG*#F~!vJjOI4=agJ)$D1Uu? z^w^2Pr{?3+kYc~o__TjdG*a$UwMqVp_6iPnKhR>u3$*TOXmne0xiiRnXa-Sb87qJj zN<|wKCm>%`xLq)!U4J*YFVQ(|-`{0+0jxlDkJawmvXxp649J}J9EPIDpU%b83D2W6GEh)tkB2)a3Mp~PUEGst%#q_vDrp( z&eyXpOovAE;~8c@(5p8eW!ahslra(qLM}}UFZ$?)>vv&xm9y**s#VugonX~vuuhWG z)gZ6#`_buUyAp)6GjEQ>UGw>QeBadjIvLId6#A&vTbuJ9E{`U&VHM^Am38G2-3JcW z^(1Yd_MD1b3rm1d$9f8*KG=bcK1^L;r15P^uKvFLuQSe-mebYwdNPXJVS#5Lk7^+N z|2j~{U447^DDKNtMd0*YI(JH~CSI<6Kflh_yzvMK;Nt~W1jsp#r>-(M(Wzs*n3RHn!d-?JTUP8}f~G3dIe&omv7=ntKbV0&4tFl+8PuM~@ey?{Ho6KFBS*BPc`CPhJ;JCnkhdxKZ~)Bgr? zsQ<}H{@N$B&vehlZT1-{3*2&l9B(iBst<<>E|U`r`t8Ce;#Es>^SKnJqGZ^H1Chh- zq!zwf1af=n7CGch){)P1@AIbKcfi3lk@YiX4(34(=)uO~Th%(mdRG>2*_kxl$L-R} z_YpUb-bsPnWTC!&V+~7R@ZOu3_e-2hpG7}7$2_L8zzffI@!$2PZPi)GB0eu|)g(L1 zb**dAPObDl%_ByuVL&(Cu(8HDe@j};M)k1(({he(xKDSmV&>2=LBocCX$Y1D_ znsd-pdCx{gr9Q0jat<;2?|F;gBRA8bS-uNT-p49^usMqnS@r1@gb2>Q;uZo=xwhL~PGt zyr4##DxX%WZ1(5_UuA0fQI$t-&etE((w*%W(r*$~FkD%_t(E#QC9qERi@RRQ`dzly z(kNJY{|kifo>|U;CIm6>rQHwo1`ZPnoe8@D1kuxwwNzMqxR>Fy2m(y3iCM-MQbu%K zY2ho`%CS;OVNR)sTRt#=LW`VIXtPwzVDHZPR`mseml_8Alz2drM)mNRqFi@#%w-fe z!w$6H47s&IkLQVeL=G8|(G_fcJGW`9x-^{Pqq{(?qjCTTlv4Ex*(h25mH{)8@%i%d z7(cA)!+7mX8n}+#Soiio_DtHXf9|8vl3$9cq9b$0EIlAn*uNL89UQNoMS^vo7^f zE1EXGr^*;*bs0^6TJ4LB^${kl5!fqNMFh;{i`0O8#td6|QY#&_fpJ5=stFBF=1Q>{ z_3T}-;T&%X$(c!WwTL}_q!uk7psZN!hkmW<|M%-vFOu>ZxO|H#I`-77L{ESESn-M{ z3Qgjfu6dN@+$;`(Veoag>hYj<0;dV-y^^Z`_+Ik4PT&=XVF0i3vc5`i~LO=zP@KAjUCeeT~# zF7sO)YopC>1AwA7k&IvL!iHC=R(#zjX<|yM`7K&ZNNgceJAd{_ z#NG00b>&X1lMi<1OO<+_=i68(&(+AJ(b|Ybt_lLgY0|b@<2ndA5g`A=qgGE zjY2P83HNM#hYfiU*!LK;u-ks3R`H$4kfwJcu|`LEO@$)Dc2ut)pGzX%w{thNXv_L# zoz&NP#Z}4m;QL$d1x8A>eBiNSYmKGtrAW#*8^E>?_2Eu^KDvdUk=5eGy%6J(B`HW! z`$&_q_q}3X5B=eN37sDo4kd=ZQ*s_NDLD~pk;?MoO5ZCdZVwoM{sS4OFdl`2-@lL=m;wVP?=x~r$#q@rKRfI z>E-n-x=6k%n2&g|(V%3e(Jl%jVU0Hb)vVUZ0>QkZT<;4*zybl5Gwmkod3*uKWvUVa z`djr}z3+Dz2xf20J<;SGO@>u7k}EG9dabP|b@qAVO$Dr_Pn8iz)syOXM1*jbM;d%;U1_VGtud51w?>*s!rQV z&2Fir?p9<*H`=v6RJuHjUViqkPxJE^5+`a5bS&g=Lh&PAAq~qwtwo{Y@xtuA^Ms%! zEDPSga0brkc%)kAT6_s$UyTK{HK2w2JImQi8vAC&%VqO@iJ$tuk5fJ*rYHDC)7)OT zC4MhDU#mO-D8Rs7KF9Ma%h%K9<5|lQq|Cac7rLyM@EA`{9)Pm;14ILf(4F}%W4mebMVjx)AP>qNypoy4k?h)PpK&$Qwf#R zyRI4$zskg%ac=*xZ?viF99zkq6~FC#77A7v%JxwTb(U{oNwqcD&?tYRs-LI!bw&Hi zPlAJd4-v?Hz?dLFD`Q)~#du@!FZ8!2^UEtC(ZuLqUev${A{+?syx1PC`v zky87c2S$~3GiJ7#1!JPs5ulczwCs|ga|PmUY3`Kqn!0F~A0vRy z9<((h9Pap=Z~ynoQ6vO{(oZL(LZ<~dnH;++DfO-!j)3EVqsdCRfrRJhC{!8gyNQ^2 zs{coKrovB1f3IJF=q`7D!oy~?hTP)7%8O`qsiTGJwAh>J);gkwn>BmKo)ndDa8jCPb*^{;}M4; zWmfliry*NFcUlWva^+&cqLAZV8Bt(<;9=EiRCoy4mKbpq!>5aT+@Q#&3cT8c}@IHLNJ5-_0j;=f#3SXPZR5>)}YWf`Gk{Hb%O zJZm#sFFdfGw6C!9P2{b;)qL&M2;XHM*c#6W-z3qY3!2s0*UVKzxO6^nyt2-`M)@$t z<&Y2uFjBWCGKU)<+02qT7NUS2Lg#7Y;zc?_XzK!f;GXrI(d70YuDwZGxGlHmMpw}G zq6V+SWPy07O2Zm4ZWC$9DOr)rlO?W+^sO9hooeWi6xa$Vbog-qN9vX(Nvx+;S&tjt zXCGcvfx2GX*e>NI<9g@OMuwxho~}LseESTQ@5cbsP%Cc`V+3P*l{1qY!^AYdiKAt_ zO)Mu~e&sUGRhwLR>G%%|;fsX?+U*BAmt}b|%&LLSpPVx;&h91uIn!tIv5a*j=I?d! z{$ZNZ-24TEf1q#l?xUSI&KjnV@mR}}C*wwv6;(Rz1a8NlzCH*b$NT@s9Pf_;BNt81 z`OAmh+0(Cub_NSXuHPScwlW3-9Y44iue**v+$S>=`yZNu>P46uJ^y`B&Bn^>$Hv#|5PCZ?g zKmck-IWa(eby;YyOO1UH?pywVf00^jz4|n1gzv~{2>HmSkAPV-BI3WQHw!v zRa!i-Ci)DbBQSqU?SB$AO&rqczm|PSbp$#}CEnoeLV+p08yO)rO&F1N8K5oGd-+tb z4P6yXe^BG?m;r(n)3c0$RcF$;Rl-?TiuCEd2UQ}C1e4|}iXZIpo2QFwHY_ZaN!m3m z0wUeu`=t>+aGB~>P&peg^fU(a^AGZ-&@rhyzdTMP<%kHC%+lKuEkg}@U+w_9FvE!o z@*+K2T!H&P1O`E@6c26@W>b$~4uXkO1gj|wWQEJ*;5jG8C9Mw5%qa8HEM(=OsM zP{S+3DgcqQG|e?}-+~4LnbfIgl&z5J+cNEB>1P$f<98GkYQ2?-XbQ1Q^i$4CeOU?ynSFQlk!4!;W%aMv^!x?9r$F?CfOJ`#eRvIFIV36<77Z|eS=7|k+zcRXjw_iD89ZLhT=9#Ey-ei^>yE^>&8 zrTHE%nZ_jTL7C)qkU*APpFByr5~pljxMu*=s$LwBUR1+*qow}^Fg9_g$`U7m=RVdt z_ue&Kc9*W#yjopM1dK8f*-tgo`p8vInFhyND4N5noyH^v0MKIz61I+lmt*Pn`XW zt>eS54Q!IcI@2>*#h-zW?^t&~FzmNUOLIXO`a77bZ4<$TYTWQwmcA*TgvQT$Lbvp442rj63STs@dzqqM5@ z6B|w^fvpph(CrHb74yHYONVoDrWTYVnlw9(U-HWQp_M-h+8O@&eIMGczb;8op&`1Z z1k61-IfrXJRw3(7L%GMh4`mSWBA*1YBZoDxPz*fgMsJTBm=G&IN`CcjY>pY{Yg z{N^yAF+(%7ae>1%AtV*9?b%_kH5XtkD~=FKj&q?v%bXD`yH85s|5A~z7s_^I8+O9+pVs^zc8YiOQ{V`sLFgnP$Z z8ZMy|yN@iE6=GQ{6=%J!A}}wuATA)gN>dE36XyeWjmRaG;@CwYh2fChhco7`4}3~4 zh&p$!o{(J6|46Q*O@2+F^RAM#CPXJ+U#`LR#tQy8z3Rs#fBmtgR1M9WP!)QQhX^*F zpsB}S94n~_UCWn~2deMg{PrX)zK{!3Pc6DsLoB&-qMi^^kF~BDcoLnRGu|xE2!}0K zli8(H+ZhtsE-)$Q#cRuhU@0k@rfC7w;`!q6@Q~)~Ud)H=#NywQN}cnffK^-nSv9^p z94nNYyKYAQ%gKjXrd{p}VF6;WSihgVlnFUud^#Q5!-pDEcp|{~Br_VSsyEw^=H!M# zAYqkF*_AhK%v?QbYmPdN39+3g2Tma5UBI8bNYNSzn7of2ql(thnfFe{%!3Yippk+X z8oxPguYxfkrANL$OauA9ag4;PRc@0R;cTk?p-!l<2AFB=J)Lad zzs#PnUApdcn`c2UHt6p0)r)}E#;|P<4e{*?ys_V2HF957WJRH!%=BG zX0+Dt?b~;)v_u`+U6yZlzp3fn+qCE_+T7JywjwJk#;-H`NIxnW-+l@HKB%@NhO^YIzuQmz>Sx5R-7&!mJLs`rgloP>yt(<>{!p4RxghF@{*)m z-bw5|A)u!p8g?{fiwWk@N-p;}D_!$hv?C*gY>YZohx;99X~{4A0{AP}w2n?=RbFxW@tD7@qQlA-0C%NZzS~cV*bCeVk_0 zPsqFf4yYJ24(>WcZcp?u5iN$hMW#~sOFo{P^tO?JFM$+~fTCIAaFc&aMLaM-6b_83 zzahOj?S{Mb`Dx^?9mO)veF)UL{5QjPvVgJUtUE)ITH&Ol`T9V?vzF_4wd4a@)}pI&Q2M;@Nn_Jv{smQ`22i>4 z+-fUaIpT|tr>79%ctiY0-s6mhJ9Q3cE?<4|jfw3%VY~2$?5&8L*WYa(s+wnC(e=8n zrh4Y;KUci3Al$hx3CWB9U7ha~(f#X2<&{r1pH$DQ8okP1((*|543?{D(@ncMzde<= zN^WCy`3(EK-lcWixfR^3!P(k+&V5WC1D=tZmOsY3cS-p^Rh(`uSEI%y2*+VSEnM8! zecs)r`}5&1X}Vu==&DlOHRs#;9*O~OIrc6UmXW-c+v&2@&FK!PW$lJXKb}EoW2p%f zDZ>+B>AUo@czD|1$!czOZ0XqfUjgpzZoePuYjr*}EvgsQoNR0kd#0p$1hPSDPbiCH zh9FsDJrlp5OWa(=GaZL+JeAlX29=JvR0(MA9avCf+ph+@877qGPxaYr)=TiCqHsI* z6pw3kFDU{*^DnkY7eY-6@Z1o6u164$ocasnA^7pDHfK0DTy>>((>uaS~cEim_Bx8L{)jT#3m*`;oR8bVL3}z zcINcZ=Bs>dxwj(kCf2OzLdYd}sCyUMw|#J7;va^Uy@Tf{+Ay&u@)G+YU%Q!ufpGrR zB({~2$#AYpz=ESSWMp@74Xjv#s@ullHrLPu^{9XmqpYCYT35`E9ykb56Qt|OJOC6l(=>C zf7K8khKzmJ7Wefg+Un=0=3d|n1>Ivre6K& zpnR<5YdiMqA^a$zYv06~5LI`s#q)WMb>S zAOMIZ9`W#|!kz;=6t;4EisWM3FOFYFCf}ZH+F2IfZORNaqi5+#FTG`=+f8pLt;5uUMhA`gpHmD?x9?TVJF1Mxk}|kv5%P-i82?fF9>wF| z9V2sdt_08&Y&bM-q&sfgfoTq+ia9n3s91i>lFsL|#H3+Yez-Ap)Njt^S~$4ej$Q?< ztDaYf$HtP}SAVNMkX0C<)+TX5CFhvn$5APi&sqXO!CsBr;hAo#GC!Gi_Kr5;`VR8b z@YNqv%zx3937#C^;PcN_w**^C@U6dLrJ|NYEA0vX;cE&@Qu`|h8L~$mGHq@6DUMc( zBg%EDztV=9yg%l9Zz&8Jo)k%vz)$&&`MY;CMW;M4UnOTkdwm4VkdiUu@crEZt0*W0 zfqnd#T{l&#=WiIcaOMMtp`~g}=vKLmWAdY^eNF--{ zO=;L_ej2!>3}>4+%NM&O9q%DpslC-07rMSbt;ERif1^~_0Z}!rHDaoEd{c152Rk&F z8Iu^E*{I9y^Mh@p#5rq7v1x0@5(t)?bcX3}gf33boWQ3-=T^04DuO6Y@;@1P zG|c7qk~dKP=3HyXZ|PaOAm!Rs+ze}94Hf)9>sxsmPi+`xDC^9bH&Sl_Wmmy5QIb^Cp%(M3JCUQwl0Qu#tNY=dn7tX)>sYv-t<&aDjvk9D z8b7&h-*@sRv+~YRQSXZDOV~4>!h)MG<^^1WH{Y!Cg3aYgpLg-`1=8j7oViH94R)^f z6}*CPC_a$%zQ<~#(+`_6m}MHFksOX8#bSy3Z%=QD@5GUHVQw=k)1!9Wo{#i+#zZx^ z6nR~@T zco0%^vh`3odZZmgC%9fZ;7O1wnn4aF}HtrCGt-lhGsoA z>#_5p93&NlcKnN1^1*Hcj`{Vegb%#Uc4Pdiv%=DrM*H|iDl5Bp^5l*)yf$#htkhjA zce1uf`P^AL=tUq-Oavw55uQAnTrvWQ-|bWj30oVRL48Rg4((q$AeZfUH^!g04p^cl zM4FFtx#sL5U1DculvYR3X|&x3Em2~bwf5b~p(L|a$x#ct`%07@XJfzK!G!}IbN53F z-7L9*ntk=p9(krd<{8xQQ^&3Jbfb6Aa?w@jttpTdb14?Fv`2d7+@C3Y74u=sBeKVp z#94-`Q~$!&cFX27#gf$l;$V3V)x6fXHq=_o{0!II(E@V_e3kYSZSGmk!5e_{`PzmX z&Dy3B*Dd~qfL4ts6?gZ1YVy_ddfP(~W=q4tOc&_NIiR{5BrMO?vJrzH|K2)%AiP2de4ntFxE`3m6o20 zv2)t2-TjjesrUg^f-f6xgv;}!>?$(vtTun{ewnv4>)(r`HX&U@fWu`xIb4Uxg>{%! z(C7rM>l?PlruR+|ho^l7Cw@B6HINbooz-`pb{T>)2au(|{`w4_Yi^qpo{)t*dkjcM zLTSN{2p>+~X)ChdkAV1fKHoMi>Q8E46Q5)Jli|$g>T#HMkb__|q2&<}J0DMChad3) zr3Q71y)Bq{OJiT$*1LieqP#V}CO&BAT)pPeuk6|CJ)1RMYjgbop^;-GN_F+0kxb}7 z_v_@=CQX0;JZQA?=N;3W1uD4jB1+zCHgijn8fLfczK-sGY26#g8!MLL`FxuG{C{`& zCnXB_-Tjc#VV=S`42eT?260pw33n*M9e>UU+>5YMuAj@pU#}o<&E;iHUB@4;H5aiM z?R!9QylFjh8!IXo;>0c84-jDA^Go@d6sRv_89TyT71&$#m<4 zdYLBu)Q$78y!^b<>kz`rI0|*|)^UyTZP}CiI%mWMfO)erQDC~+xpDpv@4UccAF3-j z{rW+ZjXP2)Xx7Zd>AA#C#x7#DdQ~4tW?d%2%*p_iA2uKLZ8qV}a+9N-_oJ$;f{(+1 z&4~aG`X?p&UP@Di5_vIF9X*pwfwF`1Gk$jZ2{0=jZH~?OH+Ut#Q<_*4gFOvgZ%c2l zOP=7A2!jr0ZOc%YX;b;`zc*-D^m26skjgm8$}V@6zAi`$H=&g3=*-^e+AN4m7i2 zLaOU$6VR9wi#o2~iyd6a(-qZezU{8%(Mc7H?&nr+N(xoVlNygWH&yBF)Z8`4A9RFi zP@65n!Pyeusza!~P=*V*Yz&RuY#d&qZdi>lb51YJ|jACGG8ecf|Q zvraGK7TnEn1#^gd9pX)&+(1(8_kY|7TUhuhqtn7)5`=N&4L=;{?M70p9g)X((G#*xb|KZ=hBZhPqK;g z8Is*~CjOig_?TS>nR4^JzMsowl|40mPVjU0i@e^;Rd~8LhK~V8a1kn!;i-K{Q9G`X zl%4A}^}L;#!5|_a!6Xuz5PHjm zl28KqPQ3U26Ze_(TYlJ2_Fikf>wVvK_H!60LDcY6*tlb8qBdv@9>;E)+LdH1*9iu= zCv(#c*tZr9o~x zunCkM%3l%GV{Wj9&}mYvjlUW0!Q07uU-ygWjl+6M(eZ5Bjg(1}3Zx99+N)?D9U9IE zM$+G;t#$h9#rHz+clKW-_n#Frz7hSK<|DE?5CD5AbAUWrY0{2avf+||uB}maP$KRX&d3V2CrrznRhfPB%m-n;M#Vh_S zJ0rp{Ch~4}*qE-qFWq8wr>uXZlgp6-%jnhYncKR?BTMaEc4fyq^sqn3)xPf{!n*B+ zmd(9;FHLC1`g7x3IBsu+_R-2m0k?dxZd-DyqbT5N7sYCj{|-ha z1i&MPZE{=IDn9Vh0U|A}hiN-Y@via-;kb#%mc^pNn1lO(vJDBDq$%XUr?=MJZ;v7s z+ybU!bbsqswXa7e>XGh7GzG>Mbyy~;cr9hhnQim+12Vd~cA9!m=RS8j)@1jXgU02+ z#s2>TO)h_Zy~sGY{yi$uWaCra%96T%Q;$W9La@;1p&FcN2vv!@LspsTe*?54CAEyG zN2JHR6WFWlhN=k3qdE#{++}PJr?&wIP#HfS|%g19uqcVhHTMIXtABqw^ z8g#;a-W*8_RAMvCd?Nk_It|(;zpakX^PbAa;Czh_3vQQ(#=QL#TDu;VAFxP$i_Zs% zES@>7X9xID`k?c$mWrjjt7A4HQehH^kH&#h5l7ZeFfoj6GoBp$60>Mffg@n?#)lTf*51l4{~752PnE+@xON=j>3 z*2A^t(c0I2=(rWVMqN;P>I z&{*eO0n^{SS#kqX^!Ra57)vjd&@bMi4sU;hR3J`ZrOhIT|0@6+;A~Ib{#?>^776)x z2A#sGF$Wbnm*D@Iv?f|_)Fpw!Od8y}s)N_z!Z>#0*N)Yb?Uot07g_x7#+5Da*O3zVY0 zJlr+2?M?&D=pAFM*-q zzV6hi71899Y8%L`&H9AuCv-P$QpfYpz0G2H5TB>Kd-#FH+laf-O}7B zMnKCD1b~twL<5u@FyZ%lo|~EByeaSEAXiR(^8VUZmCB$+xe|5=cF2l^^TTaD#KUJ# zgDNyVY_2ynE-MuO(lja<>gMTRKFQFTuh`t4APv%?5|HJgcnK-^TUYk4@-5;Dph|%& z?|7$=^lS)e2Yvy{n6Ep$i9o9YI{aM>TY6zRXCQ6vyZmJ>tAZR-(isqCRqzJ=k&Tjo z4neO+%*u90_t7U0g+m%6Ya6-YzI}72P{GiT-o<^E+FmQ;_KoB{n*BEYCaddRzPKjY zwzkQgAy*1XCFthB=c@Zc=2sR{2RJ3?9}vJQqFDpMSbx%ENiFZxa0yHQrCM1&?`^OCxGGrLxMe~RYz#MII} z^lQcdYU7pE!{piyUYx^p4tD#7O7sC>MiJD)Go^GlnSrg*FIzIZfSn}CsXX%=dbZ}e)fF>>3@~#M*Sok5PFf#iz*$#i zbf3ns-z#ZhwXRVD%)8zlC#)&;ZOR~*6XD`YDiI>xztAq5YocntlOBSI>|{@QDjJKX zXgf;5&-Bjp;J^2Lqvh`th~0U6_Wac?*b|Ct#&k}f1Nrw1#5PP#R!pFp_60}eWx!E1B-wy(U`QW?Df))j z{6_Ys-jVp+6mvXxQM#Qy?WxF&QBq1yJ$^#kvgpjMzh@qt(G;pPeVF1btE1K>F@1 z;OF>00FY!2ve@gd;3?SqmzK*t?PTOqwazJCU#ub#(yVgLcADm0dJ|oPw^K<3a%~Wn zVY2W@JC8Ycz8tYMW^JRk+u*pe2kxTp{W>Y&A`Gmo=eKfxjvB#CYPhq#g!66|Y6DYW$2HZ}im5iMnElsFtFL4p-rqCxV0T6F;&OM6mOI9& z7|K<*QynbnzOYf8hp)rh6wF!+O@&4kx}FP}ld5a^cPH;|?}mN;?sHlzjiCj>jAx|< zZKO8M7%J{1ocuPuQo7u@8z|HIk%iN8G#-^QOk2*Z$%$@p&f-4~z23!efm)hpCAb8* z7&kAKQFN5!1rk6`W!D9@m;$XO5~tYD`q(55`&GPN44dmN!WTL#LyyfTSQRW5({wkF zjiSr@AuXniDGw{T1z~?NO$E4T^&>rlfw`SY&`5kVJ0BhAH2D!MqhqKf`!&x#?TuXr zm}Ayi1UpsKBCNruWxi-L9RPNYNF2Vd;S_HxZF4?}1}$$N@=}gzJ*@2lBK1560&7T) zFh9Icp!j0W<0l}}P=X{%p9yL-cmIN582>~t(^q)^g=xUXP;HF?llnpHnRBd0Oj>zW z8D-)nT{PgGGq<%1aFYk)@fIncOYK$pD+}F1quB`J;^2Mj}?sfdonI43nw?uWcK{m$Pqchp2xWSvKHU>OmT9~7By$^9h zhco?r_a^q_-kx(FJp@?D{MaVy^HyuLtTa#lZkzr}N{y%z^po9W){XQ2=-S!ei}za^ z@x3_;FpX|#u2L3!I17UdJDtPq4({r{FssvpI<6 zamGDBl(_$&h)zK^tH{-nN)k zXT`-zR~n#}j0d}ucOSQn0?Cfm1?_$!B6Mhs`s%{v4ec7Q>2{856E>)#KgR!6WCsAK z1Co+0{h=ylrNyV3y09$+p{GZ@J~5&}d8LtDm>fY@J>@xbd6x7G^jYpNnf{A>a=%)R zDFS&DksW3UWm2VpFK9`s5y$DzXf~QFXd7j@7|iP9b#)ftpEnD68PEfD-ktJR~QvY*^&W3f9eD{~k-Y zAAvtqwAhz9=dlNP?f}-|z1SZ}(}2*DTMjhy>!z`ED~yfpB-=_&Psb%T_BbOna_*$6 z=M_P)cADx5mj*I(`PuUbI`1QAw%*1GYAQc}_3eb{jL>mS_b1?@D;TO))uS+O4%^;r z0`0BDS$w3+nEKe2?>rJV&Xr5EWfJn82}`^FJrHzc2=Ysi%?a@_1|lEK13o7W3AZP& z=Gp2t-s}wI9bp0h5W15e4}z>Owlkd5E0Z;mx|drNo0_TPItIC zcR$zK;B*gKLCxUM>*G!8T@YKb+}8#waq`a)L%aSgRR*eBt=?zcNKeJXWXn}LdUE~n zkS@?VXA43qa=*gLNW^G++j~E>{wkeIx@6lyN~!g2v>wz;a9aNSkrAL?_(?YJYMj~$ zy#t=^0ptC%)qkh&e87H&u)ZS>PY}WH#B9v>X4u+woJh-vxnquiY(l%MX2L_eq1=sE zd)OE1MO|@@-lh$gSJ?Vkd`IC=z+p8IRAoQq2Q;ma;$lUM)6&r=;X1FW3kW8n-e>0j4^o%V|_-d(6-jAU_dI6gM`~uV~FhyGKHEBxFs>|b?SLyq4aAR ztY2Viic@`x+Tx&Q#f=)%$-$KSHSY7NDo0;nyB^9|m1!ux0}m)KDYBTYF%LTZ_|jED zUr6cPpph%n_$P2e4K^k4xg^o%;Pdl8KmUowKgIA57XE1k{|`E$2!HLs<2|V7aU4l+ Ox4GbOzT&LUgZ}{KC-FQ0 literal 7700 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 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-400.png b/Source/BLE.Client/BLE.Client.UWP/Assets/SplashScreen.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..c3a1303dd807a7eccf3c4efc410f8d66984fe732 GIT binary patch literal 60950 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 z%0A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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-100.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..8d88bfca9f64bff94c4856bdc65031e192e24c2b GIT binary patch literal 5061 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-125.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-125.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e04ce0644db8572399644507ff487ba7192135 GIT binary patch literal 6348 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-150.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..2872ccd28a9aeec40db2bf2c52b0d0d6c680dc8d GIT binary patch literal 7833 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-200.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-200.png index af49fec1a5484db1d52a7f9b5ec90a27c7030186..bc310babeaf4e3a54ee060cacaf1a413767036d8 100644 GIT binary patch literal 10744 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 bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-400.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square150x150Logo.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..61cfae6b1153e4485c078625e90f16fe86a05ada GIT binary patch literal 22766 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-256.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-256.png new file mode 100644 index 0000000000000000000000000000000000000000..28f262c69d2a7c1534461ad8bd2018ed3b5f4303 GIT binary patch literal 23974 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 ROa%Y{002ovPDHLkV1i5^43q!> literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-32.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-32.png new file mode 100644 index 0000000000000000000000000000000000000000..b522b9b71bc13f551f9bb5a51ce4d3f14608c928 GIT binary patch literal 2541 zcmV{+P)+CLx%5q?S&NsdXOJ8nqOmWQ>Fu zGow=s21#0qU{sizSZW@IL28MmjXjnk#FARuSRbZZOD&^8MGdt?a<_ArbLRX1>s}P4 z^FPnc$+`DG|M!0H_kPQf@r=u!y1cq*njHbF9W1jEeN~;V4hVt;2rjx_qwh{al=i|C z*zGC$%gtvwSAM$TB~3(29uCt?6%~6W{-qg&WrYZf72YHW)dWF$0ixWJ?$S)Vc~eha zwhjUBY)@g@x&IG9*IZ4PZBt+gLq%DWt)K^%-}S`p76Q@#1yQal$XbSJp`YF@Z-(dF z1KBvfDEQ0(^rZRqA#1B8)$yyKuN;bIX@%#jI$_?U+@h<=A|LghqGH}hNRQy~nH!kD`4k*_ z2%_qIP1b~BDS2U%cgx_fp9ml(WpTZbsB9NSIUYo}uiU`sKF#oUaziZM`ZW|)jv5f@ zj}Zt#m8IxCLu3&UNfa<|XltCjcnkYaT!RA@5EW-l6DYEEU)aLfH2CVH0DiZ|9t^lQ zN|G(!3b^3+o2Xtr7L)tEik_2qVawJtfJ42HmW;($ao~1o87WnHm`0a@GPfVO!(T_k z0c$v0BAqF!vCqTsuSe>dR@nGQ^C1AbzkI5wRc>JU%J}I4w}I)S+TjRMxnLQF!EA%v<{<9F_H`{Qv=-u=FVUclsp;c5Q&gn@+(QXD1PtgKV_Wy|=SG zz~m?ZJ!MIK;%KO4RB+=SZvf4j)WBPbb~B3$J@WG*~}S?MjYcJBrFf+iIDo@bJ%WZAlXlxGwSD3$N2YK*98l4acGsclhg z=Ti)q>^O^4XRb%RV?Fb z<~}Iw95VpX7N=RhyCZ1ZNLfo=Rt=#*Pb=W2GX=OSeE7o~_0X_(W&9><8x*H4s{8htO1ju4t;qha2R!6=sf5$n_gcMdL(&rSTcxDRbQbv?qEr;DMlY?F++&<{} z;rp^+`a6qijDt}V2$`^H3T9`t#JHu$aOJ{n&wAaf+HkG zQp=!NP8iq%UL%B@PfoxdYmZi2b_o)|4owqKFfj>9nFa6=2s`PcW9V$B%jF^8ACCmPV&aGcS(c#N*GFAnN9owD&pb@L>J~CQ^l%DlwQ*{4( z5kh24BML1JPT(G8=In>hAHvvPO|f=L7dR>XJj6`SdmWHLYF}4eg5DqOqIx0mXV|jS zbETzsF?G#xUK@UK^a_H+s7$?tb~Irke9p2=1c}NS?!-vKWPQ)8+200=X@5sOB&#oR5Yar)d1IIC77>G@o2=YMIKsLf~} zHt!%V>srhoz!H6*6ad*m&N~^VA`A)U6SR)l})2CN^d#;rA0iMS$vr zOjVC9=7g8Bs~?H9&T}!mM5~c3u)r(f2};UeGqqm2d>hj#{a6)zsee8~gq(?w(a!2X z?#OmrNE;}I{j-a(b!Iop1Q}VgK8J&@?{;sDRpUCM2QeWLIoCcq3dN{r>P3x=UkJoPr>4A|rASVcw8dSWSm{NbRhNsN~_eyraBaOJp2m+@RkoIaTcaXELe~ z_^wnTw|-s%N2PF6@{u0u)QQJP>IWUiZsp(cxj`Zk`rY68Y-Po=d;Oq0ddlK_LDAD# zGh$6-1vQmS%GW6an&X}6dwCOKv9#YyG3K4$0PhL0dU!_Q#y=~Gc0{&9q?tKXzIPle z#Xf4=VPF<$UW66$e~eE?`FJjgVsM)2_w*+gRMDg~r1)jz6yxBm?)b3aG|pYQL&{dT z;b@kTE}VLJ5J`TFaW^%ow#{py3w`R5o+Rzw&>}MLE6Od?oWpK80N1AU5pBe>M&h_z^%57_j>zKl%8yyj5q{e!ydAWBac z)c_|cA8HH}-g&A%y&fR);i;I7NLup3PBd=ppaHU`J=VgkjVDnrAr4(y*5(s$lmIpr zMQ$Tgag-bZi?*M^@?Gb-sKGoBc+LiW-XwZAxb;K;Y_YlB)-|^kDQ=~r$F~XkDlmYk zex}70D%^Wvu%J5~kZcZw{2r>&Wqtfb!yb8GeC(T%QJ8iG7~j^B^5S?wltw$NREuF_ z6r1OsX_3+e#ZKG3w?an62cCldGoQ5eM_x`RTkg%6q$V$0E?M3of?)O%6+M9(J_|C1 zBZO!SSbDP3dha(gXk4-ao|WYJJY!qNcRz;psc*;rEqyQ1WmIg^?CgLR-$n=;ZAocO z$an&MVh96k80A#1ONsigOhMk~3mN-SnC5-j*=+p}B-}HS>-U0c00000NkvXXu0mjf D03OA> literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-48.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-48.png new file mode 100644 index 0000000000000000000000000000000000000000..2782b55ec57b13cfa05e1e3143c147c9a8fc201c GIT binary patch literal 3957 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 P00000NkvXXu0mjf*Y%Ve literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-100.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff5c8a1075b4569ecf2a919e99a4cd141cbe004 GIT binary patch literal 2667 zcmV-x3Y7JUP)EB?!=9|W*7bzy7KmPf*}QbomCi(j-t zu_Z4OymA*rrkg#s1uocfv} zip?Z1T=BXlINam(CLOzles<@BW^u-6*B!8<*Sxk+^^Kye)(QH~&~6Ku_CyEVT-Ob& zDg->u75$rm65_8w@hf5DbRNeQ=nouGo&rk9f4EgxF0gg*q&@3z} zn?zAg1Z{ty!obrH--XAMTVTP4kD;h?H6W4x7{M@9S*ku~E3gT;Bnp@_yd(B~dKx?S zo`4IL5EXYL3n+Hv6ap6o^Ic27D;k!Hr%DpCXM&5@OgI4n05b2$w8h7lc3{5X90k_oHz4=a{qVL%3?|)$a<@ z!X_+w4{1GqiN|{1fd%XK!=2!yq^$tW(N6cD$?^e{Y7AIUS=gNRY`ASya|q^orqV#(rb7f;Q z;?-+Jm}PZ*$!xN4&-h;h|GSiF)^(zMo!-jg}uiLLUbf(cHrD78a6s+ zz*_3!dI$&m+d(g35a6v0;13TpLyIQ0@tdrTP~48HH4)R2msmoXL5l-+P{OfTt@N2# zk=31#%PTs}JuO8t5kp@rLCN$K%qGStJzfE)QznP_S)x9S{x6Nk>S5lP01KAcQ&i(z zY^#D{3l2@e%#8LJyXbwKKIMg*CTEmok~gP6-T`+su8risZ9*szf~txfY?sjmSUvs$ zEGJL9>G|B^!%!VEQJRXK|1QIt9iQ^h=`kuFHUSoxmlan%%|vHEurVgURLQz>;N%d4 zVsXM_?cg`UnDzQzIOCnw)t4PYw4iQn8X|vU5|T3W;Umyaito~+Ut`yylW22WUG%uS z5niQu<`2?KWtW0cb9bV2@t@GM<1HxO^%>l3*93{Z_I|_;7%iDL2oT5y!~|Inwn5*& z7b8sIG}=;|FGk=V%bc|X0W*we2eiSe$-UqvI`fg|XFbym8N>#!m6T%O^IM3oCH@RE zCp}kIb`Dck?%~}0i}$`jh;~dSEkYw&UkcXclI|wkwh*GNec_p|DA{)cn|72!PtY!? z#;haE+^$pNgWFTH1)fux34&cDy zlW^CqMX3|Gq+Y#D(%Jtd@!f=l!H79KaWr=T505vAj@(pYqw_LqGpGX28W{nbyZHzy zI32e&NWcoJWGtrFW+&nI6W>6Pcv_~a#{EG*Ke5lFl$1?xisL0)jk1J|8dbWzM2f#= z*?jD?Gnhtn#;V-yX?X~fXIQeaFkn2KGr9{;oHZ1KY1zftFue~kg^a8jZ^K2$C;PU- z^0D2~k320=2(b8O-0mWPFATXCV;1g4MR|bh3JzEhK8zi(fUUID!R%iL@$Per-^XJ; zZ^zI+EirfXM{w67wy-0UpP?$aZs#!!n6#PIXQC{LXf2FZq&s@v)d*%NjOAPZLmfwC zJaex>nqne3;Hz>!a@HS!MvTF!l4y-~?ai103#$EwWqQt0Ta%z5#6`=foOdy2SO=`2 z$$i8IOth%v!LhmT@$xMZSP)o)?$vUu*!It4)S<=prV6;>?NYdEMMO}5;<;(lM2sdq z(f!#C{2JHI5+$AK{W9PvFNqnjclF@2ddh-4LDAEh_+g@DDT$a&;>*c{+Tw|6+qh_9 zvFNO#EapAa0M``pdPF00uy2)CD>i0fiuo6*oEN=chV3LnBMY%X{T}SF`6^z2DiAYZ zzG^Wv)iQl))v=ZwC1DgOWte{q&FU*SNjS&QP@tw)4=@Z#@F_>qAzC)paKglf4IDOp!Gh^Qk9KCZoP=+m2^u$h~KqUrEy(C>;Xgni@Dve-6 zce@}tTnL*!s@dfao5drp`g>bUUw(|j^e=#Mon0xnjuS-bX?LA^ajdOj{n%9*F@c~s zX}JG%*rg% z;HaSTT}GksktN9617Twa3e){Ho%5OiN3Ei01p8>Q5trz}uDAXFeS!bJ?I*xD+J1C^ Z{|DL)JgUn5nz{f0002ovPDHLkV1h>>2WJ2P literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-125.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-125.png new file mode 100644 index 0000000000000000000000000000000000000000..431cf5576bb398ec09196aa54d54d690eb089cad GIT binary patch literal 3506 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-150.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..c75cba339ee68948d40f2847770881d32b0aa217 GIT binary patch literal 4452 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 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-400.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..37832a89a94c3450004f3e1ce04827750c51b35c GIT binary patch literal 12419 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

i$ujAkjy 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 eT#}uQcjIpeCguu+5V~Ff0000O^cPkSW( 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 a`Wpo~x@R-6IZOZm00{s|MNUMnLSTY$=qrQ( literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-256.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-256.png new file mode 100644 index 0000000000000000000000000000000000000000..a3cc9adf13489088c2450168292d7b891509d9e2 GIT binary patch literal 18428 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 N002ovPDHLkV1hQuK7jxL literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-48.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Square44x44Logo.targetsize-48.png new file mode 100644 index 0000000000000000000000000000000000000000..e45973a805d5bd65c0117022f3296b70347f31ca GIT binary patch literal 3051 zcmVJNRCt{2SqoHEWfuPabIyI8dqJqw>EWoAT2_>mWhhxlE-OGZ zZE6~nO44!=t+Xa>riacN4b68xQ?qIEfma14BMcu&zNUN|W{y2ZK}z6qx!mVDv;Y5c zFGxay&bV63z1HQN```bZv%mfL_TC2tzj9G7wgTrXmjGOBxdh;1%LM~qNm_aflW{*Z z{T?uMg08ipWwrKaCzy0fhxC=qSdk{lg|0PE6kmwvo*#g2^At-5^B!TCN~aeAj}wxtKr%&+Ry`>(QvZ7gI@gVqNwR*VY!U3SLk^H7S$w10`9YQg0l^buR_eR@j3m$sqpF}c@ zQi2J+DKcmWgUjQG#UzXK&>Dx~^#ySC6;{0eQanD~bQF2pj>8sVq8zH^Anpu!H9ICu zNWjF24ISAs0IDzQ9my1NJGVSnqsHw+=T28(RLaeGlq|UU^W%WcRCfWPkQE8HUVAx; zc7IRqQ+Vdqiz_;DdJuoxRhXZ7FFNe{9)9wm%njgiKr%ntlIcBRI(;x^}>Y!c>NldjlG{N{0%0(y8~*J<%~UEgN$(t zcVI|DXN(>cgRJHMf{nZ>@`r;ksAEn2=i5E&hJW620O|7-sZ^TAX_8xwKfanQ*EhB! z61rWDJ4R-M$?OcpLgEkT@OT55nARPY)n3eA@#PsHOhy?$l{qnX(GE;~rU%~3KZ5cq z4~(=9UPGuV%9=c#w%*-h0BWh>abkx~LF*&vW=g*KnQ>T7mj7aZ39MwbvkBMJL$S_f z*2tbBiRY}?69&O8ZH_c!)|!17GvF3XN$-KQH$Nc&{C@PiubT3~c9)vCxSuQc=?yIc zKvgvZnlG%7+u=sWW4ED0+X(a+Wrt!lhPP^@Q4LvIA!afeB(cVm+85A7Y|kFqON9QM zm31H#T6a^ZJu_nqHcWa5Gwl1Z=j$@4YTbPy>7(dx^8u*Ii*Kaz-dBbH6DQcyp z=lP`4@nfRXf-nCgJbTx(*&>I8mwfbWoyD7z7hUOIKkQ`lJfNd5Gpf+N!S=vMvHw>J zg`da^(^l<)iPK&!tJJu>7~Jm$Orm&y;{NNAFfIotPdJ3vY^s7a1gf;$h0R&X0>qCF z4_1Ck$xj~S86lYr7&&Vzir;+8M*ieP#E)5rDwmHqU&CdQCb7;# zY5P~Fu=8*U3_Mvw*AvYiIr<}Ju04QvGI}AW=(q?yMV5pjkXdZ=0qE2c^RALkH42}( zbmO8!C0I*^M~yI_(JFAoc*3Sl-YC9vWjACcK{YBO^getg0T0}M4P9SKMK2Ey0%lbW zVGnXK(mh{Yx)bRS-hh`M?}pbFY=?50CCErRZfs1=CX!fh&0XlC(0MrSTJ(;&3Na&A zgAso>WKFJz(Gav~+T>4#(S{PgheRlUxN+qL0Lm9fg&Udkim-r++oF#SqvW&;W|=b? zYtwuHj9CK25Rnvu3r5EY_wFYPHb$Fa5QHvmVgcM_`QZ-*4Oh751Rfrr2M_g6XH!0O zy@f(;Va_4pg}E7VNO|=mA_$FFMqBd%=)nezQ=ysSmG?DbG1N+)6*OmFVi2NHtEukR zyl7eIdyUWA=;OFZ+_hdmS-u9pr3NuvAQ@}4Cu*t=xD-XcyrRO15i>u-%JB(Ul3$FY zKU7fC8Gf!iuM?EqR1lE;dOr+^?GXMgwrg7yPVJArFXak0vJv|<^a5AaN#WXus(ez9 z_P8spi@A@WU(b%%u>D)uY73EgI8k0JivbH?>`lsd6jYfwE*H6^aF=UZVQ5w%j+Hp@ z;-Fix@vS5bA}aodzK0TD7=YUI=jiwAu8c$+QE<4*3jpk33jnZf^!YtMZzirNaBMG@85NzC){?jP{{BQdzCeKfju zj7ITyUxgn6PvgPM&mxtGs9;nZB*r09b(KYd%*%4B)y31BKGqh1*fG zA{7|}V=(=LFTxMu6?OHNV~8LxlkC zjgd(=VGwnr9`dGWBe)S2GEl(ragBXQS+fBMFEGrc7>wiRq4szB>V3#exdneqzZ=77 z8Z*`^!$DYUr!u`ZJ9(2AYzKfLT>0Ff^7UtDjezpuXb0s@Ht&xjLb)Y48M>s*XiCQ> z0aV8v&sO(#*e4mSF}yz)?JpIm5i_?U_l?f#}pVKM_VXmzOL#7mBc?0D` z!%;tCC*DJKdya-9rOunoXhXo`*i@5~-e~yzA^<*A>&c5U>8y~mfle0T7RsY|-?Z<9 zi0fE-uujcb!>NoXFPDtD+erC?XDH7_kO1wOKPpa;!=3~6h9joX5a`i#P0DOizh4AE zQnP;8Cd!2wk|jD*cb5m>FqmXKN5$>XqDL_>{(7vTaZs*5)Pv6lGSc2E#D1EaWvfXr zO?~lGTRxiRhjy*4G#hV+q26%BOcBs)PXEQ7m%i`30dR3C5zkxPmAA^KR`>B&AG{JD zK2nA`IR^!;9z1qhG~QAzt%}$t3zs{+=+yDDU^we_xxwe<$aYbJ3|^+;=u~NFIHJ%o zM?rH}*j+j46VFArb9*mj|D7iHe>+9<$p!qq4WE&XM5_~)>_jq^{k;nYi((d(rkbUo z2tpuMJMe8e-X>BA(IzuRaoXJI@;DzmC%w)Y011EHXY2oVg67j#N#>{rjFJP@HD2_j zs@b-FhpGn|sbR}4)vkr!*YV?br<`KVU?38pq$TCEU8j#dfvs;e-SxEuKnMgK`l`vx zrbvomtjT7<$BenGjRc2iI+Z^}et#+7zEbiX^F`jz>vwNDkaREP5d5EA$Lv>ZC* zm=c$@gXD>mG`)wW2WS-2`50*9eK~K5z*}NTIz+uyk;dfD-1gLx^L;j#3-&)UPwvp~ t>F`1A=l>>`{!4kW;^mTMCud@IE002ovPDHLkV1i`S&e;F} literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.png b/Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.backup.png similarity index 100% rename from Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.png rename to Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.backup.png diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-100.png b/Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..6123ace2a24124f30ed5247c6742a30dd1a03a11 GIT binary patch literal 4220 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 S*@CzL0000j{00009a7bBm000&x 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-200.png b/Source/BLE.Client/BLE.Client.UWP/Assets/StoreLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..e68f0184a94424052d3bc2bc64ba93b8f638136d GIT binary patch literal 8811 zcmV-xB9z^UP)hqaBW~#BJN>nagLtPqPyp?=3C6oFKE%uN;~-0qfHS)Z z$b5A{XA*%IlxqZu1|I*9zj3tb-|RO7lEQKLfBX$R{yX=FUiY{_@HlhKy_THC#shfG zkAhCvnYnJz**o%Gi@=>Hq}^n}RH1fzPLg6|xY!AYuOX*1D}ye%P!QZ8yKS02Qufvs~xWK_$kRSsm=v#rHYb7|XQ_L~TcgY;Lf^*w9SQAIy zD1}Z0M41y}=(VJ!z>A|LS$>MwnanZ~;6@^H2dPYfYEO2f$)O)qZMt*{W%e(!DT~9$SSMb2L>ZYQH`k5Dsp<`ILT=p z9oBorQm4!HZ)ehr=gXoSrA~-GdSMMwFib*^XDBZkkO*rjsiY7BZI|qDAu&Q2=uEGQ zAP>^@`tsu(+4Tt|3@g>nmntD>FyBCLXA&=(qGVUjKc9%gkkH;ZGDu>gID>hr*=2o! zi(WcDCt>J@(z<1-5Mu1{`GZKpd|q#EC%f!OL?$qo^uH3E;^{dufftQ+LC~)^#eBIE zvTnU)+cx%EsP7hXLd?-iUj|W}%?o;q?C{!%|5h>zf;j*f;|Tijfl?&*sJZ8Y(ddn( zgz_GtBjmC97E_evb6#&5s2FTgPyZW46ad9XsK!tO)C8Snlcm?vi8=8@XN2nGLqdo? zdVXzD2>+JXnVTw7L800IAQ?VzibuwYz!}1)TVj?q&hezhLgEx{5v(7Sn2@lZ3))J8 zX)UU#N~C84!6RW<=JEtZmy!|*=6yv)?|vXF*9#bghyq{Sr?NnkzB6Ztc*g9kSyk$_ zxW7Gq*p;9 zy0ChpN8T=WU)0T-Jp6>_n?jI;7<+!v360un{Jwhdpy#1th;pn>Xx^wIjE-)|RF7U1 zG~ZVrL|=nN`^NXd$Q}(~-kO7;i!`YaOtdSgC6JUFl3q^I$9&$w8TZl!t@qVTh@t1= z*1V{X<2YV58Ir81nh#=Is+w*86ij@sDSW&099&DcfkCfk0_BpT5341*5QL39FPN0PPhc|W3R|`l`aDq^IybN4YyarGBk*O)39y(|&U+F^ zQ9GG50mwkBQCbeC2kx&F0gK;w40x2{3Md&92Q-7xbGIWQCY5*On9GkgrJe-V_0VNr zM@W6msk*;vFRa*efhm*cH}X2;y;@=n(!mys9%c-A*w=RE&kUHnd>`cGU_WU)ur z$oD>#Z^p}Z{c-`?p}LCgT#q#k?^Yj{;KVs_@|ya|<0Zuy+0HDvm!O3msJ6SR3CZNd zMZ6*GK?;hr#260rR$d+00vc2;=WCnv<$lOP10NP)40@c&H6>4t47~}}Nf371FYG9V zQ&t{;K9AIds4zW~u$e zCFoP%Av>yos#T)kooAZ(+IAfI6TaDY22A0GpvfROk&K%6hO^H&b@3L2p%jLK6r(|e z3;21n*B)X-5IQxh0{tJa4eP!?gOf;0zh$<}0D|!&L$5D(JK{&}4fKwHgqWfiHsl1u zTuPg3)f*n03nrlsE{B6ppg826rF)qhDsbxbdQos9+12g|gU`l13fy)O&nQlG#`Kv8RcQg z5?(ZzwdSVC&29PMeK53ZeP7$M%_rfPLw|xfGI&+x19m0T>Vi6zBO&F3?$GJ&L`b`m z6%tZ(IN;eC4tN*s+`5UKSX*5r=9NB;VJ5bT$g*5sb$)-PNJyR86S};U1ZjU} zLRfgoNTK(VO8sufS=fw5y>s)btbN?mP2lV8XW;U+Y^K^Y^pvfRaysLyVKGbBWXBEN zUDTCDeyXAC!pb0sQ<)Cba%&tUTc!h^>Qon=Y*N|RPCEJGrF5`FsdXQ

7o!8Y>#-}a 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 RfNcN(002ovPDHLkV1f*?N-O{X literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-100.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..15be34df018b7629233c3105f6bbce1f7dd555d4 GIT binary patch literal 5313 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 CY<5Hd literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-125.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-125.png new file mode 100644 index 0000000000000000000000000000000000000000..5da7972c23130da1f955774ad1071f6c973011d6 GIT binary patch literal 6840 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 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-150.png b/Source/BLE.Client/BLE.Client.UWP/Assets/Wide310x150Logo.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..36a7fa79fca87a802c6d73254888fa72d712e6e2 GIT binary patch literal 8445 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 Kv#KXA-~T@^Yf&Bm literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

MY- 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 Ox4GbOzT&LUgZ}{KC-FQ0 literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj index e02a400e..ffce6358 100644 --- a/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj +++ b/Source/BLE.Client/BLE.Client.UWP/BLE.Client.UWP.csproj @@ -95,7 +95,6 @@ App.xaml - MainPage.xaml @@ -109,13 +108,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -130,36 +168,36 @@ - 6.5.1 + 7.0.4 - 5.4.0 + 6.2.8 - 5.1.0 + 6.3.1 - 5.1.0 + 6.3.1 - 2.0.1 + 3.0.0.12 - 3.0.1 + 3.1.1 - 2.3.4.247 + 4.1.0.673156 + + {56531910-6309-4f1d-a12b-f69e2914fae6} + Plugin.BLE.Abstractions + {dfe97be0-070b-43ad-bf37-50fd42b542d1} BLE.Client - - {f479f7db-cfa6-49e5-aa41-4fe6a4da39b0} - Plugin.BLE.Abstractions - {ccd85512-a2d7-4076-b31d-7a24829058af} Plugin.BLE.UWP diff --git a/Source/BLE.Client/BLE.Client.UWP/DebugTrace.cs b/Source/BLE.Client/BLE.Client.UWP/DebugTrace.cs deleted file mode 100644 index a2ecac72..00000000 --- a/Source/BLE.Client/BLE.Client.UWP/DebugTrace.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Diagnostics; -using MvvmCross.Platform.Platform; - -namespace BLE.Client.UWP -{ - public class DebugTrace : IMvxTrace - { - public void Trace(MvxTraceLevel level, string tag, Func message) - { - Debug.WriteLine(tag + ":" + level + ":" + message()); - } - - public void Trace(MvxTraceLevel level, string tag, string message) - { - Debug.WriteLine(tag + ":" + level + ":" + message); - } - - public void Trace(MvxTraceLevel level, string tag, string message, params object[] args) - { - try - { - Debug.WriteLine(tag + ":" + level + ":" + message, args); - } - catch (FormatException) - { - Trace(MvxTraceLevel.Error, tag, "Exception during trace of {0} {1}", level, message); - } - } - } -} diff --git a/Source/BLE.Client/BLE.Client.UWP/MainPage.xaml b/Source/BLE.Client/BLE.Client.UWP/MainPage.xaml index 8635813b..ba03d8dc 100644 --- a/Source/BLE.Client/BLE.Client.UWP/MainPage.xaml +++ b/Source/BLE.Client/BLE.Client.UWP/MainPage.xaml @@ -1,4 +1,4 @@ - - + diff --git a/Source/BLE.Client/BLE.Client.UWP/MainPage.xaml.cs b/Source/BLE.Client/BLE.Client.UWP/MainPage.xaml.cs index 60b9f354..aa32973a 100644 --- a/Source/BLE.Client/BLE.Client.UWP/MainPage.xaml.cs +++ b/Source/BLE.Client/BLE.Client.UWP/MainPage.xaml.cs @@ -1,7 +1,4 @@ -using MvvmCross.Core.ViewModels; -using MvvmCross.Core.Views; -using MvvmCross.Forms.Uwp.Presenters; -using MvvmCross.Platform; + // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 @@ -10,20 +7,11 @@ namespace BLE.Client.UWP ///

/// An empty page that can be used on its own or navigated to within a Frame. /// - public sealed partial class MainPage : Xamarin.Forms.Platform.UWP.WindowsPage + public sealed partial class MainPage { public MainPage() { this.InitializeComponent(); - - //SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape; - - var startup = Mvx.Resolve(); - startup.Start(); - - var presenter = Mvx.Resolve() as MvxFormsUwpPagePresenter; - - LoadApplication(presenter.FormsApplication); } } } diff --git a/Source/BLE.Client/BLE.Client.UWP/Package.appxmanifest b/Source/BLE.Client/BLE.Client.UWP/Package.appxmanifest index 603fedd9..492f9e12 100644 --- a/Source/BLE.Client/BLE.Client.UWP/Package.appxmanifest +++ b/Source/BLE.Client/BLE.Client.UWP/Package.appxmanifest @@ -37,7 +37,7 @@ Square44x44Logo="Assets\Square44x44Logo.png" Description="BLE.Client.UWP" BackgroundColor="transparent"> - + diff --git a/Source/BLE.Client/BLE.Client.UWP/Setup.cs b/Source/BLE.Client/BLE.Client.UWP/Setup.cs index 7c048d7b..180bbd73 100644 --- a/Source/BLE.Client/BLE.Client.UWP/Setup.cs +++ b/Source/BLE.Client/BLE.Client.UWP/Setup.cs @@ -1,54 +1,23 @@ -using System; using Acr.UserDialogs; -using MvvmCross.Core.ViewModels; -using MvvmCross.Forms.Uwp; -using MvvmCross.Forms.Uwp.Presenters; - -using MvvmCross.Platform; -using MvvmCross.Platform.Platform; -using MvvmCross.Uwp.Views; using Plugin.Permissions; using Plugin.Settings; -using Windows.ApplicationModel.Activation; -using Windows.UI.Xaml.Controls; -using Xamarin.Forms; -using MvvmCross.Core.Views; -using MvvmCross.Forms.Core; +using MvvmCross; +using MvvmCross.Forms.Platforms.Uap.Core; using Plugin.BLE; namespace BLE.Client.UWP { - public class Setup : MvxFormsWindowsSetup + public class Setup : MvxFormsWindowsSetup { - public Setup(Windows.UI.Xaml.Controls.Frame rootFrame, LaunchActivatedEventArgs e) : base(rootFrame, e) - { - } - - protected override IMvxApplication CreateApp() - { - return new BleMvxApplication(); - } - - protected override IMvxTrace CreateDebugTrace() - { - return new DebugTrace(); - } - - protected override MvxFormsApplication CreateFormsApplication() - { - return new BleMvxFormsApp(); - } - protected override void InitializeIoC() { base.InitializeIoC(); - Mvx.RegisterSingleton(() => UserDialogs.Instance); - Mvx.RegisterSingleton(() => CrossSettings.Current); - Mvx.RegisterSingleton(() => CrossPermissions.Current); - Mvx.RegisterSingleton(() => CrossBluetoothLE.Current); - Mvx.RegisterSingleton(() => CrossBluetoothLE.Current.Adapter); + Mvx.IoCProvider.RegisterSingleton(() => UserDialogs.Instance); + Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); + Mvx.IoCProvider.RegisterSingleton(() => CrossPermissions.Current); + Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current); + Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current.Adapter); } - } } diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index 61d57b03..f35fcf81 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -200,7 +200,7 @@ 3.1.1 - 4.1.0.581479 + 4.1.0.673156 diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index a82ce241..5a4c3355 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -14,7 +14,7 @@ - + diff --git a/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicDetailViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicDetailViewModel.cs index c18924f9..083d59c9 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicDetailViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/CharacteristicDetailViewModel.cs @@ -11,6 +11,7 @@ using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Abstractions.EventArgs; using Plugin.BLE.Abstractions.Extensions; +using Xamarin.Forms; namespace BLE.Client.ViewModels { @@ -198,8 +199,11 @@ private async void StopUpdates() private void CharacteristicOnValueUpdated(object sender, CharacteristicUpdatedEventArgs characteristicUpdatedEventArgs) { - Messages.Insert(0, $"{DateTime.Now.TimeOfDay} - Updated: {CharacteristicValue}"); - RaisePropertyChanged(() => CharacteristicValue); + Device.InvokeOnMainThreadAsync(() => + { + Messages.Insert(0, $"{DateTime.Now.TimeOfDay} - Updated: {CharacteristicValue}"); + RaisePropertyChanged(() => CharacteristicValue); + }); } } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs b/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs index 9018e78d..5ab7c5f9 100644 --- a/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs +++ b/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs @@ -19,7 +19,7 @@ public abstract class CharacteristicBase : ICharacteristic public abstract Guid Id { get; } public abstract string Uuid { get; } public abstract byte[] Value { get; } - public string Name => KnownCharacteristics.Lookup(Id).Name; + public virtual string Name => KnownCharacteristics.Lookup(Id).Name; public abstract CharacteristicPropertyType Properties { get; } public IService Service { get; } diff --git a/Source/Plugin.BLE.UWP/Adapter.cs b/Source/Plugin.BLE.UWP/Adapter.cs index 91717dea..61aec182 100644 --- a/Source/Plugin.BLE.UWP/Adapter.cs +++ b/Source/Plugin.BLE.UWP/Adapter.cs @@ -17,64 +17,55 @@ namespace Plugin.BLE.UWP public class Adapter : AdapterBase { private BluetoothLEHelper _bluetoothHelper; - private BluetoothLEAdvertisementWatcher _BleWatcher; + private BluetoothLEAdvertisementWatcher _bleWatcher; /// /// Needed to check for scanned devices so that duplicated don't get /// added due to race conditions /// private IList _prevScannedDevices; - /// - /// Used to store all connected devices - /// - public IDictionary ConnectedDeviceRegistry { get; } - public override IList ConnectedDevices => ConnectedDeviceRegistry.Values.ToList(); - - public Adapter (BluetoothLEHelper bluetoothHelper) + public Adapter(BluetoothLEHelper bluetoothHelper) { _bluetoothHelper = bluetoothHelper; - ConnectedDeviceRegistry = new Dictionary(); } protected override Task StartScanningForDevicesNativeAsync(Guid[] serviceUuids, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { var hasFilter = serviceUuids?.Any() ?? false; - DiscoveredDevices.Clear(); - _BleWatcher = new BluetoothLEAdvertisementWatcher(); - _BleWatcher.ScanningMode = BluetoothLEScanningMode.Active; + + _bleWatcher = new BluetoothLEAdvertisementWatcher { ScanningMode = BluetoothLEScanningMode.Active }; //ToDo investigate passive scanning, readonly? _prevScannedDevices = new List(); + Trace.Message("Starting a scan for devices."); if (hasFilter) { //adds filter to native scanner if serviceUuids are specified foreach (var uuid in serviceUuids) { - _BleWatcher.AdvertisementFilter.Advertisement.ServiceUuids.Add(uuid); + _bleWatcher.AdvertisementFilter.Advertisement.ServiceUuids.Add(uuid); } + Trace.Message($"ScanFilters: {string.Join(", ", serviceUuids)}"); } - //don't allow duplicates except for testing, results in multiple versions - //of the same device being found - if (allowDuplicatesKey) - { - _BleWatcher.Received += DeviceFoundAsyncDuplicate; - } - else - { - _BleWatcher.Received += DeviceFoundAsync; - } - _BleWatcher.Start(); + + + _bleWatcher.Received += DeviceFoundAsync; + + _bleWatcher.Start(); return Task.FromResult(true); } protected override void StopScanNative() { - Trace.Message("Stopping the scan for devices"); - _BleWatcher.Stop(); - _BleWatcher = null; + if (_bleWatcher != null) + { + Trace.Message("Stopping the scan for devices"); + _bleWatcher.Stop(); + _bleWatcher = null; + } } - protected async override Task ConnectToDeviceNativeAsync(IDevice device, ConnectParameters connectParameters, CancellationToken cancellationToken) + protected override async Task ConnectToDeviceNativeAsync(IDevice device, ConnectParameters connectParameters, CancellationToken cancellationToken) { Trace.Message($"Connecting to device with ID: {device.Id.ToString()}"); @@ -88,7 +79,7 @@ protected async override Task ConnectToDeviceNativeAsync(IDevice device, Connect await nativeDevice.ConnectAsync(); if (!ConnectedDeviceRegistry.ContainsKey(uwpDevice.Id.ToString())) - ConnectedDeviceRegistry.Add(uwpDevice.Id.ToString(), device); + ConnectedDeviceRegistry[uwpDevice.Id.ToString()] = device; } private void Device_ConnectionStatusChanged(Device device, BluetoothConnectionStatus status) @@ -103,28 +94,29 @@ protected override void DisconnectDeviceNative(IDevice device) { // Windows doesn't support disconnecting, so currently just dispose of the device Trace.Message($"Disconnected from device with ID: {device.Id.ToString()}"); - ConnectedDeviceRegistry.Remove(device.Id.ToString()); + ConnectedDeviceRegistry.TryRemove(device.Id.ToString(), out _); } - public async override Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters, CancellationToken cancellationToken) + public override async Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters, CancellationToken cancellationToken) { //convert GUID to string and take last 12 characters as MAC address var guidString = deviceGuid.ToString("N").Substring(20); - ulong bluetoothAddr = Convert.ToUInt64(guidString, 16); - var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bluetoothAddr); + ulong bluetoothAddress = Convert.ToUInt64(guidString, 16); + var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bluetoothAddress); var currDevice = new Device(this, nativeDevice, 0, guidString); - await ConnectToDeviceAsync(currDevice); + + await ConnectToDeviceAsync(currDevice, cancellationToken: cancellationToken); return currDevice; } - public override List GetSystemConnectedOrPairedDevices(Guid[] services = null) + public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null) { //currently no way to retrieve paired and connected devices on windows without using an //async method. Trace.Message("Returning devices connected by this app only"); - return (List) ConnectedDevices; + return (List)ConnectedDevices; } - + /// /// Parses a given advertisement for various stored properties /// Currently only parses the manufacturer specific data @@ -159,32 +151,15 @@ private async void DeviceFoundAsync(BluetoothLEAdvertisementWatcher watcher, Blu if (!_prevScannedDevices.Contains(btAdv.BluetoothAddress)) { _prevScannedDevices.Add(btAdv.BluetoothAddress); - BluetoothLEDevice currDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); - if (currDevice != null) //make sure advertisement bluetooth address actually returns a device + var bluetoothLeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); + if (bluetoothLeDevice != null) //make sure advertisement bluetooth address actually returns a device { - var device = new Device(this, currDevice, btAdv.RawSignalStrengthInDBm, btAdv.BluetoothAddress.ToString(), ParseAdvertisementData(btAdv.Advertisement)); + var device = new Device(this, bluetoothLeDevice, btAdv.RawSignalStrengthInDBm, btAdv.BluetoothAddress.ToString(), ParseAdvertisementData(btAdv.Advertisement)); Trace.Message("DiscoveredPeripheral: {0} Id: {1}", device.Name, device.Id); this.HandleDiscoveredDevice(device); } return; } } - - /// - /// Handler for devices found when duplicates are allowed - /// - /// The bluetooth advertisement watcher currently being used - /// The advertisement recieved by the watcher - private async void DeviceFoundAsyncDuplicate(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs btAdv) - { - BluetoothLEDevice currDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); - if (currDevice != null) - { - var device = new Device(this, currDevice, btAdv.RawSignalStrengthInDBm, btAdv.BluetoothAddress.ToString(), ParseAdvertisementData(btAdv.Advertisement)); - Trace.Message("DiscoveredPeripheral: {0} Id: {1}", device.Name, device.Id); - this.HandleDiscoveredDevice(device); - } - return; - } } } \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/Characteristic.cs b/Source/Plugin.BLE.UWP/Characteristic.cs index 274a0133..298b5d31 100644 --- a/Source/Plugin.BLE.UWP/Characteristic.cs +++ b/Source/Plugin.BLE.UWP/Characteristic.cs @@ -8,12 +8,14 @@ using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Abstractions.EventArgs; +using Plugin.BLE.Abstractions.Exceptions; namespace Plugin.BLE.UWP { public class Characteristic : CharacteristicBase { private readonly GattCharacteristic _nativeCharacteristic; + /// /// Value of the characteristic to be stored locally after /// update notification or read @@ -24,127 +26,130 @@ public class Characteristic : CharacteristicBase public override CharacteristicPropertyType Properties => (CharacteristicPropertyType)(int)_nativeCharacteristic.CharacteristicProperties; public override event EventHandler ValueUpdated; - public override byte[] Value - { - get - { - //return empty array if value is equal to null - if (_value == null) - { - return new byte[0]; - } - return _value; - } - } + public override byte[] Value => _value ?? new byte[0]; // return empty array if value is equal to null + public override string Name => string.IsNullOrEmpty(_nativeCharacteristic.UserDescription) + ? base.Name + : _nativeCharacteristic.UserDescription; public Characteristic(GattCharacteristic nativeCharacteristic, IService service) : base(service) { _nativeCharacteristic = nativeCharacteristic; - } + } - protected async override Task> GetDescriptorsNativeAsync() + protected override async Task> GetDescriptorsNativeAsync() { var nativeDescriptors = (await _nativeCharacteristic.GetDescriptorsAsync()).Descriptors; - var descriptorList = new List(); + //convert to generic descriptors - foreach (var nativeDescriptor in nativeDescriptors) - { - var descriptor = new Descriptor(nativeDescriptor, this); - descriptorList.Add(descriptor); - } - return descriptorList; + return nativeDescriptors.Select(nativeDescriptor => new Descriptor(nativeDescriptor, this)).Cast().ToList(); } - protected async override Task ReadNativeAsync() + protected override async Task ReadNativeAsync() { - var readResult = (await _nativeCharacteristic.ReadValueAsync()).Value.ToArray(); - _value = readResult; - return readResult; + var readResult = await _nativeCharacteristic.ReadValueAsync(); + switch (readResult.Status) + { + case GattCommunicationStatus.Success: + return _value = readResult.Value.ToArray(); + case GattCommunicationStatus.Unreachable: + case GattCommunicationStatus.ProtocolError: + case GattCommunicationStatus.AccessDenied: + throw new CharacteristicReadException($"Error while reading characteristic. Status: {readResult.Status}"); + default: + throw new ArgumentOutOfRangeException(); + } } - protected async override Task StartUpdatesNativeAsync() + protected override async Task StartUpdatesNativeAsync() { + _nativeCharacteristic.ValueChanged -= OnCharacteristicValueChanged; _nativeCharacteristic.ValueChanged += OnCharacteristicValueChanged; + var result = await _nativeCharacteristic.WriteClientCharacteristicConfigurationDescriptorWithResultAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify); - //output trace message with status of update - if (result.Status == GattCommunicationStatus.Success) - { - Trace.Message("Start Updates Successful"); - } - else if (result.Status == GattCommunicationStatus.AccessDenied) - { - Trace.Message("Incorrect permissions to start updates"); - } - else if (result.Status == GattCommunicationStatus.ProtocolError && result.ProtocolError != null) - { - Trace.Message("Start updates returned with error: {0}", parseError(result.ProtocolError)); - } - else if (result.Status == GattCommunicationStatus.ProtocolError) - { - Trace.Message("Start updates returned with unknown error"); - } - else if (result.Status == GattCommunicationStatus.Unreachable) - { - Trace.Message("Characteristic properties are unreachable"); + + //ToDo throw + switch (result.Status) + { + //output trace message with status of update + case GattCommunicationStatus.Success: + Trace.Message("Start Updates Successful"); + break; + case GattCommunicationStatus.AccessDenied: + Trace.Message("Incorrect permissions to start updates"); + break; + case GattCommunicationStatus.ProtocolError when result.ProtocolError != null: + Trace.Message("Start updates returned with error: {0}", parseError(result.ProtocolError)); + break; + case GattCommunicationStatus.ProtocolError: + Trace.Message("Start updates returned with unknown error"); + break; + case GattCommunicationStatus.Unreachable: + Trace.Message("Characteristic properties are unreachable"); + break; } } - protected async override Task StopUpdatesNativeAsync() + protected override async Task StopUpdatesNativeAsync() { _nativeCharacteristic.ValueChanged -= OnCharacteristicValueChanged; - var result = await _nativeCharacteristic.WriteClientCharacteristicConfigurationDescriptorWithResultAsync(GattClientCharacteristicConfigurationDescriptorValue.None); - if (result.Status == GattCommunicationStatus.Success) - { - Trace.Message("Stop Updates Successful"); - } - else if (result.Status == GattCommunicationStatus.AccessDenied) - { - Trace.Message("Incorrect permissions to stop updates"); - } - else if (result.Status == GattCommunicationStatus.ProtocolError && result.ProtocolError != null) - { - Trace.Message("Stop updates returned with error: {0}", parseError(result.ProtocolError)); - } - else if (result.Status == GattCommunicationStatus.ProtocolError) - { - Trace.Message("Stop updates returned with unknown error"); - } - else if (result.Status == GattCommunicationStatus.Unreachable) + + var result = await _nativeCharacteristic.WriteClientCharacteristicConfigurationDescriptorWithResultAsync(GattClientCharacteristicConfigurationDescriptorValue.None); + + //ToDo throw + switch (result.Status) { - Trace.Message("Characteristic properties are unreachable"); + case GattCommunicationStatus.Success: + Trace.Message("Stop Updates Successful"); + break; + case GattCommunicationStatus.AccessDenied: + Trace.Message("Incorrect permissions to stop updates"); + break; + case GattCommunicationStatus.ProtocolError when result.ProtocolError != null: + Trace.Message("Stop updates returned with error: {0}", parseError(result.ProtocolError)); + break; + case GattCommunicationStatus.ProtocolError: + Trace.Message("Stop updates returned with unknown error"); + break; + case GattCommunicationStatus.Unreachable: + Trace.Message("Characteristic properties are unreachable"); + break; } } - protected async override Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType) + protected override async Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType) { //print errors if error and write with response - if(writeType == CharacteristicWriteType.WithResponse) + if (writeType == CharacteristicWriteType.WithResponse) { var result = await _nativeCharacteristic.WriteValueWithResultAsync(CryptographicBuffer.CreateFromByteArray(data)); - if (result.Status == GattCommunicationStatus.Success) { - Trace.Message("Write successful"); - return true; - } - else if (result.Status == GattCommunicationStatus.AccessDenied) - { - Trace.Message("Incorrect permissions to stop updates"); - } - else if (result.Status == GattCommunicationStatus.ProtocolError && result.ProtocolError != null) - { - Trace.Message("Write Characteristic returned with error: {0}", parseError(result.ProtocolError)); - } - else if (result.Status == GattCommunicationStatus.ProtocolError) - { - Trace.Message("Write Characteristic returned with unknown error"); - } - else if (result.Status == GattCommunicationStatus.Unreachable) + + //Todo throw + switch (result.Status) { - Trace.Message("Characteristic write is unreachable"); + case GattCommunicationStatus.Success: + Trace.Message("Write successful"); + return true; + case GattCommunicationStatus.AccessDenied: + Trace.Message("Incorrect permissions to stop updates"); + break; + case GattCommunicationStatus.ProtocolError when result.ProtocolError != null: + Trace.Message("Write Characteristic returned with error: {0}", parseError(result.ProtocolError)); + break; + case GattCommunicationStatus.ProtocolError: + Trace.Message("Write Characteristic returned with unknown error"); + break; + case GattCommunicationStatus.Unreachable: + Trace.Message("Characteristic write is unreachable"); + break; } + return false; } + var status = await _nativeCharacteristic.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data), GattWriteOption.WriteWithoutResponse); + + // ToDo switch and throw if (status == GattCommunicationStatus.Success) { return true; diff --git a/Source/Plugin.BLE.UWP/CrossBluetoothLE.cs b/Source/Plugin.BLE.UWP/CrossBluetoothLE.cs deleted file mode 100644 index a56fda6c..00000000 --- a/Source/Plugin.BLE.UWP/CrossBluetoothLE.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using Plugin.BLE.Abstractions.Contracts; - -namespace Plugin.BLE -{ - /// - /// Cross platform bluetooth LE implemenation. - /// - public static class CrossBluetoothLE - { - static readonly Lazy Implementation = new Lazy(CreateImplementation, System.Threading.LazyThreadSafetyMode.PublicationOnly); - - /// - /// Current bluetooth LE implementation. - /// - public static IBluetoothLE Current - { - get - { - var ret = Implementation.Value; - if (ret == null) - { - throw NotImplementedInReferenceAssembly(); - } - return ret; - } - } - - static IBluetoothLE CreateImplementation() - { -#if PORTABLE - return null; -#else - var implementation = new BleImplementation(); - implementation.Initialize(); - return implementation; -#endif - } - - internal static Exception NotImplementedInReferenceAssembly() - { - return new NotImplementedException("This functionality is not implemented in the portable version of this assembly. You should reference the NuGet package from your main application project in order to reference the platform-specific implementation."); - } - } -} \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/DefaultTrace.cs b/Source/Plugin.BLE.UWP/DefaultTrace.cs index 2c3b2b86..bfead0ab 100644 --- a/Source/Plugin.BLE.UWP/DefaultTrace.cs +++ b/Source/Plugin.BLE.UWP/DefaultTrace.cs @@ -1,14 +1,13 @@ -using System.Diagnostics; -using Plugin.BLE.Abstractions; +using System; namespace Plugin.BLE { - static class DefaultTrace + internal static class DefaultTrace { static DefaultTrace() { //uses WriteLine for trace - Trace.TraceImplementation = (s, o) => { Debug.WriteLine(s, o); } ; + Abstractions.Trace.TraceImplementation = Console.WriteLine; } } } \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/Descriptor.cs b/Source/Plugin.BLE.UWP/Descriptor.cs index cd4e5e79..a0d770a6 100644 --- a/Source/Plugin.BLE.UWP/Descriptor.cs +++ b/Source/Plugin.BLE.UWP/Descriptor.cs @@ -18,50 +18,52 @@ public class Descriptor : DescriptorBase /// private byte[] _value; public override Guid Id => _nativeDescriptor.Uuid; - public override byte[] Value - { - get - { - if (_value == null) - { - return new byte[0]; - } - return _value; - } - } + public override byte[] Value => _value ?? new byte[0]; public Descriptor(GattDescriptor nativeDescriptor, ICharacteristic characteristic) : base(characteristic) { _nativeDescriptor = nativeDescriptor; } - protected async override Task ReadNativeAsync() + protected override async Task ReadNativeAsync() { var readResult = await _nativeDescriptor.ReadValueAsync(); - if (readResult.Status == GattCommunicationStatus.Success) - { - Trace.Message("Descriptor Read Successfully"); - } - else + + //ToDo throw + switch (readResult.Status) { - Trace.Message("Descriptor Read Failed"); + case GattCommunicationStatus.Success: + Trace.Message("Descriptor Read Successfully"); + break; + case GattCommunicationStatus.Unreachable: + case GattCommunicationStatus.ProtocolError: + case GattCommunicationStatus.AccessDenied: + default: + Trace.Message("Descriptor Read Failed"); + break; } - _value = readResult.Value.ToArray(); - return _value; + + return _value = readResult.Value.ToArray(); } - protected async override Task WriteNativeAsync(byte[] data) + protected override async Task WriteNativeAsync(byte[] data) { //method contains no option for writing with response, so always write //without response var writeResult = await _nativeDescriptor.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data)); - if (writeResult == GattCommunicationStatus.Success) - { - Trace.Message("Descriptor Write Successfully"); - } - else + + // ToDO throw error + switch (writeResult) { - Trace.Message("Descriptor Write Failed"); + case GattCommunicationStatus.Success: + Trace.Message("Descriptor Write Successfully"); + break; + case GattCommunicationStatus.Unreachable: + case GattCommunicationStatus.ProtocolError: + case GattCommunicationStatus.AccessDenied: + default: + Trace.Message("Descriptor Write Failed"); + break; } } } diff --git a/Source/Plugin.BLE.UWP/Device.cs b/Source/Plugin.BLE.UWP/Device.cs index 751fc746..71786a65 100644 --- a/Source/Plugin.BLE.UWP/Device.cs +++ b/Source/Plugin.BLE.UWP/Device.cs @@ -12,9 +12,9 @@ namespace Plugin.BLE.UWP { - class Device : DeviceBase + public class Device : DeviceBase { - public ObservableBluetoothLEDevice _nativeDevice { get; private set; } + private readonly ObservableBluetoothLEDevice _nativeDevice; public override object NativeDevice => _nativeDevice; public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, string address, List advertisementRecords = null) : base(adapter) @@ -60,38 +60,34 @@ public override Task UpdateRssiAsync() { //No current method to update the Rssi of a device //In future implementations, maybe listen for device's advertisements - throw new NotImplementedException(); + this.Rssi = _nativeDevice.RSSI; + return Task.FromResult(true); } - protected async override Task> GetServicesNativeAsync() + protected override async Task> GetServicesNativeAsync() { - var GattServiceList = (await _nativeDevice.BluetoothLEDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached)).Services; - var ServiceList = new List(); - foreach (var nativeService in GattServiceList) - { - var service = new Service(nativeService, this); - ServiceList.Add(service); - } - return ServiceList; + var gattServiceList = await _nativeDevice.BluetoothLEDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); // ToDo investigate cache modes + + //ToDo error handling + return gattServiceList.Services.Select(nativeService => new Service(nativeService, this)).Cast().ToList(); } protected override DeviceState GetState() { //windows only supports retrieval of two states currently - if (_nativeDevice.IsConnected) return DeviceState.Connected; - else return DeviceState.Disconnected; + return _nativeDevice.IsConnected ? DeviceState.Connected : DeviceState.Disconnected; } protected override Task RequestMtuNativeAsync(int requestValue) { Trace.Message("Request MTU not supported in UWP"); - return Task.FromResult(-1); + return Task.FromResult(-1); } protected override bool UpdateConnectionIntervalNative(ConnectionInterval interval) { Trace.Message("Update Connection Interval not supported in UWP"); - throw new NotImplementedException(); + return false; } } } diff --git a/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj b/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj index 292d5052..281aa17c 100644 --- a/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj +++ b/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj @@ -106,10 +106,12 @@ PackageReference + + CrossBluetoothLE.cs + - @@ -121,10 +123,10 @@ - 5.4.0 + 6.2.8 - 2.0.0 + 5.1.1 diff --git a/Source/Plugin.BLE.UWP/Service.cs b/Source/Plugin.BLE.UWP/Service.cs index befafda7..65e2d75e 100644 --- a/Source/Plugin.BLE.UWP/Service.cs +++ b/Source/Plugin.BLE.UWP/Service.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Microsoft.Toolkit.Uwp.Connectivity; @@ -10,31 +11,27 @@ namespace Plugin.BLE.UWP { - class Service : ServiceBase + public class Service : ServiceBase { private readonly GattDeviceService _nativeService; - private readonly ObservableBluetoothLEDevice _nativeDevice; + public override Guid Id => _nativeService.Uuid; - //method to get parent devices to check if primary is obselete + + //method to get parent devices to check if primary is obsolete //return true as a placeholder public override bool IsPrimary => true; public Service(GattDeviceService service, IDevice device) : base(device) { - _nativeDevice = (ObservableBluetoothLEDevice) device.NativeDevice; _nativeService = service; } - protected async override Task> GetCharacteristicsNativeAsync() + protected override async Task> GetCharacteristicsNativeAsync() { - var nativeChars = (await _nativeService.GetCharacteristicsAsync()).Characteristics; - var charList = new List(); - foreach (var nativeChar in nativeChars) - { - var characteristic = new Characteristic(nativeChar, this); - charList.Add(characteristic); - } - return charList; + var nativeChars = await _nativeService.GetCharacteristicsAsync(); + + // ToDo error handling + return nativeChars.Characteristics.Select(nativeChar => new Characteristic(nativeChar, this)).Cast().ToList(); } } } From f2bf664414ba207ca2b6769416ee71da1c03fa70 Mon Sep 17 00:00:00 2001 From: Adrian Seceleanu Date: Fri, 9 Aug 2019 14:20:52 +0200 Subject: [PATCH 079/527] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6437a0d5..97186dfc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -**Looking for Maintainers**: Lately our time dedicated to supporting the library was indeed limited, we would greatly appreciate any volunteer who would aid with maintaining this useful plugin :). Please comment in issue #274 :) Thanks - # Bluetooth LE plugin for Xamarin ![Build Status](https://app.bitrise.io/app/3fe54d0a5f43c2bf/status.svg?token=i9LUY4rIecZWd_3j7hwXgw) Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plugin is loosely based on the BLE implementation of [Monkey Robotics](https://github.com/xamarin/Monkey.Robotics). @@ -12,6 +10,8 @@ Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plug | ------------- | ----------- | ----------- | | Xamarin.Android | 4.3 | | | Xamarin.iOS | 7.0 | | +| Xamarin.Mac | 10.9 (Maveriks) | Plugin v2.1.0-pre1 | +| UWP | 1709 - 10.0.16299 (Fall Creators Update) | TBA | [Changelog](doc/changelog.md) From 3a13d7866da683ed559187220f55dd371575573a Mon Sep 17 00:00:00 2001 From: xabre Date: Sun, 11 Aug 2019 16:21:48 +0200 Subject: [PATCH 080/527] Error handling, cleanup. --- Source/BLE.Client/BLE.Client.UWP/Setup.cs | 5 + .../ViewModels/DeviceListViewModel.cs | 1 + Source/Plugin.BLE.Abstractions/AdapterBase.cs | 14 +- .../Contracts/IDevice.cs | 2 +- Source/Plugin.BLE.Abstractions/DeviceBase.cs | 2 +- Source/Plugin.BLE.UWP/Adapter.cs | 124 +++++++----- Source/Plugin.BLE.UWP/BleImplementation.cs | 9 +- Source/Plugin.BLE.UWP/Characteristic.cs | 189 ++---------------- Source/Plugin.BLE.UWP/DefaultTrace.cs | 5 +- Source/Plugin.BLE.UWP/Descriptor.cs | 40 +--- Source/Plugin.BLE.UWP/Device.cs | 56 ++---- .../Extensions/GattResultExtensions.cs | 65 ++++++ Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj | 1 + Source/Plugin.BLE.UWP/Service.cs | 12 +- Source/Plugin.BLE.iOS/Adapter.cs | 6 +- Source/Plugin.BLE.iOS/Device.cs | 2 +- Source/Plugin.BLE/CrossBluetoothLE.cs | 1 + 17 files changed, 226 insertions(+), 308 deletions(-) create mode 100644 Source/Plugin.BLE.UWP/Extensions/GattResultExtensions.cs diff --git a/Source/BLE.Client/BLE.Client.UWP/Setup.cs b/Source/BLE.Client/BLE.Client.UWP/Setup.cs index 180bbd73..ecc64501 100644 --- a/Source/BLE.Client/BLE.Client.UWP/Setup.cs +++ b/Source/BLE.Client/BLE.Client.UWP/Setup.cs @@ -1,9 +1,11 @@ +using System.Diagnostics; using Acr.UserDialogs; using Plugin.Permissions; using Plugin.Settings; using MvvmCross; using MvvmCross.Forms.Platforms.Uap.Core; using Plugin.BLE; +using Trace = Plugin.BLE.Abstractions.Trace; namespace BLE.Client.UWP { @@ -18,6 +20,9 @@ protected override void InitializeIoC() Mvx.IoCProvider.RegisterSingleton(() => CrossPermissions.Current); Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current); Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current.Adapter); + + Trace.TraceImplementation = (s, objects) => Debug.WriteLine(s, objects); } + } } diff --git a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs index 0edc5271..ef6d1042 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs @@ -96,6 +96,7 @@ public DeviceListViewModel(IBluetoothLE bluetoothLe, IAdapter adapter, IUserDial // quick and dirty :> _bluetoothLe.StateChanged += OnStateChanged; Adapter.DeviceDiscovered += OnDeviceDiscovered; + Adapter.DeviceAdvertised += OnDeviceDiscovered; Adapter.ScanTimeoutElapsed += Adapter_ScanTimeoutElapsed; Adapter.DeviceDisconnected += OnDeviceDisconnected; Adapter.DeviceConnectionLost += OnDeviceConnectionLost; diff --git a/Source/Plugin.BLE.Abstractions/AdapterBase.cs b/Source/Plugin.BLE.Abstractions/AdapterBase.cs index bbbabfa0..011e905e 100644 --- a/Source/Plugin.BLE.Abstractions/AdapterBase.cs +++ b/Source/Plugin.BLE.Abstractions/AdapterBase.cs @@ -13,8 +13,6 @@ namespace Plugin.BLE.Abstractions { public abstract class AdapterBase : IAdapter { - private readonly ConcurrentDictionary _discoveredDevices = new ConcurrentDictionary(); - private CancellationTokenSource _scanCancellationTokenSource; private volatile bool _isScanning; private Func _currentScanDeviceFilter; @@ -36,7 +34,9 @@ public bool IsScanning public int ScanTimeout { get; set; } = 10000; public ScanMode ScanMode { get; set; } = ScanMode.LowPower; - public virtual IReadOnlyList DiscoveredDevices => _discoveredDevices.Values.ToList(); + protected ConcurrentDictionary DiscoveredDevicesRegistry { get; } = new ConcurrentDictionary(); + + public virtual IReadOnlyList DiscoveredDevices => DiscoveredDevicesRegistry.Values.ToList(); /// /// Used to store all connected devices @@ -60,7 +60,7 @@ public async Task StartScanningForDevicesAsync(Guid[] serviceUuids = null, Func< try { - _discoveredDevices.Clear(); + DiscoveredDevicesRegistry.Clear(); using (cancellationToken.Register(() => _scanCancellationTokenSource?.Cancel())) { @@ -191,10 +191,10 @@ public void HandleDiscoveredDevice(IDevice device) DeviceAdvertised?.Invoke(this, new DeviceEventArgs { Device = device }); // TODO (sms): check equality implementation of device - if (_discoveredDevices.ContainsKey(device.Id)) + if (DiscoveredDevicesRegistry.ContainsKey(device.Id)) return; - _discoveredDevices[device.Id] = device; + DiscoveredDevicesRegistry[device.Id] = device; DeviceDiscovered?.Invoke(this, new DeviceEventArgs { Device = device }); } @@ -215,7 +215,7 @@ public void HandleDisconnectedDevice(bool disconnectRequested, IDevice device) Trace.Message("DisconnectedPeripheral by lost signal: {0}", device.Name); DeviceConnectionLost?.Invoke(this, new DeviceErrorEventArgs { Device = device }); - if (_discoveredDevices.TryRemove(device.Id, out _)) + if (DiscoveredDevicesRegistry.TryRemove(device.Id, out _)) { Trace.Message("Removed device from discovered devices list: {0}", device.Name); } diff --git a/Source/Plugin.BLE.Abstractions/Contracts/IDevice.cs b/Source/Plugin.BLE.Abstractions/Contracts/IDevice.cs index 5e9194d8..3740882c 100644 --- a/Source/Plugin.BLE.Abstractions/Contracts/IDevice.cs +++ b/Source/Plugin.BLE.Abstractions/Contracts/IDevice.cs @@ -45,7 +45,7 @@ public interface IDevice : IDisposable /// - Manufacturer Specifc data /// - ... /// - IList AdvertisementRecords { get; } + IReadOnlyList AdvertisementRecords { get; } /// /// Gets all services of the device. diff --git a/Source/Plugin.BLE.Abstractions/DeviceBase.cs b/Source/Plugin.BLE.Abstractions/DeviceBase.cs index a922f7c5..7495efe5 100644 --- a/Source/Plugin.BLE.Abstractions/DeviceBase.cs +++ b/Source/Plugin.BLE.Abstractions/DeviceBase.cs @@ -41,7 +41,7 @@ public abstract class DeviceBase : IDevice, ICancellationMaster public string Name { get; protected set; } public int Rssi { get; protected set; } public DeviceState State => GetState(); - public IList AdvertisementRecords { get; protected set; } + public IReadOnlyList AdvertisementRecords { get; protected set; } public abstract object NativeDevice { get; } CancellationTokenSource ICancellationMaster.TokenSource { get; set; } = new CancellationTokenSource(); diff --git a/Source/Plugin.BLE.UWP/Adapter.cs b/Source/Plugin.BLE.UWP/Adapter.cs index 61aec182..cdc3757f 100644 --- a/Source/Plugin.BLE.UWP/Adapter.cs +++ b/Source/Plugin.BLE.UWP/Adapter.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using System.Threading; @@ -18,11 +19,6 @@ public class Adapter : AdapterBase { private BluetoothLEHelper _bluetoothHelper; private BluetoothLEAdvertisementWatcher _bleWatcher; - /// - /// Needed to check for scanned devices so that duplicated don't get - /// added due to race conditions - /// - private IList _prevScannedDevices; public Adapter(BluetoothLEHelper bluetoothHelper) { @@ -33,8 +29,7 @@ protected override Task StartScanningForDevicesNativeAsync(Guid[] serviceUuids, { var hasFilter = serviceUuids?.Any() ?? false; - _bleWatcher = new BluetoothLEAdvertisementWatcher { ScanningMode = BluetoothLEScanningMode.Active }; //ToDo investigate passive scanning, readonly? - _prevScannedDevices = new List(); + _bleWatcher = new BluetoothLEAdvertisementWatcher { ScanningMode = ScanMode == ScanMode.Passive ? BluetoothLEScanningMode.Passive : BluetoothLEScanningMode.Active }; Trace.Message("Starting a scan for devices."); if (hasFilter) @@ -48,7 +43,7 @@ protected override Task StartScanningForDevicesNativeAsync(Guid[] serviceUuids, Trace.Message($"ScanFilters: {string.Join(", ", serviceUuids)}"); } - + _bleWatcher.Received -= DeviceFoundAsync; _bleWatcher.Received += DeviceFoundAsync; _bleWatcher.Start(); @@ -69,44 +64,68 @@ protected override async Task ConnectToDeviceNativeAsync(IDevice device, Connect { Trace.Message($"Connecting to device with ID: {device.Id.ToString()}"); - ObservableBluetoothLEDevice nativeDevice = device.NativeDevice as ObservableBluetoothLEDevice; - if (nativeDevice == null) + if (!(device.NativeDevice is ObservableBluetoothLEDevice nativeDevice)) return; - var uwpDevice = (Device)device; - uwpDevice.ConnectionStatusChanged += Device_ConnectionStatusChanged; + // nativeDevice.PropertyChanged -= Device_ConnectionStatusChanged; + nativeDevice.PropertyChanged += Device_ConnectionStatusChanged; - await nativeDevice.ConnectAsync(); + ConnectedDeviceRegistry[device.Id.ToString()] = device; - if (!ConnectedDeviceRegistry.ContainsKey(uwpDevice.Id.ToString())) - ConnectedDeviceRegistry[uwpDevice.Id.ToString()] = device; + await nativeDevice.ConnectAsync(); } - private void Device_ConnectionStatusChanged(Device device, BluetoothConnectionStatus status) + private void Device_ConnectionStatusChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { - if (status == BluetoothConnectionStatus.Connected) - HandleConnectedDevice(device); - else - HandleDisconnectedDevice(true, device); + if (!(sender is ObservableBluetoothLEDevice nativeDevice) || nativeDevice.BluetoothLEDevice == null) + { + return; + } + + if (propertyChangedEventArgs.PropertyName != nameof(nativeDevice.IsConnected)) + { + return; + } + + var address = ParseDeviceId(nativeDevice.BluetoothLEDevice.BluetoothAddress).ToString(); + if (nativeDevice.IsConnected && ConnectedDeviceRegistry.TryGetValue(address, out var connectedDevice)) + { + HandleConnectedDevice(connectedDevice); + return; + } + + if (!nativeDevice.IsConnected && ConnectedDeviceRegistry.TryRemove(address, out var disconnectedDevice)) + { + HandleDisconnectedDevice(false, disconnectedDevice); + } } protected override void DisconnectDeviceNative(IDevice device) { // Windows doesn't support disconnecting, so currently just dispose of the device Trace.Message($"Disconnected from device with ID: {device.Id.ToString()}"); - ConnectedDeviceRegistry.TryRemove(device.Id.ToString(), out _); + + if (device.NativeDevice is ObservableBluetoothLEDevice nativeDevice) + { + nativeDevice.PropertyChanged -= Device_ConnectionStatusChanged; + nativeDevice.BluetoothLEDevice.Dispose(); + + ConnectedDeviceRegistry.TryRemove(device.Id.ToString(), out _); + } + + this.HandleDisconnectedDevice(true, device); } - public override async Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters, CancellationToken cancellationToken) + public override async Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default) { //convert GUID to string and take last 12 characters as MAC address var guidString = deviceGuid.ToString("N").Substring(20); - ulong bluetoothAddress = Convert.ToUInt64(guidString, 16); + var bluetoothAddress = Convert.ToUInt64(guidString, 16); var nativeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(bluetoothAddress); - var currDevice = new Device(this, nativeDevice, 0, guidString); + var knownDevice = new Device(this, nativeDevice, 0, deviceGuid); - await ConnectToDeviceAsync(currDevice, cancellationToken: cancellationToken); - return currDevice; + await ConnectToDeviceAsync(knownDevice, cancellationToken: cancellationToken); + return knownDevice; } public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null) @@ -114,7 +133,7 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] //currently no way to retrieve paired and connected devices on windows without using an //async method. Trace.Message("Returning devices connected by this app only"); - return (List)ConnectedDevices; + return ConnectedDevices; } /// @@ -126,17 +145,7 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] public static List ParseAdvertisementData(BluetoothLEAdvertisement adv) { var advList = adv.DataSections; - var records = new List(); - foreach (var data in advList) - { - var type = data.DataType; - if (type == BluetoothLEAdvertisementDataTypes.ManufacturerSpecificData) - { - records.Add(new AdvertisementRecord(AdvertisementRecordType.ManufacturerSpecificData, data.Data.ToArray())); - } - //TODO: add more advertisement record types to parse - } - return records; + return advList.Select(data => new AdvertisementRecord((AdvertisementRecordType)data.DataType, data.Data?.ToArray())).ToList(); } /// @@ -146,20 +155,43 @@ public static List ParseAdvertisementData(BluetoothLEAdvert /// The advertisement recieved by the watcher private async void DeviceFoundAsync(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs btAdv) { - //check if the device was already found before calling generic handler - //ensures that no device is mistakenly added twice - if (!_prevScannedDevices.Contains(btAdv.BluetoothAddress)) + var deviceId = ParseDeviceId(btAdv.BluetoothAddress); + + if (DiscoveredDevicesRegistry.TryGetValue(deviceId, out var device)) + { + Trace.Message("AdvertisdedPeripheral: {0} Id: {1}, Rssi: {2}", device.Name, device.Id, btAdv.RawSignalStrengthInDBm); + (device as Device)?.Update(btAdv.RawSignalStrengthInDBm, ParseAdvertisementData(btAdv.Advertisement)); + this.HandleDiscoveredDevice(device); + } + else { - _prevScannedDevices.Add(btAdv.BluetoothAddress); var bluetoothLeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); - if (bluetoothLeDevice != null) //make sure advertisement bluetooth address actually returns a device + if (bluetoothLeDevice != null) //make sure advertisement bluetooth address actually returns a device { - var device = new Device(this, bluetoothLeDevice, btAdv.RawSignalStrengthInDBm, btAdv.BluetoothAddress.ToString(), ParseAdvertisementData(btAdv.Advertisement)); - Trace.Message("DiscoveredPeripheral: {0} Id: {1}", device.Name, device.Id); + device = new Device(this, bluetoothLeDevice, btAdv.RawSignalStrengthInDBm, deviceId, ParseAdvertisementData(btAdv.Advertisement)); + Trace.Message("DiscoveredPeripheral: {0} Id: {1}, Rssi: {2}", device.Name, device.Id, btAdv.RawSignalStrengthInDBm); this.HandleDiscoveredDevice(device); } - return; } } + + /// + /// Method to parse the bluetooth address as a hex string to a UUID + /// + /// BluetoothLEDevice native device address + /// a GUID that is padded left with 0 and the last 6 bytes are the bluetooth address + private static Guid ParseDeviceId(ulong bluetoothAddress) + { + var macWithoutColons = bluetoothAddress.ToString("x"); + macWithoutColons = macWithoutColons.PadLeft(12, '0'); //ensure valid length + var deviceGuid = new byte[16]; + Array.Clear(deviceGuid, 0, 16); + var macBytes = Enumerable.Range(0, macWithoutColons.Length) + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(macWithoutColons.Substring(x, 2), 16)) + .ToArray(); + macBytes.CopyTo(deviceGuid, 10); + return new Guid(deviceGuid); + } } } \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/BleImplementation.cs b/Source/Plugin.BLE.UWP/BleImplementation.cs index d7a8300a..db2cdd04 100644 --- a/Source/Plugin.BLE.UWP/BleImplementation.cs +++ b/Source/Plugin.BLE.UWP/BleImplementation.cs @@ -1,4 +1,5 @@ -using Microsoft.Toolkit.Uwp.Connectivity; +using Windows.Devices.Bluetooth; +using Microsoft.Toolkit.Uwp.Connectivity; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; @@ -8,6 +9,12 @@ namespace Plugin.BLE { public class BleImplementation : BleImplementationBase { + public static BluetoothCacheMode CacheModeCharacteristicRead { get; set; } = BluetoothCacheMode.Uncached; + public static BluetoothCacheMode CacheModeDescriptorRead { get; set; } = BluetoothCacheMode.Uncached; + public static BluetoothCacheMode CacheModeGetDescriptors { get; set; } = BluetoothCacheMode.Uncached; + public static BluetoothCacheMode CacheModeGetCharacteristics { get; set; } = BluetoothCacheMode.Uncached; + public static BluetoothCacheMode CacheModeGetServices { get; set; } = BluetoothCacheMode.Uncached; + private BluetoothLEHelper _bluetoothHelper; protected override IAdapter CreateNativeAdapter() diff --git a/Source/Plugin.BLE.UWP/Characteristic.cs b/Source/Plugin.BLE.UWP/Characteristic.cs index 298b5d31..778b698d 100644 --- a/Source/Plugin.BLE.UWP/Characteristic.cs +++ b/Source/Plugin.BLE.UWP/Characteristic.cs @@ -3,12 +3,13 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Windows.Devices.Bluetooth; using Windows.Devices.Bluetooth.GenericAttributeProfile; using Windows.Security.Cryptography; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Abstractions.EventArgs; -using Plugin.BLE.Abstractions.Exceptions; +using Plugin.BLE.Extensions; namespace Plugin.BLE.UWP { @@ -39,26 +40,19 @@ public Characteristic(GattCharacteristic nativeCharacteristic, IService service) protected override async Task> GetDescriptorsNativeAsync() { - var nativeDescriptors = (await _nativeCharacteristic.GetDescriptorsAsync()).Descriptors; + var descriptorsResult = await _nativeCharacteristic.GetDescriptorsAsync(BleImplementation.CacheModeGetDescriptors); + descriptorsResult.ThrowIfError(); - //convert to generic descriptors - return nativeDescriptors.Select(nativeDescriptor => new Descriptor(nativeDescriptor, this)).Cast().ToList(); + return descriptorsResult.Descriptors? + .Select(nativeDescriptor => new Descriptor(nativeDescriptor, this)) + .Cast() + .ToList(); } protected override async Task ReadNativeAsync() { - var readResult = await _nativeCharacteristic.ReadValueAsync(); - switch (readResult.Status) - { - case GattCommunicationStatus.Success: - return _value = readResult.Value.ToArray(); - case GattCommunicationStatus.Unreachable: - case GattCommunicationStatus.ProtocolError: - case GattCommunicationStatus.AccessDenied: - throw new CharacteristicReadException($"Error while reading characteristic. Status: {readResult.Status}"); - default: - throw new ArgumentOutOfRangeException(); - } + var readResult = await _nativeCharacteristic.ReadValueAsync(BleImplementation.CacheModeCharacteristicRead); + return _value = readResult.GetValueOrThrowIfError(); } protected override async Task StartUpdatesNativeAsync() @@ -67,27 +61,7 @@ protected override async Task StartUpdatesNativeAsync() _nativeCharacteristic.ValueChanged += OnCharacteristicValueChanged; var result = await _nativeCharacteristic.WriteClientCharacteristicConfigurationDescriptorWithResultAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify); - - //ToDo throw - switch (result.Status) - { - //output trace message with status of update - case GattCommunicationStatus.Success: - Trace.Message("Start Updates Successful"); - break; - case GattCommunicationStatus.AccessDenied: - Trace.Message("Incorrect permissions to start updates"); - break; - case GattCommunicationStatus.ProtocolError when result.ProtocolError != null: - Trace.Message("Start updates returned with error: {0}", parseError(result.ProtocolError)); - break; - case GattCommunicationStatus.ProtocolError: - Trace.Message("Start updates returned with unknown error"); - break; - case GattCommunicationStatus.Unreachable: - Trace.Message("Characteristic properties are unreachable"); - break; - } + result.ThrowIfError(); } protected override async Task StopUpdatesNativeAsync() @@ -95,66 +69,17 @@ protected override async Task StopUpdatesNativeAsync() _nativeCharacteristic.ValueChanged -= OnCharacteristicValueChanged; var result = await _nativeCharacteristic.WriteClientCharacteristicConfigurationDescriptorWithResultAsync(GattClientCharacteristicConfigurationDescriptorValue.None); - - //ToDo throw - switch (result.Status) - { - case GattCommunicationStatus.Success: - Trace.Message("Stop Updates Successful"); - break; - case GattCommunicationStatus.AccessDenied: - Trace.Message("Incorrect permissions to stop updates"); - break; - case GattCommunicationStatus.ProtocolError when result.ProtocolError != null: - Trace.Message("Stop updates returned with error: {0}", parseError(result.ProtocolError)); - break; - case GattCommunicationStatus.ProtocolError: - Trace.Message("Stop updates returned with unknown error"); - break; - case GattCommunicationStatus.Unreachable: - Trace.Message("Characteristic properties are unreachable"); - break; - } + result.ThrowIfError(); } protected override async Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType) { - //print errors if error and write with response - if (writeType == CharacteristicWriteType.WithResponse) - { - var result = await _nativeCharacteristic.WriteValueWithResultAsync(CryptographicBuffer.CreateFromByteArray(data)); - - //Todo throw - switch (result.Status) - { - case GattCommunicationStatus.Success: - Trace.Message("Write successful"); - return true; - case GattCommunicationStatus.AccessDenied: - Trace.Message("Incorrect permissions to stop updates"); - break; - case GattCommunicationStatus.ProtocolError when result.ProtocolError != null: - Trace.Message("Write Characteristic returned with error: {0}", parseError(result.ProtocolError)); - break; - case GattCommunicationStatus.ProtocolError: - Trace.Message("Write Characteristic returned with unknown error"); - break; - case GattCommunicationStatus.Unreachable: - Trace.Message("Characteristic write is unreachable"); - break; - } - - return false; - } - - var status = await _nativeCharacteristic.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data), GattWriteOption.WriteWithoutResponse); + var result = await _nativeCharacteristic.WriteValueWithResultAsync( + CryptographicBuffer.CreateFromByteArray(data), + writeType == CharacteristicWriteType.WithResponse ? GattWriteOption.WriteWithResponse : GattWriteOption.WriteWithoutResponse); - // ToDo switch and throw - if (status == GattCommunicationStatus.Success) - { - return true; - } - return false; + result.ThrowIfError(); + return true; } /// @@ -163,86 +88,8 @@ protected override async Task WriteNativeAsync(byte[] data, Characteristic /// private void OnCharacteristicValueChanged(object sender, GattValueChangedEventArgs e) { - _value = e.CharacteristicValue.ToArray(); //add value to array + _value = e.CharacteristicValue?.ToArray(); //add value to array ValueUpdated?.Invoke(this, new CharacteristicUpdatedEventArgs(this)); } - - /// - /// Used to parse errors returned by UWP methods in byte form - /// - /// The byte describing the type of error - /// Returns a string with the name of an error byte - private string parseError(byte? err) - { - if (err == GattProtocolError.AttributeNotFound) - { - return "Attribute Not Found"; - } - if (err == GattProtocolError.AttributeNotLong) - { - return "Attribute Not Long"; - } - if (err == GattProtocolError.InsufficientAuthentication) - { - return "Insufficient Authentication"; - } - if (err == GattProtocolError.InsufficientAuthorization) - { - return "Insufficient Authorization"; - } - if (err == GattProtocolError.InsufficientEncryption) - { - return "Insufficient Encryption"; - } - if (err == GattProtocolError.InsufficientEncryptionKeySize) - { - return "Insufficient Encryption Key Size"; - } - if (err == GattProtocolError.InsufficientResources) - { - return "Insufficient Resource"; - } - if (err == GattProtocolError.InvalidAttributeValueLength) - { - return "Invalid Attribute Value Length"; - } - if (err == GattProtocolError.InvalidHandle) - { - return "Invalid Handle"; - } - if (err == GattProtocolError.InvalidOffset) - { - return "Invalid Offset"; - } - if (err == GattProtocolError.InvalidPdu) - { - return "Invalid PDU"; - } - if (err == GattProtocolError.PrepareQueueFull) - { - return "Prepare Queue Full"; - } - if (err == GattProtocolError.ReadNotPermitted) - { - return "Read Not Permitted"; - } - if (err == GattProtocolError.RequestNotSupported) - { - return "Request Not Supported"; - } - if (err == GattProtocolError.UnlikelyError) - { - return "Unlikely Error"; - } - if (err == GattProtocolError.UnsupportedGroupType) - { - return "Unsupported Group Type"; - } - if (err == GattProtocolError.WriteNotPermitted) - { - return "Write Not Permitted"; - } - return null; - } } } diff --git a/Source/Plugin.BLE.UWP/DefaultTrace.cs b/Source/Plugin.BLE.UWP/DefaultTrace.cs index bfead0ab..09dea2c4 100644 --- a/Source/Plugin.BLE.UWP/DefaultTrace.cs +++ b/Source/Plugin.BLE.UWP/DefaultTrace.cs @@ -1,13 +1,14 @@ using System; +using System.Diagnostics; namespace Plugin.BLE { - internal static class DefaultTrace + static class DefaultTrace { static DefaultTrace() { //uses WriteLine for trace - Abstractions.Trace.TraceImplementation = Console.WriteLine; + Abstractions.Trace.TraceImplementation = (s, objects) => Debug.WriteLine(s, objects); } } } \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/Descriptor.cs b/Source/Plugin.BLE.UWP/Descriptor.cs index a0d770a6..9b0dfab6 100644 --- a/Source/Plugin.BLE.UWP/Descriptor.cs +++ b/Source/Plugin.BLE.UWP/Descriptor.cs @@ -5,7 +5,9 @@ using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Devices.Bluetooth; using Windows.Security.Cryptography; +using Plugin.BLE.Extensions; namespace Plugin.BLE.UWP { @@ -27,44 +29,14 @@ public Descriptor(GattDescriptor nativeDescriptor, ICharacteristic characteristi protected override async Task ReadNativeAsync() { - var readResult = await _nativeDescriptor.ReadValueAsync(); - - //ToDo throw - switch (readResult.Status) - { - case GattCommunicationStatus.Success: - Trace.Message("Descriptor Read Successfully"); - break; - case GattCommunicationStatus.Unreachable: - case GattCommunicationStatus.ProtocolError: - case GattCommunicationStatus.AccessDenied: - default: - Trace.Message("Descriptor Read Failed"); - break; - } - - return _value = readResult.Value.ToArray(); + var readResult = await _nativeDescriptor.ReadValueAsync(BleImplementation.CacheModeDescriptorRead); + return _value = readResult.GetValueOrThrowIfError(); } protected override async Task WriteNativeAsync(byte[] data) { - //method contains no option for writing with response, so always write - //without response - var writeResult = await _nativeDescriptor.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data)); - - // ToDO throw error - switch (writeResult) - { - case GattCommunicationStatus.Success: - Trace.Message("Descriptor Write Successfully"); - break; - case GattCommunicationStatus.Unreachable: - case GattCommunicationStatus.ProtocolError: - case GattCommunicationStatus.AccessDenied: - default: - Trace.Message("Descriptor Write Failed"); - break; - } + var result = await _nativeDescriptor.WriteValueWithResultAsync(CryptographicBuffer.CreateFromByteArray(data)); + result.ThrowIfError(); } } } diff --git a/Source/Plugin.BLE.UWP/Device.cs b/Source/Plugin.BLE.UWP/Device.cs index 71786a65..6a0a16bb 100644 --- a/Source/Plugin.BLE.UWP/Device.cs +++ b/Source/Plugin.BLE.UWP/Device.cs @@ -9,6 +9,7 @@ using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.Extensions; namespace Plugin.BLE.UWP { @@ -17,65 +18,50 @@ public class Device : DeviceBase private readonly ObservableBluetoothLEDevice _nativeDevice; public override object NativeDevice => _nativeDevice; - public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, string address, List advertisementRecords = null) : base(adapter) + public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id, IReadOnlyList advertisementRecords = null) : base(adapter) { _nativeDevice = new ObservableBluetoothLEDevice(nativeDevice.DeviceInformation); Rssi = rssi; - Id = ParseDeviceId(nativeDevice.BluetoothAddress.ToString("x")); + Id = id; Name = nativeDevice.Name; AdvertisementRecords = advertisementRecords; - _nativeDevice.PropertyChanged += NativeDevice_PropertyChanged; } - public delegate void ConnectionStatusChangedHandler(Device device, BluetoothConnectionStatus status); - public ConnectionStatusChangedHandler ConnectionStatusChanged; - - private void NativeDevice_PropertyChanged(object sender, PropertyChangedEventArgs e) - { - if (e.PropertyName != "IsConnected") - return; - - ConnectionStatusChanged?.Invoke(this, _nativeDevice.BluetoothLEDevice.ConnectionStatus); - } - - /// - /// Method to parse the bluetooth address as a hex string to a UUID - /// - /// The bluetooth address as a hex string without colons - /// a GUID that is padded left with 0 and the last 6 bytes are the bluetooth address - private Guid ParseDeviceId(string macWithoutColons) + internal void Update(short btAdvRawSignalStrengthInDBm, IReadOnlyList advertisementData) { - macWithoutColons = macWithoutColons.PadLeft(12, '0'); //ensure valid length - var deviceGuid = new byte[16]; - Array.Clear(deviceGuid, 0, 16); - var macBytes = Enumerable.Range(0, macWithoutColons.Length) - .Where(x => x % 2 == 0) - .Select(x => Convert.ToByte(macWithoutColons.Substring(x, 2), 16)) - .ToArray(); - macBytes.CopyTo(deviceGuid, 10); - return new Guid(deviceGuid); + this.Rssi = btAdvRawSignalStrengthInDBm; + this.AdvertisementRecords = advertisementData; } public override Task UpdateRssiAsync() { //No current method to update the Rssi of a device //In future implementations, maybe listen for device's advertisements - this.Rssi = _nativeDevice.RSSI; + + Trace.Message("Request RSSI not supported in UWP"); + return Task.FromResult(true); } protected override async Task> GetServicesNativeAsync() { - var gattServiceList = await _nativeDevice.BluetoothLEDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); // ToDo investigate cache modes + var result = await _nativeDevice.BluetoothLEDevice.GetGattServicesAsync(BleImplementation.CacheModeGetServices); + result.ThrowIfError(); - //ToDo error handling - return gattServiceList.Services.Select(nativeService => new Service(nativeService, this)).Cast().ToList(); + return result.Services? + .Select(nativeService => new Service(nativeService, this)) + .Cast() + .ToList(); } protected override DeviceState GetState() { - //windows only supports retrieval of two states currently - return _nativeDevice.IsConnected ? DeviceState.Connected : DeviceState.Disconnected; + if (_nativeDevice.IsConnected) + { + return DeviceState.Connected; + } + + return _nativeDevice.IsPaired ? DeviceState.Limited : DeviceState.Disconnected; } protected override Task RequestMtuNativeAsync(int requestValue) diff --git a/Source/Plugin.BLE.UWP/Extensions/GattResultExtensions.cs b/Source/Plugin.BLE.UWP/Extensions/GattResultExtensions.cs new file mode 100644 index 00000000..f1e24331 --- /dev/null +++ b/Source/Plugin.BLE.UWP/Extensions/GattResultExtensions.cs @@ -0,0 +1,65 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Devices.Bluetooth.GenericAttributeProfile; +using Microsoft.Toolkit.Uwp.Connectivity; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Exceptions; + +namespace Plugin.BLE.Extensions +{ + public static class GattResultExtensions + { + public static void ThrowIfError(this GattWriteResult result, [CallerMemberName]string tag = null) + => result.Status.ThrowIfError(tag, result.ProtocolError); + + public static void ThrowIfError(this GattCharacteristicsResult result, [CallerMemberName]string tag = null) + => result.Status.ThrowIfError(tag, result.ProtocolError); + + public static void ThrowIfError(this GattDescriptorsResult result, [CallerMemberName]string tag = null) + => result.Status.ThrowIfError(tag, result.ProtocolError); + + public static void ThrowIfError(this GattDeviceServicesResult result, [CallerMemberName]string tag = null) + => result.Status.ThrowIfError(tag, result.ProtocolError); + + + public static byte[] GetValueOrThrowIfError(this GattReadResult result, [CallerMemberName]string tag = null) + { + var errorMessage = result.Status.GetErrorMessage(tag, result.ProtocolError); + if (!string.IsNullOrEmpty(errorMessage)) + { + throw new CharacteristicReadException(errorMessage); + } + + return result.Value?.ToArray() ?? new byte[0]; + } + + public static void ThrowIfError(this GattCommunicationStatus status, [CallerMemberName]string tag = null, byte? protocolError = null) + { + var errorMessage = status.GetErrorMessage(tag, protocolError); + if (!string.IsNullOrEmpty(errorMessage)) + { + throw new Exception(errorMessage); + } + } + + private static string GetErrorMessage(this GattCommunicationStatus status, string tag, byte? protocolError) + { + switch (status) + { + //output trace message with status of update + case GattCommunicationStatus.Success: + Trace.Message($"[{tag}] success."); + return null; + case GattCommunicationStatus.ProtocolError when protocolError != null: + return $"[{tag}] failed with status: {status} and protocol error {protocolError.GetErrorString()}"; + case GattCommunicationStatus.AccessDenied: + case GattCommunicationStatus.ProtocolError: + case GattCommunicationStatus.Unreachable: + return $"[{tag}] failed with status: {status}"; + } + + return null; + } + } +} \ No newline at end of file diff --git a/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj b/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj index 281aa17c..a6352490 100644 --- a/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj +++ b/Source/Plugin.BLE.UWP/Plugin.BLE.UWP.csproj @@ -115,6 +115,7 @@ + diff --git a/Source/Plugin.BLE.UWP/Service.cs b/Source/Plugin.BLE.UWP/Service.cs index 65e2d75e..806a2631 100644 --- a/Source/Plugin.BLE.UWP/Service.cs +++ b/Source/Plugin.BLE.UWP/Service.cs @@ -2,12 +2,11 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; - -using Microsoft.Toolkit.Uwp.Connectivity; using Windows.Devices.Bluetooth.GenericAttributeProfile; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.Extensions; namespace Plugin.BLE.UWP { @@ -28,10 +27,13 @@ public Service(GattDeviceService service, IDevice device) : base(device) protected override async Task> GetCharacteristicsNativeAsync() { - var nativeChars = await _nativeService.GetCharacteristicsAsync(); + var result = await _nativeService.GetCharacteristicsAsync(BleImplementation.CacheModeGetCharacteristics); + result.ThrowIfError(); - // ToDo error handling - return nativeChars.Characteristics.Select(nativeChar => new Characteristic(nativeChar, this)).Cast().ToList(); + return result.Characteristics? + .Select(nativeChar => new Characteristic(nativeChar, this)) + .Cast() + .ToList(); } } } diff --git a/Source/Plugin.BLE.iOS/Adapter.cs b/Source/Plugin.BLE.iOS/Adapter.cs index b5728cfa..ebc6d35f 100755 --- a/Source/Plugin.BLE.iOS/Adapter.cs +++ b/Source/Plugin.BLE.iOS/Adapter.cs @@ -96,10 +96,9 @@ public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCe // when a peripheral disconnects, remove it from our running list. var id = ParseDeviceGuid(e.Peripheral); var stringId = id.ToString(); - IDevice foundDevice; // normal disconnect (requested by user) - var isNormalDisconnect = _deviceOperationRegistry.TryGetValue(stringId, out foundDevice); + var isNormalDisconnect = _deviceOperationRegistry.TryGetValue(stringId, out var foundDevice); if (isNormalDisconnect) { _deviceOperationRegistry.Remove(stringId); @@ -130,10 +129,9 @@ public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCe { var id = ParseDeviceGuid(e.Peripheral); var stringId = id.ToString(); - IDevice foundDevice; // remove instance from registry - if (_deviceOperationRegistry.TryGetValue(stringId, out foundDevice)) + if (_deviceOperationRegistry.TryGetValue(stringId, out var foundDevice)) { _deviceOperationRegistry.Remove(stringId); } diff --git a/Source/Plugin.BLE.iOS/Device.cs b/Source/Plugin.BLE.iOS/Device.cs index 1a554c6e..801f7f58 100644 --- a/Source/Plugin.BLE.iOS/Device.cs +++ b/Source/Plugin.BLE.iOS/Device.cs @@ -35,7 +35,7 @@ public Device(Adapter adapter, CBPeripheral nativeDevice, IBleCentralManagerDele Rssi = rssi; AdvertisementRecords = advertisementRecords; - // TODO figure out if this is in any way required, + // TODO figure out if this is in any way required, // https://github.com/xabre/xamarin-bluetooth-le/issues/81 //_nativeDevice.UpdatedName += OnNameUpdated; } diff --git a/Source/Plugin.BLE/CrossBluetoothLE.cs b/Source/Plugin.BLE/CrossBluetoothLE.cs index a56fda6c..db22676d 100644 --- a/Source/Plugin.BLE/CrossBluetoothLE.cs +++ b/Source/Plugin.BLE/CrossBluetoothLE.cs @@ -1,4 +1,5 @@ using System; +using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; namespace Plugin.BLE From c325e98139840b2172f2c0902ab4dcfd84bc0b36 Mon Sep 17 00:00:00 2001 From: xabre Date: Sun, 11 Aug 2019 16:27:08 +0200 Subject: [PATCH 081/527] Updated version to 2.1.0 --- .build/MvvmCross.Plugin.BLE.nuspec | 14 +++++++++----- .build/Plugin.BLE.nuspec | 6 +++++- .../Properties/AssemblyInfo.cs | 4 ++-- .../Properties/AssemblyInfo.cs | 4 ++-- .../Properties/AssemblyInfo.cs | 4 ++-- .../PluginNugetTest.iOS/Properties/AssemblyInfo.cs | 4 ++-- .../PluginNugetTest/Properties/AssemblyInfo.cs | 4 ++-- doc/changelog.md | 6 ++++-- 8 files changed, 28 insertions(+), 18 deletions(-) diff --git a/.build/MvvmCross.Plugin.BLE.nuspec b/.build/MvvmCross.Plugin.BLE.nuspec index ba18fa2d..96dab357 100644 --- a/.build/MvvmCross.Plugin.BLE.nuspec +++ b/.build/MvvmCross.Plugin.BLE.nuspec @@ -1,7 +1,7 @@ MvvmCross.Plugin.BLE - 2.1.0-pre1 + 2.1.0 Bluetooth LE Plugin for MvvmCross Adrian Seceleanu, Sven-Michael Stübe Adrian Seceleanu, Sven-Michael Stübe @@ -15,6 +15,10 @@ mvvm mvvmcross mvx xamarin monodroid Xamarin.iOS Xamarin.Android Bluetooth Low Energy BLE LE BTLE Smart ios android forms xamarinforms https://raw.githubusercontent.com/xabre/xamarin-bluetooth-le/master/icon_small.png + [2.1.0] + - Use IReadOnlyLists for Services/ Charactersitics/ Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices +Should prevent crashes like: #320 + - #54 MacOS support [2.1.0-pre1] - #54 macOS support [2.0.1] @@ -51,19 +55,19 @@ - + - + - + - + diff --git a/.build/Plugin.BLE.nuspec b/.build/Plugin.BLE.nuspec index 8cc03a4a..b3d96c38 100644 --- a/.build/Plugin.BLE.nuspec +++ b/.build/Plugin.BLE.nuspec @@ -1,7 +1,7 @@ Plugin.BLE - 2.1.0-pre1 + 2.1.0 Bluetooth LE Plugin for Xamarin Adrian Seceleanu, Sven-Michael Stübe Adrian Seceleanu, Sven-Michael Stübe @@ -15,6 +15,10 @@ xamarin monodroid Xamarin.iOS bluetooth BLE LE BTLE Smart xamarin.forms ios android forms xamarinforms https://raw.githubusercontent.com/xabre/xamarin-bluetooth-le/master/icon_small.png + [2.1.0] + - Use IReadOnlyLists for Services/ Charactersitics/ Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices +Should prevent crashes like: #320 + - #54 MacOS support [2.1.0-pre1] - #54 macOS support [2.0.1] diff --git a/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs index b78353f0..3b8836fb 100644 --- a/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0-pre1")] -[assembly: AssemblyVersion("2.1.0-pre1")] +// [assembly: AssemblyVersion("2.1.0")] +[assembly: AssemblyVersion("2.1.0")] [assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs index 8ea5f399..4d1c3cc9 100644 --- a/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0-pre1")] -[assembly: AssemblyVersion("2.1.0-pre1")] +// [assembly: AssemblyVersion("2.1.0")] +[assembly: AssemblyVersion("2.1.0")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs index 447b658b..f0f7043d 100644 --- a/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0-pre1")] -[assembly: AssemblyVersion("2.1.0-pre1")] +// [assembly: AssemblyVersion("2.1.0")] +[assembly: AssemblyVersion("2.1.0")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs index 3b95ecaf..a4ec6751 100644 --- a/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0-pre1")] -[assembly: AssemblyVersion("2.1.0-pre1")] +// [assembly: AssemblyVersion("2.1.0")] +[assembly: AssemblyVersion("2.1.0")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs index fbb06fa3..4dfbe52a 100644 --- a/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0-pre1")] -[assembly: AssemblyVersion("2.1.0-pre1")] +// [assembly: AssemblyVersion("2.1.0")] +[assembly: AssemblyVersion("2.1.0")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/doc/changelog.md b/doc/changelog.md index 59df321e..7e3bc3d2 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,11 +1,13 @@ # Changelog -## 2.1.0 +## 2.1.0 MacOS +- Use IReadOnlyLists for Services/Charactersitics/Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices +Should prevent crashes like: #320 #### 2.1.0-pre.1 - #54 macOS support -## 2.0.0 +## 2.0.0 .NETStanard #### 2.0.1 - Fix #367 From 87759ea2fd166abfae4eec58bc03fefffc224fad Mon Sep 17 00:00:00 2001 From: Adrian Seceleanu Date: Sun, 11 Aug 2019 16:37:46 +0200 Subject: [PATCH 082/527] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97186dfc..193ad749 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plug | ------------- | ----------- | ----------- | | Xamarin.Android | 4.3 | | | Xamarin.iOS | 7.0 | | -| Xamarin.Mac | 10.9 (Maveriks) | Plugin v2.1.0-pre1 | +| Xamarin.Mac | 10.9 (Maveriks) | >= v2.1.0 | | UWP | 1709 - 10.0.16299 (Fall Creators Update) | TBA | [Changelog](doc/changelog.md) From 175422a26be89fbcb0d77b322a0db3f5357421bc Mon Sep 17 00:00:00 2001 From: Adrian Seceleanu Date: Sun, 11 Aug 2019 16:39:10 +0200 Subject: [PATCH 083/527] Update scanmode_mapping.md --- doc/scanmode_mapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/scanmode_mapping.md b/doc/scanmode_mapping.md index aa9a5310..2d1dfa89 100644 --- a/doc/scanmode_mapping.md +++ b/doc/scanmode_mapping.md @@ -3,7 +3,7 @@ - + From 77def22b1a47dbd03db4cb499d177cb737a736c5 Mon Sep 17 00:00:00 2001 From: xabre Date: Sun, 11 Aug 2019 16:43:55 +0200 Subject: [PATCH 084/527] Consolidate sample app packages --- Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index ff75bf47..70580130 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -109,7 +109,7 @@ 3.1.1 - 4.1.0.581479 + 4.1.0.673156 From 050c0703f102d05105070c026aaff9588801cb8b Mon Sep 17 00:00:00 2001 From: xabre Date: Sun, 11 Aug 2019 17:00:37 +0200 Subject: [PATCH 085/527] Nuget packaging for UWP --- .build/MvvmCross.Plugin.BLE.nuspec | 2 +- .build/Plugin.BLE.nuspec | 8 +- .build/build.cake | 8 +- Source/BLE.sln | 290 +++++++++++++++--- .../MvvmCross.Plugins.BLE.UWP.csproj | 160 ++++++++++ Source/MvvmCross.Plugins.BLE.UWP/Plugin.cs | 32 ++ .../Properties/AssemblyInfo.cs | 29 ++ .../MvvmCross.Plugins.BLE.UWP.rd.xml | 33 ++ 8 files changed, 506 insertions(+), 56 deletions(-) create mode 100644 Source/MvvmCross.Plugins.BLE.UWP/MvvmCross.Plugins.BLE.UWP.csproj create mode 100644 Source/MvvmCross.Plugins.BLE.UWP/Plugin.cs create mode 100644 Source/MvvmCross.Plugins.BLE.UWP/Properties/AssemblyInfo.cs create mode 100644 Source/MvvmCross.Plugins.BLE.UWP/Properties/MvvmCross.Plugins.BLE.UWP.rd.xml diff --git a/.build/MvvmCross.Plugin.BLE.nuspec b/.build/MvvmCross.Plugin.BLE.nuspec index 96dab357..8993bb38 100644 --- a/.build/MvvmCross.Plugin.BLE.nuspec +++ b/.build/MvvmCross.Plugin.BLE.nuspec @@ -9,7 +9,7 @@ https://github.com/xabre/xamarin-bluetooth-le false - This package contains a Bluetooth Low Energy plugin for MvvmCross. It allows access to Bluetooth Low Energy functionality on Android and iOS. + This package contains a Bluetooth Low Energy plugin for MvvmCross. It allows access to Bluetooth Low Energy functionality on Android, iOS, macOS and UWP. Read the full documentation on the projects page. mvvm mvvmcross mvx xamarin monodroid Xamarin.iOS Xamarin.Android Bluetooth Low Energy BLE LE BTLE Smart ios android forms xamarinforms diff --git a/.build/Plugin.BLE.nuspec b/.build/Plugin.BLE.nuspec index b3d96c38..efc23166 100644 --- a/.build/Plugin.BLE.nuspec +++ b/.build/Plugin.BLE.nuspec @@ -9,7 +9,7 @@ https://github.com/xabre/xamarin-bluetooth-le false - Xamarin plugin to access Bluetooth Low Energy functionality on Android and iOS. + Xamarin plugin to access Bluetooth Low Energy functionality on Android, iOS, macOS and UWP. Read the full documentation on the projects page. xamarin monodroid Xamarin.iOS bluetooth BLE LE BTLE Smart xamarin.forms ios android forms xamarinforms @@ -63,7 +63,8 @@ Should prevent crashes like: #320 - + + @@ -76,5 +77,8 @@ Should prevent crashes like: #320 + + + \ No newline at end of file diff --git a/.build/build.cake b/.build/build.cake index fcf85aeb..2bbeb4ff 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -69,11 +69,13 @@ Task("Build") BuildProject("Plugin.BLE.Android", "android"); BuildProject("Plugin.BLE.iOS", "ios"); BuildProject("Plugin.BLE.macOS", "macOS"); + BuildProject("Plugin.BLE.UWP", "uwp"); - BuildProject("MvvmCross.Plugins.BLE", Path.Combine("mvx","netstandard2.0")); + BuildProject("MvvmCross.Plugins.BLE", Path.Combine("mvx", "netstandard2.0")); BuildProject("MvvmCross.Plugins.BLE.Droid", Path.Combine("mvx", "android")); - BuildProject("MvvmCross.Plugins.BLE.iOS", Path.Combine("mvx","ios")); - BuildProject("MvvmCross.Plugins.BLE.macOS", Path.Combine("mvx","macOS")); + BuildProject("MvvmCross.Plugins.BLE.iOS", Path.Combine("mvx", "ios")); + BuildProject("MvvmCross.Plugins.BLE.macOS", Path.Combine("mvx", "macOS")); + BuildProject("MvvmCross.Plugins.BLE.UWP", Path.Combine("mvx", "uwp")); }); Task("Clean").Does (() => diff --git a/Source/BLE.sln b/Source/BLE.sln index 647fc8a3..3b3990b1 100644 --- a/Source/BLE.sln +++ b/Source/BLE.sln @@ -9,7 +9,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.BLE.Droid EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.BLE.iOS", "MvvmCross.Plugins.BLE.iOS\MvvmCross.Plugins.BLE.iOS.csproj", "{CB52CFF4-F804-41A0-8408-A31365F4BA91}" ProjectSection(ProjectDependencies) = postProject - {CD9C2137-7262-49F6-831A-D3362541EDA6} = {CD9C2137-7262-49F6-831A-D3362541EDA6} + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9} = {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9} EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6508B9C0-60B2-4BD5-ACAB-7C057587CDE3}" @@ -56,7 +56,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Plugin.BLE.macOS", "Plugin. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.macOS", "BLE.Client\BLE.Client.macOS\BLE.Client.macOS.csproj", "{B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}" EndProject -Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "Plugin.BLE.iOS", "Plugin.BLE.iOS\Plugin.BLE.iOS.csproj", "{CD9C2137-7262-49F6-831A-D3362541EDA6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Plugin.BLE.iOS", "Plugin.BLE.iOS\Plugin.BLE.iOS.csproj", "{00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.BLE.macOS", "MvvmCross.Plugins.BLE.macOS\MvvmCross.Plugins.BLE.macOS.csproj", "{9530AA2D-2A0E-4AC3-93D5-28769BF43F89}" EndProject @@ -64,28 +64,34 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Plugin.BLE.UWP", "Plugin.BL EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLE.Client.UWP", "BLE.Client\BLE.Client.UWP\BLE.Client.UWP.csproj", "{25E04E05-F867-4F64-813D-AAFE0BA171B0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvvmCross.Plugins.BLE.UWP", "MvvmCross.Plugins.BLE.UWP\MvvmCross.Plugins.BLE.UWP.csproj", "{55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU Ad-Hoc|ARM = Ad-Hoc|ARM + Ad-Hoc|ARM64 = Ad-Hoc|ARM64 Ad-Hoc|iPhone = Ad-Hoc|iPhone Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator Ad-Hoc|x64 = Ad-Hoc|x64 Ad-Hoc|x86 = Ad-Hoc|x86 AppStore|Any CPU = AppStore|Any CPU AppStore|ARM = AppStore|ARM + AppStore|ARM64 = AppStore|ARM64 AppStore|iPhone = AppStore|iPhone AppStore|iPhoneSimulator = AppStore|iPhoneSimulator AppStore|x64 = AppStore|x64 AppStore|x86 = AppStore|x86 Debug|Any CPU = Debug|Any CPU Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 Debug|iPhone = Debug|iPhone Debug|iPhoneSimulator = Debug|iPhoneSimulator Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 Release|iPhone = Release|iPhone Release|iPhoneSimulator = Release|iPhoneSimulator Release|x64 = Release|x64 @@ -96,6 +102,8 @@ Global {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -108,6 +116,8 @@ Global {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.AppStore|Any CPU.Build.0 = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.AppStore|ARM.ActiveCfg = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.AppStore|ARM.Build.0 = Release|Any CPU + {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.AppStore|ARM64.Build.0 = Debug|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.AppStore|iPhone.ActiveCfg = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.AppStore|iPhone.Build.0 = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -120,6 +130,8 @@ Global {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Debug|Any CPU.Build.0 = Debug|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Debug|ARM.ActiveCfg = Debug|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Debug|ARM.Build.0 = Debug|Any CPU + {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Debug|ARM64.Build.0 = Debug|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Debug|iPhone.ActiveCfg = Debug|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Debug|iPhone.Build.0 = Debug|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -132,6 +144,8 @@ Global {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Release|Any CPU.Build.0 = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Release|ARM.ActiveCfg = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Release|ARM.Build.0 = Release|Any CPU + {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Release|ARM64.ActiveCfg = Release|Any CPU + {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Release|ARM64.Build.0 = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Release|iPhone.ActiveCfg = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Release|iPhone.Build.0 = Release|Any CPU {83F1DFFB-A653-45DD-BE81-C02374C6DB07}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -144,6 +158,8 @@ Global {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -156,6 +172,8 @@ Global {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.AppStore|Any CPU.Build.0 = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.AppStore|ARM.ActiveCfg = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.AppStore|ARM.Build.0 = Release|Any CPU + {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.AppStore|ARM64.Build.0 = Debug|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.AppStore|iPhone.ActiveCfg = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.AppStore|iPhone.Build.0 = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -168,6 +186,8 @@ Global {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Debug|ARM.ActiveCfg = Debug|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Debug|ARM.Build.0 = Debug|Any CPU + {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Debug|ARM64.Build.0 = Debug|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Debug|iPhone.ActiveCfg = Debug|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Debug|iPhone.Build.0 = Debug|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -180,6 +200,8 @@ Global {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Release|Any CPU.Build.0 = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Release|ARM.ActiveCfg = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Release|ARM.Build.0 = Release|Any CPU + {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Release|ARM64.ActiveCfg = Release|Any CPU + {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Release|ARM64.Build.0 = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Release|iPhone.ActiveCfg = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Release|iPhone.Build.0 = Release|Any CPU {6CF7D1D9-FDD9-4158-9E0F-F102027291F0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -192,6 +214,8 @@ Global {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -204,6 +228,8 @@ Global {CB52CFF4-F804-41A0-8408-A31365F4BA91}.AppStore|Any CPU.Build.0 = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.AppStore|ARM.ActiveCfg = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.AppStore|ARM.Build.0 = Release|Any CPU + {CB52CFF4-F804-41A0-8408-A31365F4BA91}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {CB52CFF4-F804-41A0-8408-A31365F4BA91}.AppStore|ARM64.Build.0 = Debug|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.AppStore|iPhone.ActiveCfg = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.AppStore|iPhone.Build.0 = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -216,6 +242,8 @@ Global {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Debug|Any CPU.Build.0 = Debug|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Debug|ARM.ActiveCfg = Debug|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Debug|ARM.Build.0 = Debug|Any CPU + {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Debug|ARM64.Build.0 = Debug|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Debug|iPhone.ActiveCfg = Debug|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Debug|iPhone.Build.0 = Debug|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -228,6 +256,8 @@ Global {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Release|Any CPU.Build.0 = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Release|ARM.ActiveCfg = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Release|ARM.Build.0 = Release|Any CPU + {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Release|ARM64.ActiveCfg = Release|Any CPU + {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Release|ARM64.Build.0 = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Release|iPhone.ActiveCfg = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Release|iPhone.Build.0 = Release|Any CPU {CB52CFF4-F804-41A0-8408-A31365F4BA91}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -240,6 +270,8 @@ Global {951ED11D-D026-449C-90DC-5027BC41FB3B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {951ED11D-D026-449C-90DC-5027BC41FB3B}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {951ED11D-D026-449C-90DC-5027BC41FB3B}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -252,6 +284,8 @@ Global {951ED11D-D026-449C-90DC-5027BC41FB3B}.AppStore|Any CPU.Build.0 = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.AppStore|ARM.ActiveCfg = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.AppStore|ARM.Build.0 = Release|Any CPU + {951ED11D-D026-449C-90DC-5027BC41FB3B}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {951ED11D-D026-449C-90DC-5027BC41FB3B}.AppStore|ARM64.Build.0 = Debug|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.AppStore|iPhone.ActiveCfg = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.AppStore|iPhone.Build.0 = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -264,6 +298,8 @@ Global {951ED11D-D026-449C-90DC-5027BC41FB3B}.Debug|Any CPU.Build.0 = Debug|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Debug|ARM.ActiveCfg = Debug|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Debug|ARM.Build.0 = Debug|Any CPU + {951ED11D-D026-449C-90DC-5027BC41FB3B}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {951ED11D-D026-449C-90DC-5027BC41FB3B}.Debug|ARM64.Build.0 = Debug|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Debug|iPhone.ActiveCfg = Debug|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Debug|iPhone.Build.0 = Debug|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -276,6 +312,8 @@ Global {951ED11D-D026-449C-90DC-5027BC41FB3B}.Release|Any CPU.Build.0 = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Release|ARM.ActiveCfg = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Release|ARM.Build.0 = Release|Any CPU + {951ED11D-D026-449C-90DC-5027BC41FB3B}.Release|ARM64.ActiveCfg = Release|Any CPU + {951ED11D-D026-449C-90DC-5027BC41FB3B}.Release|ARM64.Build.0 = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Release|iPhone.ActiveCfg = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Release|iPhone.Build.0 = Release|Any CPU {951ED11D-D026-449C-90DC-5027BC41FB3B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -288,6 +326,8 @@ Global {80C10C11-6FCB-4038-B029-A700039E8F99}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {80C10C11-6FCB-4038-B029-A700039E8F99}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {80C10C11-6FCB-4038-B029-A700039E8F99}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -300,6 +340,8 @@ Global {80C10C11-6FCB-4038-B029-A700039E8F99}.AppStore|Any CPU.Build.0 = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.AppStore|ARM.ActiveCfg = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.AppStore|ARM.Build.0 = Release|Any CPU + {80C10C11-6FCB-4038-B029-A700039E8F99}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {80C10C11-6FCB-4038-B029-A700039E8F99}.AppStore|ARM64.Build.0 = Debug|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.AppStore|iPhone.ActiveCfg = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.AppStore|iPhone.Build.0 = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -312,6 +354,8 @@ Global {80C10C11-6FCB-4038-B029-A700039E8F99}.Debug|Any CPU.Build.0 = Debug|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Debug|ARM.ActiveCfg = Debug|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Debug|ARM.Build.0 = Debug|Any CPU + {80C10C11-6FCB-4038-B029-A700039E8F99}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {80C10C11-6FCB-4038-B029-A700039E8F99}.Debug|ARM64.Build.0 = Debug|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Debug|iPhone.ActiveCfg = Debug|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Debug|iPhone.Build.0 = Debug|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -324,6 +368,8 @@ Global {80C10C11-6FCB-4038-B029-A700039E8F99}.Release|Any CPU.Build.0 = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Release|ARM.ActiveCfg = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Release|ARM.Build.0 = Release|Any CPU + {80C10C11-6FCB-4038-B029-A700039E8F99}.Release|ARM64.ActiveCfg = Release|Any CPU + {80C10C11-6FCB-4038-B029-A700039E8F99}.Release|ARM64.Build.0 = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Release|iPhone.ActiveCfg = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Release|iPhone.Build.0 = Release|Any CPU {80C10C11-6FCB-4038-B029-A700039E8F99}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -336,6 +382,8 @@ Global {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -348,6 +396,8 @@ Global {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.AppStore|Any CPU.Build.0 = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.AppStore|ARM.ActiveCfg = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.AppStore|ARM.Build.0 = Release|Any CPU + {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.AppStore|ARM64.Build.0 = Debug|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.AppStore|iPhone.ActiveCfg = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.AppStore|iPhone.Build.0 = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -360,6 +410,8 @@ Global {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Debug|Any CPU.Build.0 = Debug|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Debug|ARM.ActiveCfg = Debug|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Debug|ARM.Build.0 = Debug|Any CPU + {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Debug|ARM64.Build.0 = Debug|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Debug|iPhone.ActiveCfg = Debug|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Debug|iPhone.Build.0 = Debug|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -372,6 +424,8 @@ Global {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Release|Any CPU.Build.0 = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Release|ARM.ActiveCfg = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Release|ARM.Build.0 = Release|Any CPU + {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Release|ARM64.ActiveCfg = Release|Any CPU + {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Release|ARM64.Build.0 = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Release|iPhone.ActiveCfg = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Release|iPhone.Build.0 = Release|Any CPU {DFE97BE0-070B-43AD-BF37-50FD42B542D1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -386,6 +440,9 @@ Global {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|ARM.Build.0 = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|ARM.Deploy.0 = Release|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|ARM64.Deploy.0 = Debug|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -402,6 +459,9 @@ Global {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|ARM.ActiveCfg = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|ARM.Build.0 = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|ARM.Deploy.0 = Release|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|ARM64.Build.0 = Debug|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|ARM64.Deploy.0 = Debug|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|iPhone.ActiveCfg = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|iPhone.Build.0 = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -418,6 +478,9 @@ Global {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|ARM.ActiveCfg = Debug|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|ARM.Build.0 = Debug|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|ARM.Deploy.0 = Debug|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|ARM64.Build.0 = Debug|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|ARM64.Deploy.0 = Debug|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|iPhone.ActiveCfg = Debug|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|iPhone.Build.0 = Debug|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -434,6 +497,9 @@ Global {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|ARM.ActiveCfg = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|ARM.Build.0 = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|ARM.Deploy.0 = Release|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|ARM64.ActiveCfg = Release|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|ARM64.Build.0 = Release|Any CPU + {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|ARM64.Deploy.0 = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|iPhone.ActiveCfg = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|iPhone.Build.0 = Release|Any CPU {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|iPhone.Deploy.0 = Release|Any CPU @@ -447,6 +513,7 @@ Global {7B0E4EFD-EEB8-4CE9-9C8D-7A4BF734E9A7}.Release|x86.Deploy.0 = Release|Any CPU {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone + {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Ad-Hoc|ARM64.ActiveCfg = Ad-Hoc|iPhoneSimulator {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator @@ -455,6 +522,7 @@ Global {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.AppStore|ARM.ActiveCfg = AppStore|iPhone + {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.AppStore|ARM64.ActiveCfg = AppStore|iPhoneSimulator {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.AppStore|iPhone.ActiveCfg = AppStore|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.AppStore|iPhone.Build.0 = AppStore|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator @@ -463,6 +531,7 @@ Global {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.AppStore|x86.ActiveCfg = AppStore|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Debug|Any CPU.ActiveCfg = Debug|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Debug|ARM.ActiveCfg = Debug|iPhone + {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Debug|ARM64.ActiveCfg = Debug|iPhoneSimulator {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Debug|iPhone.ActiveCfg = Debug|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Debug|iPhone.Build.0 = Debug|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Debug|iPhone.Deploy.0 = Debug|iPhone @@ -472,6 +541,7 @@ Global {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Debug|x86.ActiveCfg = Debug|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|Any CPU.ActiveCfg = Release|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|ARM.ActiveCfg = Release|iPhone + {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|ARM64.ActiveCfg = Release|iPhoneSimulator {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|iPhone.ActiveCfg = Release|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|iPhone.Build.0 = Release|iPhone {D0FBE2BA-799B-4071-A45D-8FB037006C9C}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator @@ -482,6 +552,8 @@ Global {F8374603-78C8-4CB8-A622-EC9226424474}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {F8374603-78C8-4CB8-A622-EC9226424474}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {F8374603-78C8-4CB8-A622-EC9226424474}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -494,6 +566,8 @@ Global {F8374603-78C8-4CB8-A622-EC9226424474}.AppStore|Any CPU.Build.0 = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.AppStore|ARM.ActiveCfg = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.AppStore|ARM.Build.0 = Release|Any CPU + {F8374603-78C8-4CB8-A622-EC9226424474}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {F8374603-78C8-4CB8-A622-EC9226424474}.AppStore|ARM64.Build.0 = Debug|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.AppStore|iPhone.ActiveCfg = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.AppStore|iPhone.Build.0 = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -506,6 +580,8 @@ Global {F8374603-78C8-4CB8-A622-EC9226424474}.Debug|Any CPU.Build.0 = Debug|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Debug|ARM.ActiveCfg = Debug|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Debug|ARM.Build.0 = Debug|Any CPU + {F8374603-78C8-4CB8-A622-EC9226424474}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {F8374603-78C8-4CB8-A622-EC9226424474}.Debug|ARM64.Build.0 = Debug|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Debug|iPhone.ActiveCfg = Debug|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Debug|iPhone.Build.0 = Debug|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -518,6 +594,8 @@ Global {F8374603-78C8-4CB8-A622-EC9226424474}.Release|Any CPU.Build.0 = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Release|ARM.ActiveCfg = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Release|ARM.Build.0 = Release|Any CPU + {F8374603-78C8-4CB8-A622-EC9226424474}.Release|ARM64.ActiveCfg = Release|Any CPU + {F8374603-78C8-4CB8-A622-EC9226424474}.Release|ARM64.Build.0 = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Release|iPhone.ActiveCfg = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Release|iPhone.Build.0 = Release|Any CPU {F8374603-78C8-4CB8-A622-EC9226424474}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -530,6 +608,8 @@ Global {56531910-6309-4F1D-A12B-F69E2914FAE6}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {56531910-6309-4F1D-A12B-F69E2914FAE6}.Ad-Hoc|ARM64.ActiveCfg = Release|Any CPU + {56531910-6309-4F1D-A12B-F69E2914FAE6}.Ad-Hoc|ARM64.Build.0 = Release|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -542,6 +622,8 @@ Global {56531910-6309-4F1D-A12B-F69E2914FAE6}.AppStore|Any CPU.Build.0 = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.AppStore|ARM.ActiveCfg = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.AppStore|ARM.Build.0 = Debug|Any CPU + {56531910-6309-4F1D-A12B-F69E2914FAE6}.AppStore|ARM64.ActiveCfg = Release|Any CPU + {56531910-6309-4F1D-A12B-F69E2914FAE6}.AppStore|ARM64.Build.0 = Release|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.AppStore|iPhone.ActiveCfg = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.AppStore|iPhone.Build.0 = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -554,6 +636,8 @@ Global {56531910-6309-4F1D-A12B-F69E2914FAE6}.Debug|Any CPU.Build.0 = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Debug|ARM.ActiveCfg = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Debug|ARM.Build.0 = Debug|Any CPU + {56531910-6309-4F1D-A12B-F69E2914FAE6}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {56531910-6309-4F1D-A12B-F69E2914FAE6}.Debug|ARM64.Build.0 = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Debug|iPhone.ActiveCfg = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Debug|iPhone.Build.0 = Debug|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -566,6 +650,8 @@ Global {56531910-6309-4F1D-A12B-F69E2914FAE6}.Release|Any CPU.Build.0 = Release|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Release|ARM.ActiveCfg = Release|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Release|ARM.Build.0 = Release|Any CPU + {56531910-6309-4F1D-A12B-F69E2914FAE6}.Release|ARM64.ActiveCfg = Release|Any CPU + {56531910-6309-4F1D-A12B-F69E2914FAE6}.Release|ARM64.Build.0 = Release|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Release|iPhone.ActiveCfg = Release|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Release|iPhone.Build.0 = Release|Any CPU {56531910-6309-4F1D-A12B-F69E2914FAE6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -578,6 +664,8 @@ Global {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -590,6 +678,8 @@ Global {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.AppStore|Any CPU.Build.0 = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.AppStore|ARM.ActiveCfg = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.AppStore|ARM.Build.0 = Release|Any CPU + {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.AppStore|ARM64.Build.0 = Debug|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.AppStore|iPhone.ActiveCfg = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.AppStore|iPhone.Build.0 = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -602,6 +692,8 @@ Global {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Debug|Any CPU.Build.0 = Debug|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Debug|ARM.ActiveCfg = Debug|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Debug|ARM.Build.0 = Debug|Any CPU + {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Debug|ARM64.Build.0 = Debug|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Debug|iPhone.ActiveCfg = Debug|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Debug|iPhone.Build.0 = Debug|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -614,6 +706,8 @@ Global {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Release|Any CPU.Build.0 = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Release|ARM.ActiveCfg = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Release|ARM.Build.0 = Release|Any CPU + {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Release|ARM64.ActiveCfg = Release|Any CPU + {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Release|ARM64.Build.0 = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Release|iPhone.ActiveCfg = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Release|iPhone.Build.0 = Release|Any CPU {239AD7CE-149F-4465-9BAF-7D60373BE5CB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -626,6 +720,8 @@ Global {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -638,6 +734,8 @@ Global {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|Any CPU.Build.0 = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|ARM.ActiveCfg = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|ARM.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|ARM64.Build.0 = Debug|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|iPhone.ActiveCfg = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|iPhone.Build.0 = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -650,6 +748,8 @@ Global {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|Any CPU.Build.0 = Debug|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|ARM.ActiveCfg = Debug|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|ARM.Build.0 = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|ARM64.Build.0 = Debug|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|iPhone.ActiveCfg = Debug|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|iPhone.Build.0 = Debug|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -662,6 +762,8 @@ Global {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|Any CPU.Build.0 = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|ARM.ActiveCfg = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|ARM.Build.0 = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|ARM64.ActiveCfg = Release|Any CPU + {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|ARM64.Build.0 = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|iPhone.ActiveCfg = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|iPhone.Build.0 = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -670,58 +772,68 @@ Global {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|x64.Build.0 = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|x86.ActiveCfg = Release|Any CPU {B202A1F9-B9B8-4F5F-A011-C8EA5E485CED}.Release|x86.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|ARM.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|x64.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Ad-Hoc|x86.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|Any CPU.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|ARM.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|ARM.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|iPhone.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|x64.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|x64.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|x86.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.AppStore|x86.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|ARM.Build.0 = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|iPhone.Build.0 = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|x64.ActiveCfg = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|x64.Build.0 = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|x86.ActiveCfg = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Debug|x86.Build.0 = Debug|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|Any CPU.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|ARM.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|ARM.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|iPhone.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|iPhone.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|x64.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|x64.Build.0 = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|x86.ActiveCfg = Release|Any CPU - {CD9C2137-7262-49F6-831A-D3362541EDA6}.Release|x86.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|Any CPU.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|ARM.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|ARM.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|ARM64.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|iPhone.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|x64.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|x64.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|x86.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.AppStore|x86.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|ARM.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|ARM.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|ARM64.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|iPhone.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|x64.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|x64.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|x86.ActiveCfg = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Debug|x86.Build.0 = Debug|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|Any CPU.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|ARM.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|ARM.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|ARM64.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|ARM64.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|iPhone.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|iPhone.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|x64.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|x64.Build.0 = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|x86.ActiveCfg = Release|Any CPU + {00F27EFE-B8A3-4FD3-BC1F-1179FA7D91B9}.Release|x86.Build.0 = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -734,6 +846,8 @@ Global {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.AppStore|Any CPU.Build.0 = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.AppStore|ARM.ActiveCfg = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.AppStore|ARM.Build.0 = Release|Any CPU + {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.AppStore|ARM64.Build.0 = Debug|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.AppStore|iPhone.ActiveCfg = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.AppStore|iPhone.Build.0 = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -746,6 +860,8 @@ Global {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Debug|Any CPU.Build.0 = Debug|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Debug|ARM.ActiveCfg = Debug|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Debug|ARM.Build.0 = Debug|Any CPU + {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Debug|ARM64.Build.0 = Debug|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Debug|iPhone.ActiveCfg = Debug|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Debug|iPhone.Build.0 = Debug|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -758,6 +874,8 @@ Global {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Release|Any CPU.Build.0 = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Release|ARM.ActiveCfg = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Release|ARM.Build.0 = Release|Any CPU + {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Release|ARM64.ActiveCfg = Release|Any CPU + {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Release|ARM64.Build.0 = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Release|iPhone.ActiveCfg = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Release|iPhone.Build.0 = Release|Any CPU {9530AA2D-2A0E-4AC3-93D5-28769BF43F89}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -770,6 +888,8 @@ Global {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|ARM.ActiveCfg = Release|ARM {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|ARM.Build.0 = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -782,6 +902,8 @@ Global {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|Any CPU.Build.0 = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|ARM.ActiveCfg = Release|ARM {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|ARM.Build.0 = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|ARM64.Build.0 = Debug|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|iPhone.ActiveCfg = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|iPhone.Build.0 = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -794,6 +916,8 @@ Global {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|Any CPU.Build.0 = Debug|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|ARM.ActiveCfg = Debug|ARM {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|ARM.Build.0 = Debug|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|ARM64.Build.0 = Debug|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|iPhone.ActiveCfg = Debug|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|iPhone.Build.0 = Debug|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU @@ -806,6 +930,8 @@ Global {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|Any CPU.Build.0 = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|ARM.ActiveCfg = Release|ARM {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|ARM.Build.0 = Release|ARM + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|ARM64.ActiveCfg = Release|Any CPU + {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|ARM64.Build.0 = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|iPhone.ActiveCfg = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|iPhone.Build.0 = Release|Any CPU {CCD85512-A2D7-4076-B31D-7A24829058AF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU @@ -820,6 +946,9 @@ Global {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|ARM.ActiveCfg = Release|ARM {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|ARM.Build.0 = Release|ARM {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|ARM.Deploy.0 = Release|ARM + {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|ARM64.ActiveCfg = Debug|x64 + {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|ARM64.Build.0 = Debug|x64 + {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|ARM64.Deploy.0 = Debug|x64 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|iPhone.Build.0 = Release|x64 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 @@ -838,6 +967,9 @@ Global {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|ARM.ActiveCfg = Release|ARM {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|ARM.Build.0 = Release|ARM {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|ARM.Deploy.0 = Release|ARM + {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|ARM64.ActiveCfg = Debug|x64 + {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|ARM64.Build.0 = Debug|x64 + {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|ARM64.Deploy.0 = Debug|x64 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|iPhone.ActiveCfg = Release|x64 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|iPhone.Build.0 = Release|x64 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.AppStore|iPhone.Deploy.0 = Release|x64 @@ -854,6 +986,7 @@ Global {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Debug|ARM.ActiveCfg = Debug|ARM {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Debug|ARM.Build.0 = Debug|ARM {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Debug|ARM.Deploy.0 = Debug|ARM + {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Debug|ARM64.ActiveCfg = Debug|x86 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Debug|iPhone.ActiveCfg = Debug|x86 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Debug|x64.ActiveCfg = Debug|x64 @@ -866,6 +999,7 @@ Global {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|ARM.ActiveCfg = Release|ARM {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|ARM.Build.0 = Release|ARM {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|ARM.Deploy.0 = Release|ARM + {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|ARM64.ActiveCfg = Release|x86 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|iPhone.ActiveCfg = Release|x86 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|iPhoneSimulator.ActiveCfg = Release|x86 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|x64.ActiveCfg = Release|x64 @@ -874,6 +1008,62 @@ Global {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|x86.ActiveCfg = Release|x86 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|x86.Build.0 = Release|x86 {25E04E05-F867-4F64-813D-AAFE0BA171B0}.Release|x86.Deploy.0 = Release|x86 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|ARM.ActiveCfg = Release|ARM + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|ARM.Build.0 = Release|ARM + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|ARM64.ActiveCfg = Release|ARM64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|ARM64.Build.0 = Release|ARM64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|x64.Build.0 = Release|x64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|x86.ActiveCfg = Release|x86 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Ad-Hoc|x86.Build.0 = Release|x86 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|Any CPU.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|ARM.ActiveCfg = Release|ARM + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|ARM.Build.0 = Release|ARM + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|ARM64.ActiveCfg = Release|ARM64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|ARM64.Build.0 = Release|ARM64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|iPhone.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|x64.ActiveCfg = Release|x64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|x64.Build.0 = Release|x64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|x86.ActiveCfg = Release|x86 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.AppStore|x86.Build.0 = Release|x86 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|ARM.ActiveCfg = Debug|ARM + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|ARM.Build.0 = Debug|ARM + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|ARM64.Build.0 = Debug|ARM64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|iPhone.Build.0 = Debug|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|x64.ActiveCfg = Debug|x64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|x64.Build.0 = Debug|x64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|x86.ActiveCfg = Debug|x86 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Debug|x86.Build.0 = Debug|x86 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|Any CPU.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|ARM.ActiveCfg = Release|ARM + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|ARM.Build.0 = Release|ARM + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|ARM64.ActiveCfg = Release|ARM64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|ARM64.Build.0 = Release|ARM64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|iPhone.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|iPhone.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|x64.ActiveCfg = Release|x64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|x64.Build.0 = Release|x64 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|x86.ActiveCfg = Release|x86 + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/MvvmCross.Plugins.BLE.UWP/MvvmCross.Plugins.BLE.UWP.csproj b/Source/MvvmCross.Plugins.BLE.UWP/MvvmCross.Plugins.BLE.UWP.csproj new file mode 100644 index 00000000..26587bd4 --- /dev/null +++ b/Source/MvvmCross.Plugins.BLE.UWP/MvvmCross.Plugins.BLE.UWP.csproj @@ -0,0 +1,160 @@ + + + + + Debug + AnyCPU + {55C6D8FB-AFD2-4D6D-9D8F-BA693F4B67D0} + Library + Properties + MvvmCross.Plugins.BLE.UWP + MvvmCross.Plugins.BLE.UWP + en-US + UAP + 10.0.17763.0 + 10.0.16299.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + prompt + 4 + + + x86 + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + false + prompt + + + x86 + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + false + prompt + + + ARM + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + false + prompt + + + ARM + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + false + prompt + + + ARM64 + true + bin\ARM64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + false + prompt + + + ARM64 + bin\ARM64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + false + prompt + + + x64 + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + false + prompt + + + x64 + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + false + prompt + + + PackageReference + + + + + + + + + 6.2.8 + + + 6.3.1 + + + + + {83f1dffb-a653-45dd-be81-c02374c6db07} + MvvmCross.Plugins.BLE + + + {56531910-6309-4f1d-a12b-f69e2914fae6} + Plugin.BLE.Abstractions + + + {ccd85512-a2d7-4076-b31d-7a24829058af} + Plugin.BLE.UWP + + + + 14.0 + + + + \ No newline at end of file diff --git a/Source/MvvmCross.Plugins.BLE.UWP/Plugin.cs b/Source/MvvmCross.Plugins.BLE.UWP/Plugin.cs new file mode 100644 index 00000000..92dcca5c --- /dev/null +++ b/Source/MvvmCross.Plugins.BLE.UWP/Plugin.cs @@ -0,0 +1,32 @@ +using MvvmCross; +using MvvmCross.IoC; +using MvvmCross.Logging; +using MvvmCross.Plugin; +using Plugin.BLE; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; + +[assembly: Preserve] + +namespace MvvmCross.Plugins.BLE.UWP +{ + [Preserve(AllMembers = true)] + [MvxPlugin] + public class Plugin + : IMvxPlugin + { + + public Plugin() + { + var log = Mvx.IoCProvider.Resolve(); + Trace.TraceImplementation = log.Trace; + } + + public void Load() + { + Trace.Message("Loading bluetooth low energy plugin"); + Mvx.IoCProvider.LazyConstructAndRegisterSingleton(() => CrossBluetoothLE.Current); + Mvx.IoCProvider.LazyConstructAndRegisterSingleton(() => Mvx.IoCProvider.Resolve().Adapter); + } + } +} \ No newline at end of file diff --git a/Source/MvvmCross.Plugins.BLE.UWP/Properties/AssemblyInfo.cs b/Source/MvvmCross.Plugins.BLE.UWP/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..df64fcbe --- /dev/null +++ b/Source/MvvmCross.Plugins.BLE.UWP/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MvvmCross.Plugins.BLE.UWP")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MvvmCross.Plugins.BLE.UWP")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/Source/MvvmCross.Plugins.BLE.UWP/Properties/MvvmCross.Plugins.BLE.UWP.rd.xml b/Source/MvvmCross.Plugins.BLE.UWP/Properties/MvvmCross.Plugins.BLE.UWP.rd.xml new file mode 100644 index 00000000..3a918f01 --- /dev/null +++ b/Source/MvvmCross.Plugins.BLE.UWP/Properties/MvvmCross.Plugins.BLE.UWP.rd.xml @@ -0,0 +1,33 @@ + + + + + + + + + From f775eeab7c95bad3e8422242c96ad9c6158ba0ac Mon Sep 17 00:00:00 2001 From: xabre Date: Sun, 11 Aug 2019 17:02:21 +0200 Subject: [PATCH 086/527] Updated version to 2.2.0-pre1 --- .build/MvvmCross.Plugin.BLE.nuspec | 12 +++++++----- .build/Plugin.BLE.nuspec | 4 +++- .../Properties/AssemblyInfo.cs | 4 ++-- .../Properties/AssemblyInfo.cs | 4 ++-- .../Properties/AssemblyInfo.cs | 4 ++-- .../PluginNugetTest.iOS/Properties/AssemblyInfo.cs | 4 ++-- .../PluginNugetTest/Properties/AssemblyInfo.cs | 4 ++-- doc/changelog.md | 5 +++++ 8 files changed, 25 insertions(+), 16 deletions(-) diff --git a/.build/MvvmCross.Plugin.BLE.nuspec b/.build/MvvmCross.Plugin.BLE.nuspec index 8993bb38..9dcae3c1 100644 --- a/.build/MvvmCross.Plugin.BLE.nuspec +++ b/.build/MvvmCross.Plugin.BLE.nuspec @@ -1,7 +1,7 @@ MvvmCross.Plugin.BLE - 2.1.0 + 2.2.0-pre1 Bluetooth LE Plugin for MvvmCross Adrian Seceleanu, Sven-Michael Stübe Adrian Seceleanu, Sven-Michael Stübe @@ -15,6 +15,8 @@ mvvm mvvmcross mvx xamarin monodroid Xamarin.iOS Xamarin.Android Bluetooth Low Energy BLE LE BTLE Smart ios android forms xamarinforms https://raw.githubusercontent.com/xabre/xamarin-bluetooth-le/master/icon_small.png + [2.2.0-pre1] + - UWP support [2.1.0] - Use IReadOnlyLists for Services/ Charactersitics/ Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices Should prevent crashes like: #320 @@ -55,19 +57,19 @@ Should prevent crashes like: #320 - + - + - + - + diff --git a/.build/Plugin.BLE.nuspec b/.build/Plugin.BLE.nuspec index efc23166..922943a4 100644 --- a/.build/Plugin.BLE.nuspec +++ b/.build/Plugin.BLE.nuspec @@ -1,7 +1,7 @@ Plugin.BLE - 2.1.0 + 2.2.0-pre1 Bluetooth LE Plugin for Xamarin Adrian Seceleanu, Sven-Michael Stübe Adrian Seceleanu, Sven-Michael Stübe @@ -15,6 +15,8 @@ xamarin monodroid Xamarin.iOS bluetooth BLE LE BTLE Smart xamarin.forms ios android forms xamarinforms https://raw.githubusercontent.com/xabre/xamarin-bluetooth-le/master/icon_small.png + [2.2.0-pre1] + - UWP support [2.1.0] - Use IReadOnlyLists for Services/ Charactersitics/ Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices Should prevent crashes like: #320 diff --git a/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs index 3b8836fb..1346b6de 100644 --- a/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0")] -[assembly: AssemblyVersion("2.1.0")] +// [assembly: AssemblyVersion("2.2.0-pre1")] +[assembly: AssemblyVersion("2.2.0-pre1")] [assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs index 4d1c3cc9..e218eb60 100644 --- a/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0")] -[assembly: AssemblyVersion("2.1.0")] +// [assembly: AssemblyVersion("2.2.0-pre1")] +[assembly: AssemblyVersion("2.2.0-pre1")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs index f0f7043d..99297dc6 100644 --- a/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0")] -[assembly: AssemblyVersion("2.1.0")] +// [assembly: AssemblyVersion("2.2.0-pre1")] +[assembly: AssemblyVersion("2.2.0-pre1")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs index a4ec6751..8f7d72f4 100644 --- a/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0")] -[assembly: AssemblyVersion("2.1.0")] +// [assembly: AssemblyVersion("2.2.0-pre1")] +[assembly: AssemblyVersion("2.2.0-pre1")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs index 4dfbe52a..8268ba78 100644 --- a/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.0")] -[assembly: AssemblyVersion("2.1.0")] +// [assembly: AssemblyVersion("2.2.0-pre1")] +[assembly: AssemblyVersion("2.2.0-pre1")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/doc/changelog.md b/doc/changelog.md index 7e3bc3d2..50d38987 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,5 +1,10 @@ # Changelog +## 2.2.0 UWP +#### 2.2.0-pre.1 + - UWP support pre-release + + ## 2.1.0 MacOS - Use IReadOnlyLists for Services/Charactersitics/Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices Should prevent crashes like: #320 From b4507fe039aee728a9490336b7c231cb4ec877bc Mon Sep 17 00:00:00 2001 From: xabre Date: Sun, 11 Aug 2019 17:09:11 +0200 Subject: [PATCH 087/527] Updated nuspec --- .build/Plugin.BLE.nuspec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.build/Plugin.BLE.nuspec b/.build/Plugin.BLE.nuspec index 922943a4..17b86ac5 100644 --- a/.build/Plugin.BLE.nuspec +++ b/.build/Plugin.BLE.nuspec @@ -80,7 +80,6 @@ Should prevent crashes like: #320 - - + \ No newline at end of file From 59850bae252d2fa69511fbdff40a4696708b1f8d Mon Sep 17 00:00:00 2001 From: xabre Date: Sun, 11 Aug 2019 20:34:52 +0200 Subject: [PATCH 088/527] Extended sample app. Added picker for scan mode and characteristic write type --- .../Pages/CharacteristicDetailPage.xaml | 110 +++++---- .../BLE.Client/Pages/DeviceListPage.xaml | 212 ++++++++++-------- .../CharacteristicDetailViewModel.cs | 26 ++- .../ViewModels/DeviceListViewModel.cs | 12 +- 4 files changed, 224 insertions(+), 136 deletions(-) diff --git a/Source/BLE.Client/BLE.Client/Pages/CharacteristicDetailPage.xaml b/Source/BLE.Client/BLE.Client/Pages/CharacteristicDetailPage.xaml index 305a9f90..2d03acae 100644 --- a/Source/BLE.Client/BLE.Client/Pages/CharacteristicDetailPage.xaml +++ b/Source/BLE.Client/BLE.Client/Pages/CharacteristicDetailPage.xaml @@ -1,46 +1,72 @@  - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml b/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml index 3064197f..1e535077 100644 --- a/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml +++ b/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml @@ -1,98 +1,130 @@ - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - + + + + + + + + + + - - + + - -
ValueiOSiOS/macOS Android UWP
From ce2dd84fe619d333f4e3538ca01aff15c268ad76 Mon Sep 17 00:00:00 2001 From: Dave Humphreys Date: Fri, 25 Sep 2020 15:41:19 +0100 Subject: [PATCH 105/527] Updated Mac project to output the same filename as the other platforms (#431) --- Source/Plugin.BLE.macOS/Plugin.BLE.macOS.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE.macOS/Plugin.BLE.macOS.csproj b/Source/Plugin.BLE.macOS/Plugin.BLE.macOS.csproj index 4e62e06b..9fd8f5cb 100644 --- a/Source/Plugin.BLE.macOS/Plugin.BLE.macOS.csproj +++ b/Source/Plugin.BLE.macOS/Plugin.BLE.macOS.csproj @@ -7,7 +7,7 @@ {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Plugin.BLE.macOS - Plugin.BLE.macOS + Plugin.BLE v2.0 Xamarin.Mac Resources From 9d4ec4d4f718971a1aac0ef8bf986b8bfa492de9 Mon Sep 17 00:00:00 2001 From: Martin Kuckert Date: Fri, 25 Sep 2020 16:43:19 +0200 Subject: [PATCH 106/527] Adds locking to DeviceBase.KnownServices (#407) * Adds locking to DeviceBase.KnownServices * Sets language version to C# 7.1 to be explicit --- Source/Plugin.BLE.Abstractions/DeviceBase.cs | 40 ++++++++++++------- .../Plugin.BLE.Abstractions.csproj | 1 + 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/Source/Plugin.BLE.Abstractions/DeviceBase.cs b/Source/Plugin.BLE.Abstractions/DeviceBase.cs index a922f7c5..48fbdfc0 100644 --- a/Source/Plugin.BLE.Abstractions/DeviceBase.cs +++ b/Source/Plugin.BLE.Abstractions/DeviceBase.cs @@ -36,7 +36,7 @@ public static void CancelEverythingAndReInitialize(this ICancellationMaster canc public abstract class DeviceBase : IDevice, ICancellationMaster { protected readonly IAdapter Adapter; - protected readonly List KnownServices = new List(); + private readonly List KnownServices = new List(); public Guid Id { get; protected set; } public string Name { get; protected set; } public int Rssi { get; protected set; } @@ -53,15 +53,24 @@ protected DeviceBase(IAdapter adapter) public async Task> GetServicesAsync(CancellationToken cancellationToken = default) { - if (!KnownServices.Any()) + lock (KnownServices) { - using (var source = this.GetCombinedSource(cancellationToken)) + if (KnownServices.Any()) { - KnownServices.AddRange(await GetServicesNativeAsync()); + return KnownServices.ToArray(); } } - return KnownServices; + using (var source = this.GetCombinedSource(cancellationToken)) + { + var services = await GetServicesNativeAsync(); + + lock (KnownServices) + { + KnownServices.AddRange(services); + return KnownServices.ToArray(); + } + } } public async Task GetServiceAsync(Guid id, CancellationToken cancellationToken = default) @@ -100,19 +109,22 @@ public void ClearServices() { this.CancelEverythingAndReInitialize(); - foreach (var service in KnownServices) + lock (KnownServices) { - try + foreach (var service in KnownServices) { - service.Dispose(); + try + { + service.Dispose(); + } + catch (Exception ex) + { + Trace.Message("Exception while cleanup of service: {0}", ex.Message); + } } - catch (Exception ex) - { - Trace.Message("Exception while cleanup of service: {0}", ex.Message); - } - } - KnownServices.Clear(); + KnownServices.Clear(); + } } public override bool Equals(object other) diff --git a/Source/Plugin.BLE.Abstractions/Plugin.BLE.Abstractions.csproj b/Source/Plugin.BLE.Abstractions/Plugin.BLE.Abstractions.csproj index 17d3b29f..678cd507 100644 --- a/Source/Plugin.BLE.Abstractions/Plugin.BLE.Abstractions.csproj +++ b/Source/Plugin.BLE.Abstractions/Plugin.BLE.Abstractions.csproj @@ -1,5 +1,6 @@  netstandard2.0 + 7.1 \ No newline at end of file From 5169eab160d087364d074a0849f9e5d563d15586 Mon Sep 17 00:00:00 2001 From: Martin Kuckert Date: Mon, 1 Mar 2021 10:37:31 +0100 Subject: [PATCH 107/527] Correctly closes a gatt when a connection attempt is cancelled+ The gatt handles are leaking otherwise, resulting in too many open handles. Android will block further attempts if an app has 32 open gatts. --- Source/Plugin.BLE.Android/Device.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/Plugin.BLE.Android/Device.cs b/Source/Plugin.BLE.Android/Device.cs index c93bcf3b..9309c0dd 100644 --- a/Source/Plugin.BLE.Android/Device.cs +++ b/Source/Plugin.BLE.Android/Device.cs @@ -97,7 +97,7 @@ public void Connect(ConnectParameters connectParameters, CancellationToken cance { var connectGatt = BluetoothDevice.ConnectGatt(Application.Context, connectParameters.AutoConnect, _gattCallback); _connectCancellationTokenRegistration.Dispose(); - _connectCancellationTokenRegistration = cancellationToken.Register(() => connectGatt.Disconnect()); + _connectCancellationTokenRegistration = cancellationToken.Register(() => DisconnectAndClose(connectGatt)); } } @@ -110,7 +110,7 @@ private void ConnectToGattForceBleTransportAPI(bool autoconnect, CancellationTok //no transport mode before lollipop, it will probably not work... gattCallBackError 133 again alas var connectGatt = BluetoothDevice.ConnectGatt(Application.Context, autoconnect, _gattCallback); _connectCancellationTokenRegistration.Dispose(); - _connectCancellationTokenRegistration = cancellationToken.Register(() => connectGatt.Disconnect()); + _connectCancellationTokenRegistration = cancellationToken.Register(() => DisconnectAndClose(connectGatt)); } else if (Build.VERSION.SdkInt < BuildVersionCodes.M) { @@ -127,9 +127,14 @@ private void ConnectToGattForceBleTransportAPI(bool autoconnect, CancellationTok { var connectGatt = BluetoothDevice.ConnectGatt(Application.Context, autoconnect, _gattCallback, BluetoothTransports.Le); _connectCancellationTokenRegistration.Dispose(); - _connectCancellationTokenRegistration = cancellationToken.Register(() => connectGatt.Disconnect()); + _connectCancellationTokenRegistration = cancellationToken.Register(() => DisconnectAndClose(connectGatt)); } + } + private void DisconnectAndClose(BluetoothGatt gatt) + { + gatt.Disconnect(); + gatt.Close(); } /// From 7b4027463962779b030f8b3d20fbea4393e9aa08 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 15 Mar 2021 20:01:33 +0100 Subject: [PATCH 108/527] build.cake: fix an error (#492) Error: Error(s) occurred when compiling build script: .build/build.cake(82,42): error CS1503: Argument 2: cannot convert from 'bool' to 'Cake.Common.IO.DeleteDirectorySettings' --- .build/build.cake | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.build/build.cake b/.build/build.cake index fcf85aeb..63286808 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -23,10 +23,10 @@ void BuildProject(string projectName, string targetSubDir) var project = GetProjectDir(projectName); var outputDir = BuildTargetDir.Combine(targetSubDir); MSBuild(project, settings => settings - .SetConfiguration("Release") + .SetConfiguration("Release") .WithTarget("Build") .UseToolVersion(MSBuildToolVersion.VS2019) - .SetMSBuildPlatform(MSBuildPlatform.x86) + .SetMSBuildPlatform(MSBuildPlatform.x86) .WithProperty("OutDir", outputDir.FullPath)); } @@ -49,7 +49,7 @@ void BuildProject(string projectName, string targetSubDir) Task("Restore") .Does(() => -{ +{ var solutions = GetFiles("../Source/*.sln"); // Restore all NuGet packages. foreach(var solution in solutions) @@ -76,16 +76,16 @@ Task("Build") BuildProject("MvvmCross.Plugins.BLE.macOS", Path.Combine("mvx","macOS")); }); -Task("Clean").Does (() => +Task("Clean").Does (() => { if (DirectoryExists (BuildTargetDir)) - DeleteDirectory (BuildTargetDir, true); + DeleteDirectory (BuildTargetDir, new DeleteDirectorySettings {Recursive = true}); CleanDirectories ("./**/bin"); CleanDirectories ("./**/obj"); }); -// ./build.ps1 -Target UpdateVersion -newVersion="2.0.1" +// ./build.ps1 -Target UpdateVersion -newVersion="2.0.1" Task("UpdateVersion") .Does(() => { var version = Argument("newVersion", ""); @@ -95,32 +95,32 @@ Task("UpdateVersion") { throw new ArgumentNullException(nameof(version)); } - + ReplaceRegexInFiles("./**/AssemblyInfo.cs", "(?<=AssemblyVersion\\(\")(.+?)(?=\"\\))", cleanVersion); ReplaceRegexInFiles("./**/*.nuspec", "(?<=)(.+?)(?=)", cleanVersion); ReplaceRegexInFiles("./**/*.nuspec", "(?<=)", cleanVersion); - + }); Task("Pack") .IsDependentOn("Build") .Does(() => - { + { foreach(var nuspec in NuspecFiles) { NuGetPack(nuspec, new NuGetPackSettings() - { + { OutputDirectory = NuGetTargetDir, WorkingDirectory = BuildTargetDir, NoWorkingDirectory = false }); - } + } }); Task("Publish") .IsDependentOn("Pack") .Does(() => - { + { var packages = new [] { GetFiles("nuget/Plugin.BLE*.nupkg").LastOrDefault(), GetFiles("nuget/MvvmCross*.nupkg").LastOrDefault() }; foreach(var nupack in packages) From c22bdacdb91b2f220727137b927ce8c5415f5c63 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 15 Mar 2021 20:05:28 +0100 Subject: [PATCH 109/527] build.cake: fix two warnings (#492) The assembly 'Cake.Git, Version=0.21.0.0, Culture=neutral, PublicKeyToken=null' is referencing an older version of Cake.Core (0.33.0). For best compatibility it should target Cake.Core version 1.0.0. The assembly 'Cake.FileHelpers, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null' is referencing an older version of Cake.Core (0.33.0). For best compatibility it should target Cake.Core version 1.0.0. --- .build/build.cake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.build/build.cake b/.build/build.cake index 63286808..d87e6805 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -1,5 +1,5 @@ -#addin nuget:?package=Cake.Git&version=0.21 -#addin nuget:?package=Cake.FileHelpers&version=3.2.0 +#addin nuget:?package=Cake.Git&version=1.0.1 +#addin nuget:?package=Cake.FileHelpers&version=4.0.0 using Path = System.IO.Path; using System.Xml.Linq; From 752aec544ecf92bc52f9c3a6911e86a51347464d Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 15 Mar 2021 20:34:08 +0100 Subject: [PATCH 110/527] README: update build instructions (#492) --- README.md | 48 ++++++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index e38617b0..c45c9d49 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Bluetooth LE plugin for Xamarin ![Build Status](https://app.bitrise.io/app/3fe54d0a5f43c2bf/status.svg?token=i9LUY4rIecZWd_3j7hwXgw) +# Bluetooth LE plugin for Xamarin ![Build Status](https://app.bitrise.io/app/3fe54d0a5f43c2bf/status.svg?token=i9LUY4rIecZWd_3j7hwXgw) -Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plugin is loosely based on the BLE implementation of [Monkey Robotics](https://github.com/xamarin/Monkey.Robotics). +Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plugin is loosely based on the BLE implementation of [Monkey Robotics](https://github.com/xamarin/Monkey.Robotics). **Important Note:** With the term *"vanilla"* we mean the non MvvmCross/pure Xamarin version. You **can** use it without MvvmCross, if you download the vanilla package. @@ -11,7 +11,7 @@ Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plug | Xamarin.Android | 4.3 | | | Xamarin.iOS | 7.0 | | | Xamarin.Mac | 10.9 (Maveriks) | >= v2.1.0 | -| UWP | 1709 - 10.0.16299 (Fall Creators Update) | TBA | +| UWP | 1709 - 10.0.16299 (Fall Creators Update) | TBA | [Changelog](doc/changelog.md) @@ -31,7 +31,7 @@ Install-Package Plugin.BLE -Pre ``` Install-Package MvvmCross.Plugin.BLE -// or +// or Install-Package MvvmCross.Plugin.BLE -Pre ``` @@ -61,22 +61,22 @@ On iOS you must add the following keys to your `Info.plist` bluetooth-central - + bluetooth-peripheral - + NSBluetoothPeripheralUsageDescription YOUR CUSTOM MESSAGE - + NSBluetoothAlwaysUsageDescription YOUR CUSTOM MESSAGE ## Sample app -We provide a sample Xamarin.Forms app, that is a basic bluetooth LE scanner. With this app, it's possible to +We provide a sample Xamarin.Forms app, that is a basic bluetooth LE scanner. With this app, it's possible to - check the ble status - discover devices @@ -130,7 +130,7 @@ var state = ble.State; ``` You can also listen for State changes. So you can react if the user turns on/off bluetooth on you smartphone. ```csharp -ble.StateChanged += (s, e) => +ble.StateChanged += (s, e) => { Debug.WriteLine($"The bluetooth state changed to {e.NewState}"); }; @@ -154,7 +154,7 @@ Set `adapter.ScanMode` to specify scan mode. It must be set **before** calling ` `ConnectToDeviceAsync` returns a Task that finishes if the device has been connected successful. Otherwise a `DeviceConnectionException` gets thrown. ```csharp -try +try { await _adapter.ConnectToDeviceAsync(device); } @@ -166,12 +166,12 @@ catch(DeviceConnectionException e) #### Connect to known Device `ConnectToKnownDeviceAsync` can connect to a device with a given GUID. This means that if the device GUID is known, no scan is necessary to connect to a device. This can be very useful for a fast background reconnect. -Always use a cancellation token with this method. +Always use a cancellation token with this method. - On **iOS** it will attempt to connect indefinitely, even if out of range, so the only way to cancel it is with the token. - On **Android** this will throw a GATT ERROR in a couple of seconds if the device is out of range. ```csharp -try +try { await _adapter.ConnectToKnownDeviceAsync(guid, cancellationToken); } @@ -236,21 +236,21 @@ await descriptor.WriteAsync(bytes); ``` #### Get System Devices - + Returns all BLE devices connected or bonded (only Android) to the system. In order to use the device in the app you have to first call ConnectAsync. - For iOS the implementation uses get [retrieveConnectedPeripherals(services)](https://developer.apple.com/reference/corebluetooth/cbcentralmanager/1518924-retrieveconnectedperipherals) - For Android this function merges the functionality of thw following API calls: - [getConnectedDevices](https://developer.android.com/reference/android/bluetooth/BluetoothManager.html#getConnectedDevices(int)) - - [getBondedDevices()](https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#getBondedDevices()) + - [getBondedDevices()](https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#getBondedDevices()) + - ```csharp var systemDevices = adapter.GetSystemConnectedOrPairedDevices(); foreach(var device in systemDevices) { - await _adapter.ConnectToDeviceAsync(device); + await _adapter.ConnectToDeviceAsync(device); } ``` @@ -281,7 +281,7 @@ The BLE API implementation (especially on **Android**) has the following limitat } ``` - **Avoid caching of Characteristic or Service instances between connection sessions**. This includes saving a reference to them in you class between connection sessions etc. After a device has been disconnected all Service & Characteristic instances become **invalid**. Allways **use GetServiceAsync and GetCharacteristicAsync to get a valid instance**. - + ### General BLE iOS, Android - Scanning: Avoid performing ble device operations like Connect, Read, Write etc while scanning for devices. Scanning is battery-intensive. @@ -290,16 +290,16 @@ The BLE API implementation (especially on **Android**) has the following limitat - never scan on a loop, and set a time limit on your scan ## How to build the nuget package -### On Windows + 1) Build - Open a cmd console windows and cd to the folder of "xamarin-bluetooth-le\\.build", then run `build.bat`. + Open a console, change to the folder "xamarin-bluetooth-le/.build" and run `cake`. 2) pack the nuget - `nuget pack Plugin.BLE.nuspec -BasePath out\lib\` - - `nuget pack MvvmCross.Plugin.BLE.nuspec -BasePath out\lib\` + `nuget pack Plugin.BLE.nuspec` + + `nuget pack MvvmCross.Plugin.BLE.nuspec` @@ -326,7 +326,3 @@ We usually do our development work on a branch with the name of the milestone. S ## Licence [Apache 2.0](https://github.com/xabre/MvvmCross-BluetoothLE/blob/master/LICENSE) - - - - From f48ca73610b7c65463d36ba3e9d7fbf782c3d818 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 22 Mar 2021 10:59:07 +0100 Subject: [PATCH 111/527] Plugin.BLE.Android: enable BT 5 advertising extensions (#495) * by default only legacy advertisements (4.2 and below) are detected * see https://developer.android.com/reference/android/bluetooth/le/ScanSettings.Builder#setLegacy(boolean) * the target framework version needs to be increased to 8.0 for this --- Source/Plugin.BLE.Android/Adapter.cs | 5 +++++ Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE.Android/Adapter.cs b/Source/Plugin.BLE.Android/Adapter.cs index 802ef039..e56a8e58 100644 --- a/Source/Plugin.BLE.Android/Adapter.cs +++ b/Source/Plugin.BLE.Android/Adapter.cs @@ -97,6 +97,11 @@ private void StartScanningNew(Guid[] serviceUuids) var ssb = new ScanSettings.Builder(); ssb.SetScanMode(ScanMode.ToNative()); + if (Build.VERSION.SdkInt >= BuildVersionCodes.O) + { + // enable Bluetooth 5 Advertisement Extensions on Android 8.0 and above + ssb.SetLegacy(false); + } //ssb.SetCallbackType(ScanCallbackType.AllMatches); if (_bluetoothAdapter.BluetoothLeScanner != null) diff --git a/Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj b/Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj index c3666507..e24325b8 100644 --- a/Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj +++ b/Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj @@ -14,7 +14,7 @@ 512 Resources\Resource.Designer.cs Off - v7.1 + v8.0 From 8eca87221960db3fa308b4450e46ee3d5726aa9c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 9 Apr 2021 10:13:08 +0200 Subject: [PATCH 112/527] README: mention NSBluetoothAlwaysUsageDescription for Mac OS (#498) --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c45c9d49..5fff8927 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plug | ------------- | ----------- | ----------- | | Xamarin.Android | 4.3 | | | Xamarin.iOS | 7.0 | | -| Xamarin.Mac | 10.9 (Maveriks) | >= v2.1.0 | +| Xamarin.Mac | 10.9 (Mavericks) | >= v2.1.0 | | UWP | 1709 - 10.0.16299 (Fall Creators Update) | TBA | [Changelog](doc/changelog.md) @@ -74,6 +74,14 @@ On iOS you must add the following keys to your `Info.plist` NSBluetoothAlwaysUsageDescription YOUR CUSTOM MESSAGE +**MacOS** + +On MacOS (version 11 and above) you must add the following keys to your `Info.plist`: + + +NSBluetoothAlwaysUsageDescription +YOUR CUSTOM MESSAGE + ## Sample app We provide a sample Xamarin.Forms app, that is a basic bluetooth LE scanner. With this app, it's possible to From 99166c9e9dd754f6a2529c507b00b60514e18688 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 9 Apr 2021 10:16:19 +0200 Subject: [PATCH 113/527] BLE.Client.macOS: add NSBluetoothAlwaysUsageDescription to Info.plist (#498) --- Source/BLE.Client/BLE.Client.macOS/Info.plist | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client.macOS/Info.plist b/Source/BLE.Client/BLE.Client.macOS/Info.plist index d997d17d..eff813c0 100644 --- a/Source/BLE.Client/BLE.Client.macOS/Info.plist +++ b/Source/BLE.Client/BLE.Client.macOS/Info.plist @@ -28,6 +28,7 @@ Main XSAppIconAssets Assets.xcassets/AppIcon.appiconset - + NSBluetoothAlwaysUsageDescription + Need bluetooth permission. From 499854cd4126443fd2510fe517f97d9fc285fb13 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 9 Apr 2021 10:59:22 +0200 Subject: [PATCH 114/527] BLE.Client.iOS: add NSBluetoothAlwaysUsageDescription to Info.plist (#455) --- Source/BLE.Client/BLE.Client.iOS/Info.plist | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/BLE.Client/BLE.Client.iOS/Info.plist b/Source/BLE.Client/BLE.Client.iOS/Info.plist index e442dc2e..5b046fd3 100644 --- a/Source/BLE.Client/BLE.Client.iOS/Info.plist +++ b/Source/BLE.Client/BLE.Client.iOS/Info.plist @@ -36,5 +36,7 @@ Assets.xcassets/AppIcon.appiconset XSLaunchImageAssets Assets.xcassets/LaunchImage.launchimage + NSBluetoothAlwaysUsageDescription + Need bluetooth permission. From c0d46763f17c3c593ed1df885fe216de4df2ca48 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 9 Apr 2021 22:29:21 +0200 Subject: [PATCH 115/527] Formatting fix in README.md cf. #498 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5fff8927..12bcc8e1 100644 --- a/README.md +++ b/README.md @@ -78,9 +78,9 @@ On iOS you must add the following keys to your `Info.plist` On MacOS (version 11 and above) you must add the following keys to your `Info.plist`: - -NSBluetoothAlwaysUsageDescription -YOUR CUSTOM MESSAGE + + NSBluetoothAlwaysUsageDescription + YOUR CUSTOM MESSAGE ## Sample app From 03f3eafdc15d517d921911e2fe2dd22c0b1b82c7 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 10 Apr 2021 11:22:11 +0200 Subject: [PATCH 116/527] remove Resource.Designer.cs files from the repository * those are auto-generated files, which do not need to be tracked in git --- .../Resources/Resource.Designer.cs | 17490 ---------------- .../Resources/Resource.Designer.cs | 0 .../Resources/Resource.Designer.cs | 0 3 files changed, 17490 deletions(-) delete mode 100644 Source/BLE.Client/BLE.Client.Droid/Resources/Resource.Designer.cs delete mode 100644 Source/MvvmCross.Plugins.BLE.Droid/Resources/Resource.Designer.cs delete mode 100644 Source/Plugin.BLE.Android/Resources/Resource.Designer.cs diff --git a/Source/BLE.Client/BLE.Client.Droid/Resources/Resource.Designer.cs b/Source/BLE.Client/BLE.Client.Droid/Resources/Resource.Designer.cs deleted file mode 100644 index 55d0165e..00000000 --- a/Source/BLE.Client/BLE.Client.Droid/Resources/Resource.Designer.cs +++ /dev/null @@ -1,17490 +0,0 @@ -#pragma warning disable 1591 -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -[assembly: global::Android.Runtime.ResourceDesignerAttribute("BLE.Client.Droid.Resource", IsApplication=true)] - -namespace BLE.Client.Droid -{ - - - [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] - public partial class Resource - { - - static Resource() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - public static void UpdateIdValues() - { - global::AndroidHUD.Resource.Attribute.ahBarColor = global::BLE.Client.Droid.Resource.Attribute.ahBarColor; - global::AndroidHUD.Resource.Attribute.ahBarLength = global::BLE.Client.Droid.Resource.Attribute.ahBarLength; - global::AndroidHUD.Resource.Attribute.ahBarWidth = global::BLE.Client.Droid.Resource.Attribute.ahBarWidth; - global::AndroidHUD.Resource.Attribute.ahCircleColor = global::BLE.Client.Droid.Resource.Attribute.ahCircleColor; - global::AndroidHUD.Resource.Attribute.ahDelayMillis = global::BLE.Client.Droid.Resource.Attribute.ahDelayMillis; - global::AndroidHUD.Resource.Attribute.ahRadius = global::BLE.Client.Droid.Resource.Attribute.ahRadius; - global::AndroidHUD.Resource.Attribute.ahRimColor = global::BLE.Client.Droid.Resource.Attribute.ahRimColor; - global::AndroidHUD.Resource.Attribute.ahRimWidth = global::BLE.Client.Droid.Resource.Attribute.ahRimWidth; - global::AndroidHUD.Resource.Attribute.ahSpinSpeed = global::BLE.Client.Droid.Resource.Attribute.ahSpinSpeed; - global::AndroidHUD.Resource.Attribute.ahText = global::BLE.Client.Droid.Resource.Attribute.ahText; - global::AndroidHUD.Resource.Attribute.ahTextColor = global::BLE.Client.Droid.Resource.Attribute.ahTextColor; - global::AndroidHUD.Resource.Attribute.ahTextSize = global::BLE.Client.Droid.Resource.Attribute.ahTextSize; - global::AndroidHUD.Resource.Drawable.ic_errorstatus = global::BLE.Client.Droid.Resource.Drawable.ic_errorstatus; - global::AndroidHUD.Resource.Drawable.ic_successstatus = global::BLE.Client.Droid.Resource.Drawable.ic_successstatus; - global::AndroidHUD.Resource.Drawable.roundedbg = global::BLE.Client.Droid.Resource.Drawable.roundedbg; - global::AndroidHUD.Resource.Drawable.roundedbgdark = global::BLE.Client.Droid.Resource.Drawable.roundedbgdark; - global::AndroidHUD.Resource.Id.loadingImage = global::BLE.Client.Droid.Resource.Id.loadingImage; - global::AndroidHUD.Resource.Id.loadingProgressBar = global::BLE.Client.Droid.Resource.Id.loadingProgressBar; - global::AndroidHUD.Resource.Id.loadingProgressWheel = global::BLE.Client.Droid.Resource.Id.loadingProgressWheel; - global::AndroidHUD.Resource.Id.textViewStatus = global::BLE.Client.Droid.Resource.Id.textViewStatus; - global::AndroidHUD.Resource.Layout.loading = global::BLE.Client.Droid.Resource.Layout.loading; - global::AndroidHUD.Resource.Layout.loadingimage = global::BLE.Client.Droid.Resource.Layout.loadingimage; - global::AndroidHUD.Resource.Layout.loadingprogress = global::BLE.Client.Droid.Resource.Layout.loadingprogress; - global::AndroidHUD.Resource.String.library_name = global::BLE.Client.Droid.Resource.String.library_name; - global::AndroidHUD.Resource.Styleable.ProgressWheel = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahBarColor = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahBarColor; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahBarLength = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahBarLength; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahBarWidth = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahBarWidth; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahCircleColor = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahCircleColor; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahDelayMillis = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahDelayMillis; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahRadius = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahRadius; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahRimColor = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahRimColor; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahRimWidth = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahRimWidth; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahSpinSpeed = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahSpinSpeed; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahText = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahText; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahTextColor = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahTextColor; - global::AndroidHUD.Resource.Styleable.ProgressWheel_ahTextSize = global::BLE.Client.Droid.Resource.Styleable.ProgressWheel_ahTextSize; - global::MvvmCross.Resource.Attribute.MvxBind = global::BLE.Client.Droid.Resource.Attribute.MvxBind; - global::MvvmCross.Resource.Attribute.MvxDropDownItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxDropDownItemTemplate; - global::MvvmCross.Resource.Attribute.MvxGroupItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxGroupItemTemplate; - global::MvvmCross.Resource.Attribute.MvxItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxItemTemplate; - global::MvvmCross.Resource.Attribute.MvxLang = global::BLE.Client.Droid.Resource.Attribute.MvxLang; - global::MvvmCross.Resource.Attribute.MvxTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxTemplate; - global::MvvmCross.Resource.Id.MvvmCrossTagId = global::BLE.Client.Droid.Resource.Id.MvvmCrossTagId; - global::MvvmCross.Resource.Id.MvxBindingTagUnique = global::BLE.Client.Droid.Resource.Id.MvxBindingTagUnique; - global::MvvmCross.Resource.Styleable.MvxBinding = global::BLE.Client.Droid.Resource.Styleable.MvxBinding; - global::MvvmCross.Resource.Styleable.MvxBinding_MvxBind = global::BLE.Client.Droid.Resource.Styleable.MvxBinding_MvxBind; - global::MvvmCross.Resource.Styleable.MvxBinding_MvxLang = global::BLE.Client.Droid.Resource.Styleable.MvxBinding_MvxLang; - global::MvvmCross.Resource.Styleable.MvxControl = global::BLE.Client.Droid.Resource.Styleable.MvxControl; - global::MvvmCross.Resource.Styleable.MvxControl_MvxTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxControl_MvxTemplate; - global::MvvmCross.Resource.Styleable.MvxExpandableListView = global::BLE.Client.Droid.Resource.Styleable.MvxExpandableListView; - global::MvvmCross.Resource.Styleable.MvxExpandableListView_MvxGroupItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxExpandableListView_MvxGroupItemTemplate; - global::MvvmCross.Resource.Styleable.MvxListView = global::BLE.Client.Droid.Resource.Styleable.MvxListView; - global::MvvmCross.Resource.Styleable.MvxListView_MvxDropDownItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxListView_MvxDropDownItemTemplate; - global::MvvmCross.Resource.Styleable.MvxListView_MvxItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxListView_MvxItemTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_fade_in = global::BLE.Client.Droid.Resource.Animation.abc_fade_in; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_fade_out = global::BLE.Client.Droid.Resource.Animation.abc_fade_out; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_grow_fade_in_from_bottom = global::BLE.Client.Droid.Resource.Animation.abc_grow_fade_in_from_bottom; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_popup_enter = global::BLE.Client.Droid.Resource.Animation.abc_popup_enter; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_popup_exit = global::BLE.Client.Droid.Resource.Animation.abc_popup_exit; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_shrink_fade_out_from_bottom = global::BLE.Client.Droid.Resource.Animation.abc_shrink_fade_out_from_bottom; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_slide_in_bottom = global::BLE.Client.Droid.Resource.Animation.abc_slide_in_bottom; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_slide_in_top = global::BLE.Client.Droid.Resource.Animation.abc_slide_in_top; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_slide_out_bottom = global::BLE.Client.Droid.Resource.Animation.abc_slide_out_bottom; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_slide_out_top = global::BLE.Client.Droid.Resource.Animation.abc_slide_out_top; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_tooltip_enter = global::BLE.Client.Droid.Resource.Animation.abc_tooltip_enter; - global::MvvmCross.Droid.Support.Design.Resource.Animation.abc_tooltip_exit = global::BLE.Client.Droid.Resource.Animation.abc_tooltip_exit; - global::MvvmCross.Droid.Support.Design.Resource.Animation.design_bottom_sheet_slide_in = global::BLE.Client.Droid.Resource.Animation.design_bottom_sheet_slide_in; - global::MvvmCross.Droid.Support.Design.Resource.Animation.design_bottom_sheet_slide_out = global::BLE.Client.Droid.Resource.Animation.design_bottom_sheet_slide_out; - global::MvvmCross.Droid.Support.Design.Resource.Animation.design_snackbar_in = global::BLE.Client.Droid.Resource.Animation.design_snackbar_in; - global::MvvmCross.Droid.Support.Design.Resource.Animation.design_snackbar_out = global::BLE.Client.Droid.Resource.Animation.design_snackbar_out; - global::MvvmCross.Droid.Support.Design.Resource.Animator.design_appbar_state_list_animator = global::BLE.Client.Droid.Resource.Animator.design_appbar_state_list_animator; - global::MvvmCross.Droid.Support.Design.Resource.Animator.design_fab_hide_motion_spec = global::BLE.Client.Droid.Resource.Animator.design_fab_hide_motion_spec; - global::MvvmCross.Droid.Support.Design.Resource.Animator.design_fab_show_motion_spec = global::BLE.Client.Droid.Resource.Animator.design_fab_show_motion_spec; - global::MvvmCross.Droid.Support.Design.Resource.Animator.mtrl_btn_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_btn_state_list_anim; - global::MvvmCross.Droid.Support.Design.Resource.Animator.mtrl_btn_unelevated_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_btn_unelevated_state_list_anim; - global::MvvmCross.Droid.Support.Design.Resource.Animator.mtrl_chip_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_chip_state_list_anim; - global::MvvmCross.Droid.Support.Design.Resource.Animator.mtrl_fab_hide_motion_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_hide_motion_spec; - global::MvvmCross.Droid.Support.Design.Resource.Animator.mtrl_fab_show_motion_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_show_motion_spec; - global::MvvmCross.Droid.Support.Design.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec; - global::MvvmCross.Droid.Support.Design.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.MvxBind = global::BLE.Client.Droid.Resource.Attribute.MvxBind; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.MvxDropDownItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxDropDownItemTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.MvxGroupItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxGroupItemTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.MvxItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxItemTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.MvxLang = global::BLE.Client.Droid.Resource.Attribute.MvxLang; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.MvxTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarDivider = global::BLE.Client.Droid.Resource.Attribute.actionBarDivider; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarItemBackground = global::BLE.Client.Droid.Resource.Attribute.actionBarItemBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarPopupTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarPopupTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarSize = global::BLE.Client.Droid.Resource.Attribute.actionBarSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarSplitStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarSplitStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarTabBarStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarTabStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarTabTextStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionBarWidgetTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarWidgetTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionDropDownStyle = global::BLE.Client.Droid.Resource.Attribute.actionDropDownStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionLayout = global::BLE.Client.Droid.Resource.Attribute.actionLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionMenuTextAppearance = global::BLE.Client.Droid.Resource.Attribute.actionMenuTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionMenuTextColor = global::BLE.Client.Droid.Resource.Attribute.actionMenuTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeBackground = global::BLE.Client.Droid.Resource.Attribute.actionModeBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeCloseButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionModeCloseButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeCloseDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCloseDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeCopyDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCopyDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeCutDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCutDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeFindDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeFindDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModePasteDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModePasteDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModePopupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.actionModePopupWindowStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeSelectAllDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeSelectAllDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeShareDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeShareDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeSplitBackground = global::BLE.Client.Droid.Resource.Attribute.actionModeSplitBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeStyle = global::BLE.Client.Droid.Resource.Attribute.actionModeStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionModeWebSearchDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeWebSearchDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionOverflowButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionOverflowButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionOverflowMenuStyle = global::BLE.Client.Droid.Resource.Attribute.actionOverflowMenuStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionProviderClass = global::BLE.Client.Droid.Resource.Attribute.actionProviderClass; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.actionViewClass = global::BLE.Client.Droid.Resource.Attribute.actionViewClass; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.activityChooserViewStyle = global::BLE.Client.Droid.Resource.Attribute.activityChooserViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.alertDialogButtonGroupStyle = global::BLE.Client.Droid.Resource.Attribute.alertDialogButtonGroupStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.alertDialogCenterButtons = global::BLE.Client.Droid.Resource.Attribute.alertDialogCenterButtons; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.alertDialogStyle = global::BLE.Client.Droid.Resource.Attribute.alertDialogStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.alertDialogTheme = global::BLE.Client.Droid.Resource.Attribute.alertDialogTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.allowStacking = global::BLE.Client.Droid.Resource.Attribute.allowStacking; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.alpha = global::BLE.Client.Droid.Resource.Attribute.alpha; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.alphabeticModifiers = global::BLE.Client.Droid.Resource.Attribute.alphabeticModifiers; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.arrowHeadLength = global::BLE.Client.Droid.Resource.Attribute.arrowHeadLength; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.arrowShaftLength = global::BLE.Client.Droid.Resource.Attribute.arrowShaftLength; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.autoCompleteTextViewStyle = global::BLE.Client.Droid.Resource.Attribute.autoCompleteTextViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.autoSizeMaxTextSize = global::BLE.Client.Droid.Resource.Attribute.autoSizeMaxTextSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.autoSizeMinTextSize = global::BLE.Client.Droid.Resource.Attribute.autoSizeMinTextSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.autoSizePresetSizes = global::BLE.Client.Droid.Resource.Attribute.autoSizePresetSizes; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.autoSizeStepGranularity = global::BLE.Client.Droid.Resource.Attribute.autoSizeStepGranularity; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.autoSizeTextType = global::BLE.Client.Droid.Resource.Attribute.autoSizeTextType; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.background = global::BLE.Client.Droid.Resource.Attribute.background; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.backgroundSplit = global::BLE.Client.Droid.Resource.Attribute.backgroundSplit; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.backgroundStacked = global::BLE.Client.Droid.Resource.Attribute.backgroundStacked; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.backgroundTint = global::BLE.Client.Droid.Resource.Attribute.backgroundTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.backgroundTintMode = global::BLE.Client.Droid.Resource.Attribute.backgroundTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.barLength = global::BLE.Client.Droid.Resource.Attribute.barLength; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.behavior_autoHide = global::BLE.Client.Droid.Resource.Attribute.behavior_autoHide; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.behavior_fitToContents = global::BLE.Client.Droid.Resource.Attribute.behavior_fitToContents; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.behavior_hideable = global::BLE.Client.Droid.Resource.Attribute.behavior_hideable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.behavior_overlapTop = global::BLE.Client.Droid.Resource.Attribute.behavior_overlapTop; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.behavior_peekHeight = global::BLE.Client.Droid.Resource.Attribute.behavior_peekHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.behavior_skipCollapsed = global::BLE.Client.Droid.Resource.Attribute.behavior_skipCollapsed; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.borderWidth = global::BLE.Client.Droid.Resource.Attribute.borderWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.borderlessButtonStyle = global::BLE.Client.Droid.Resource.Attribute.borderlessButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.bottomAppBarStyle = global::BLE.Client.Droid.Resource.Attribute.bottomAppBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.bottomNavigationStyle = global::BLE.Client.Droid.Resource.Attribute.bottomNavigationStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Attribute.bottomSheetDialogTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.bottomSheetStyle = global::BLE.Client.Droid.Resource.Attribute.bottomSheetStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.boxBackgroundColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxBackgroundMode = global::BLE.Client.Droid.Resource.Attribute.boxBackgroundMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxCollapsedPaddingTop = global::BLE.Client.Droid.Resource.Attribute.boxCollapsedPaddingTop; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxCornerRadiusBottomEnd = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusBottomEnd; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxCornerRadiusBottomStart = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusBottomStart; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxCornerRadiusTopEnd = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusTopEnd; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxCornerRadiusTopStart = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusTopStart; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxStrokeColor = global::BLE.Client.Droid.Resource.Attribute.boxStrokeColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.boxStrokeWidth = global::BLE.Client.Droid.Resource.Attribute.boxStrokeWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonBarButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonBarNegativeButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarNegativeButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonBarNeutralButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarNeutralButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonBarPositiveButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarPositiveButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonBarStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonGravity = global::BLE.Client.Droid.Resource.Attribute.buttonGravity; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonIconDimen = global::BLE.Client.Droid.Resource.Attribute.buttonIconDimen; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonPanelSideLayout = global::BLE.Client.Droid.Resource.Attribute.buttonPanelSideLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonStyleSmall = global::BLE.Client.Droid.Resource.Attribute.buttonStyleSmall; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonTint = global::BLE.Client.Droid.Resource.Attribute.buttonTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.buttonTintMode = global::BLE.Client.Droid.Resource.Attribute.buttonTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.cardBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.cardBackgroundColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.cardCornerRadius = global::BLE.Client.Droid.Resource.Attribute.cardCornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.cardElevation = global::BLE.Client.Droid.Resource.Attribute.cardElevation; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.cardMaxElevation = global::BLE.Client.Droid.Resource.Attribute.cardMaxElevation; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.cardPreventCornerOverlap = global::BLE.Client.Droid.Resource.Attribute.cardPreventCornerOverlap; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.cardUseCompatPadding = global::BLE.Client.Droid.Resource.Attribute.cardUseCompatPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.cardViewStyle = global::BLE.Client.Droid.Resource.Attribute.cardViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.checkboxStyle = global::BLE.Client.Droid.Resource.Attribute.checkboxStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.checkedChip = global::BLE.Client.Droid.Resource.Attribute.checkedChip; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.checkedIcon = global::BLE.Client.Droid.Resource.Attribute.checkedIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.checkedIconEnabled = global::BLE.Client.Droid.Resource.Attribute.checkedIconEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.checkedIconVisible = global::BLE.Client.Droid.Resource.Attribute.checkedIconVisible; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.checkedTextViewStyle = global::BLE.Client.Droid.Resource.Attribute.checkedTextViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.chipBackgroundColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipCornerRadius = global::BLE.Client.Droid.Resource.Attribute.chipCornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipEndPadding = global::BLE.Client.Droid.Resource.Attribute.chipEndPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipGroupStyle = global::BLE.Client.Droid.Resource.Attribute.chipGroupStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipIcon = global::BLE.Client.Droid.Resource.Attribute.chipIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipIconEnabled = global::BLE.Client.Droid.Resource.Attribute.chipIconEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipIconSize = global::BLE.Client.Droid.Resource.Attribute.chipIconSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipIconTint = global::BLE.Client.Droid.Resource.Attribute.chipIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipIconVisible = global::BLE.Client.Droid.Resource.Attribute.chipIconVisible; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipMinHeight = global::BLE.Client.Droid.Resource.Attribute.chipMinHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipSpacing = global::BLE.Client.Droid.Resource.Attribute.chipSpacing; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipSpacingHorizontal = global::BLE.Client.Droid.Resource.Attribute.chipSpacingHorizontal; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipSpacingVertical = global::BLE.Client.Droid.Resource.Attribute.chipSpacingVertical; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipStandaloneStyle = global::BLE.Client.Droid.Resource.Attribute.chipStandaloneStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipStartPadding = global::BLE.Client.Droid.Resource.Attribute.chipStartPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipStrokeColor = global::BLE.Client.Droid.Resource.Attribute.chipStrokeColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipStrokeWidth = global::BLE.Client.Droid.Resource.Attribute.chipStrokeWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.chipStyle = global::BLE.Client.Droid.Resource.Attribute.chipStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.closeIcon = global::BLE.Client.Droid.Resource.Attribute.closeIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.closeIconEnabled = global::BLE.Client.Droid.Resource.Attribute.closeIconEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.closeIconEndPadding = global::BLE.Client.Droid.Resource.Attribute.closeIconEndPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.closeIconSize = global::BLE.Client.Droid.Resource.Attribute.closeIconSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.closeIconStartPadding = global::BLE.Client.Droid.Resource.Attribute.closeIconStartPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.closeIconTint = global::BLE.Client.Droid.Resource.Attribute.closeIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.closeIconVisible = global::BLE.Client.Droid.Resource.Attribute.closeIconVisible; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.closeItemLayout = global::BLE.Client.Droid.Resource.Attribute.closeItemLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.collapseContentDescription = global::BLE.Client.Droid.Resource.Attribute.collapseContentDescription; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.collapseIcon = global::BLE.Client.Droid.Resource.Attribute.collapseIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.collapsedTitleGravity = global::BLE.Client.Droid.Resource.Attribute.collapsedTitleGravity; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.collapsedTitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.collapsedTitleTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.color = global::BLE.Client.Droid.Resource.Attribute.color; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorAccent = global::BLE.Client.Droid.Resource.Attribute.colorAccent; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorBackgroundFloating = global::BLE.Client.Droid.Resource.Attribute.colorBackgroundFloating; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorButtonNormal = global::BLE.Client.Droid.Resource.Attribute.colorButtonNormal; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorControlActivated = global::BLE.Client.Droid.Resource.Attribute.colorControlActivated; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorControlHighlight = global::BLE.Client.Droid.Resource.Attribute.colorControlHighlight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorControlNormal = global::BLE.Client.Droid.Resource.Attribute.colorControlNormal; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorError = global::BLE.Client.Droid.Resource.Attribute.colorError; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorPrimary = global::BLE.Client.Droid.Resource.Attribute.colorPrimary; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorPrimaryDark = global::BLE.Client.Droid.Resource.Attribute.colorPrimaryDark; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorSecondary = global::BLE.Client.Droid.Resource.Attribute.colorSecondary; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.colorSwitchThumbNormal = global::BLE.Client.Droid.Resource.Attribute.colorSwitchThumbNormal; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.commitIcon = global::BLE.Client.Droid.Resource.Attribute.commitIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentDescription = global::BLE.Client.Droid.Resource.Attribute.contentDescription; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentInsetEnd = global::BLE.Client.Droid.Resource.Attribute.contentInsetEnd; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Attribute.contentInsetEndWithActions; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentInsetLeft = global::BLE.Client.Droid.Resource.Attribute.contentInsetLeft; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentInsetRight = global::BLE.Client.Droid.Resource.Attribute.contentInsetRight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentInsetStart = global::BLE.Client.Droid.Resource.Attribute.contentInsetStart; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Attribute.contentInsetStartWithNavigation; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentPadding = global::BLE.Client.Droid.Resource.Attribute.contentPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentPaddingBottom = global::BLE.Client.Droid.Resource.Attribute.contentPaddingBottom; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentPaddingLeft = global::BLE.Client.Droid.Resource.Attribute.contentPaddingLeft; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentPaddingRight = global::BLE.Client.Droid.Resource.Attribute.contentPaddingRight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentPaddingTop = global::BLE.Client.Droid.Resource.Attribute.contentPaddingTop; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.contentScrim = global::BLE.Client.Droid.Resource.Attribute.contentScrim; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.controlBackground = global::BLE.Client.Droid.Resource.Attribute.controlBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.coordinatorLayoutStyle = global::BLE.Client.Droid.Resource.Attribute.coordinatorLayoutStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.cornerRadius = global::BLE.Client.Droid.Resource.Attribute.cornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.counterEnabled = global::BLE.Client.Droid.Resource.Attribute.counterEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.counterMaxLength = global::BLE.Client.Droid.Resource.Attribute.counterMaxLength; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.counterOverflowTextAppearance = global::BLE.Client.Droid.Resource.Attribute.counterOverflowTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.counterTextAppearance = global::BLE.Client.Droid.Resource.Attribute.counterTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.customNavigationLayout = global::BLE.Client.Droid.Resource.Attribute.customNavigationLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.defaultQueryHint = global::BLE.Client.Droid.Resource.Attribute.defaultQueryHint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.dialogCornerRadius = global::BLE.Client.Droid.Resource.Attribute.dialogCornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.dialogPreferredPadding = global::BLE.Client.Droid.Resource.Attribute.dialogPreferredPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.dialogTheme = global::BLE.Client.Droid.Resource.Attribute.dialogTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.displayOptions = global::BLE.Client.Droid.Resource.Attribute.displayOptions; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.divider = global::BLE.Client.Droid.Resource.Attribute.divider; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.dividerHorizontal = global::BLE.Client.Droid.Resource.Attribute.dividerHorizontal; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.dividerPadding = global::BLE.Client.Droid.Resource.Attribute.dividerPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.dividerVertical = global::BLE.Client.Droid.Resource.Attribute.dividerVertical; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.drawableSize = global::BLE.Client.Droid.Resource.Attribute.drawableSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.drawerArrowStyle = global::BLE.Client.Droid.Resource.Attribute.drawerArrowStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.dropDownListViewStyle = global::BLE.Client.Droid.Resource.Attribute.dropDownListViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.dropdownListPreferredItemHeight = global::BLE.Client.Droid.Resource.Attribute.dropdownListPreferredItemHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.editTextBackground = global::BLE.Client.Droid.Resource.Attribute.editTextBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.editTextColor = global::BLE.Client.Droid.Resource.Attribute.editTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.editTextStyle = global::BLE.Client.Droid.Resource.Attribute.editTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.elevation = global::BLE.Client.Droid.Resource.Attribute.elevation; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.enforceMaterialTheme = global::BLE.Client.Droid.Resource.Attribute.enforceMaterialTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.enforceTextAppearance = global::BLE.Client.Droid.Resource.Attribute.enforceTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.errorEnabled = global::BLE.Client.Droid.Resource.Attribute.errorEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.errorTextAppearance = global::BLE.Client.Droid.Resource.Attribute.errorTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expandActivityOverflowButtonDrawable = global::BLE.Client.Droid.Resource.Attribute.expandActivityOverflowButtonDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expanded = global::BLE.Client.Droid.Resource.Attribute.expanded; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expandedTitleGravity = global::BLE.Client.Droid.Resource.Attribute.expandedTitleGravity; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expandedTitleMargin = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMargin; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expandedTitleMarginBottom = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginBottom; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expandedTitleMarginEnd = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginEnd; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expandedTitleMarginStart = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginStart; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expandedTitleMarginTop = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginTop; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.expandedTitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.expandedTitleTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fabAlignmentMode = global::BLE.Client.Droid.Resource.Attribute.fabAlignmentMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fabCradleMargin = global::BLE.Client.Droid.Resource.Attribute.fabCradleMargin; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fabCradleRoundedCornerRadius = global::BLE.Client.Droid.Resource.Attribute.fabCradleRoundedCornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fabCradleVerticalOffset = global::BLE.Client.Droid.Resource.Attribute.fabCradleVerticalOffset; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fabCustomSize = global::BLE.Client.Droid.Resource.Attribute.fabCustomSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fabSize = global::BLE.Client.Droid.Resource.Attribute.fabSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fastScrollEnabled = global::BLE.Client.Droid.Resource.Attribute.fastScrollEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fastScrollHorizontalThumbDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollHorizontalThumbDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fastScrollHorizontalTrackDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollHorizontalTrackDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fastScrollVerticalThumbDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollVerticalThumbDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fastScrollVerticalTrackDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollVerticalTrackDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.firstBaselineToTopHeight = global::BLE.Client.Droid.Resource.Attribute.firstBaselineToTopHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.floatingActionButtonStyle = global::BLE.Client.Droid.Resource.Attribute.floatingActionButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.font = global::BLE.Client.Droid.Resource.Attribute.font; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontFamily = global::BLE.Client.Droid.Resource.Attribute.fontFamily; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontProviderAuthority = global::BLE.Client.Droid.Resource.Attribute.fontProviderAuthority; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontProviderCerts = global::BLE.Client.Droid.Resource.Attribute.fontProviderCerts; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontProviderFetchStrategy = global::BLE.Client.Droid.Resource.Attribute.fontProviderFetchStrategy; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontProviderFetchTimeout = global::BLE.Client.Droid.Resource.Attribute.fontProviderFetchTimeout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontProviderPackage = global::BLE.Client.Droid.Resource.Attribute.fontProviderPackage; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontProviderQuery = global::BLE.Client.Droid.Resource.Attribute.fontProviderQuery; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontStyle = global::BLE.Client.Droid.Resource.Attribute.fontStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontVariationSettings = global::BLE.Client.Droid.Resource.Attribute.fontVariationSettings; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.fontWeight = global::BLE.Client.Droid.Resource.Attribute.fontWeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.foregroundInsidePadding = global::BLE.Client.Droid.Resource.Attribute.foregroundInsidePadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.gapBetweenBars = global::BLE.Client.Droid.Resource.Attribute.gapBetweenBars; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.goIcon = global::BLE.Client.Droid.Resource.Attribute.goIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.headerLayout = global::BLE.Client.Droid.Resource.Attribute.headerLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.height = global::BLE.Client.Droid.Resource.Attribute.height; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.helperText = global::BLE.Client.Droid.Resource.Attribute.helperText; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.helperTextEnabled = global::BLE.Client.Droid.Resource.Attribute.helperTextEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.helperTextTextAppearance = global::BLE.Client.Droid.Resource.Attribute.helperTextTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.hideMotionSpec = global::BLE.Client.Droid.Resource.Attribute.hideMotionSpec; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.hideOnContentScroll = global::BLE.Client.Droid.Resource.Attribute.hideOnContentScroll; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.hideOnScroll = global::BLE.Client.Droid.Resource.Attribute.hideOnScroll; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.hintAnimationEnabled = global::BLE.Client.Droid.Resource.Attribute.hintAnimationEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.hintEnabled = global::BLE.Client.Droid.Resource.Attribute.hintEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.hintTextAppearance = global::BLE.Client.Droid.Resource.Attribute.hintTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.homeAsUpIndicator = global::BLE.Client.Droid.Resource.Attribute.homeAsUpIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.homeLayout = global::BLE.Client.Droid.Resource.Attribute.homeLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.hoveredFocusedTranslationZ = global::BLE.Client.Droid.Resource.Attribute.hoveredFocusedTranslationZ; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.icon = global::BLE.Client.Droid.Resource.Attribute.icon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.iconEndPadding = global::BLE.Client.Droid.Resource.Attribute.iconEndPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.iconGravity = global::BLE.Client.Droid.Resource.Attribute.iconGravity; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.iconPadding = global::BLE.Client.Droid.Resource.Attribute.iconPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.iconSize = global::BLE.Client.Droid.Resource.Attribute.iconSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.iconStartPadding = global::BLE.Client.Droid.Resource.Attribute.iconStartPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.iconTint = global::BLE.Client.Droid.Resource.Attribute.iconTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.iconTintMode = global::BLE.Client.Droid.Resource.Attribute.iconTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.iconifiedByDefault = global::BLE.Client.Droid.Resource.Attribute.iconifiedByDefault; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.imageButtonStyle = global::BLE.Client.Droid.Resource.Attribute.imageButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.indeterminateProgressStyle = global::BLE.Client.Droid.Resource.Attribute.indeterminateProgressStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.initialActivityCount = global::BLE.Client.Droid.Resource.Attribute.initialActivityCount; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.insetForeground = global::BLE.Client.Droid.Resource.Attribute.insetForeground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.isLightTheme = global::BLE.Client.Droid.Resource.Attribute.isLightTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemBackground = global::BLE.Client.Droid.Resource.Attribute.itemBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemHorizontalPadding = global::BLE.Client.Droid.Resource.Attribute.itemHorizontalPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemHorizontalTranslationEnabled = global::BLE.Client.Droid.Resource.Attribute.itemHorizontalTranslationEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemIconPadding = global::BLE.Client.Droid.Resource.Attribute.itemIconPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemIconSize = global::BLE.Client.Droid.Resource.Attribute.itemIconSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemIconTint = global::BLE.Client.Droid.Resource.Attribute.itemIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemPadding = global::BLE.Client.Droid.Resource.Attribute.itemPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemSpacing = global::BLE.Client.Droid.Resource.Attribute.itemSpacing; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemTextAppearance = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemTextAppearanceActive = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearanceActive; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemTextAppearanceInactive = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearanceInactive; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.itemTextColor = global::BLE.Client.Droid.Resource.Attribute.itemTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.keylines = global::BLE.Client.Droid.Resource.Attribute.keylines; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.labelVisibilityMode = global::BLE.Client.Droid.Resource.Attribute.labelVisibilityMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.lastBaselineToBottomHeight = global::BLE.Client.Droid.Resource.Attribute.lastBaselineToBottomHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout = global::BLE.Client.Droid.Resource.Attribute.layout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layoutManager = global::BLE.Client.Droid.Resource.Attribute.layoutManager; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_anchor = global::BLE.Client.Droid.Resource.Attribute.layout_anchor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_anchorGravity = global::BLE.Client.Droid.Resource.Attribute.layout_anchorGravity; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_behavior = global::BLE.Client.Droid.Resource.Attribute.layout_behavior; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_collapseMode = global::BLE.Client.Droid.Resource.Attribute.layout_collapseMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_collapseParallaxMultiplier = global::BLE.Client.Droid.Resource.Attribute.layout_collapseParallaxMultiplier; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_dodgeInsetEdges = global::BLE.Client.Droid.Resource.Attribute.layout_dodgeInsetEdges; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_insetEdge = global::BLE.Client.Droid.Resource.Attribute.layout_insetEdge; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_keyline = global::BLE.Client.Droid.Resource.Attribute.layout_keyline; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_scrollFlags = global::BLE.Client.Droid.Resource.Attribute.layout_scrollFlags; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.layout_scrollInterpolator = global::BLE.Client.Droid.Resource.Attribute.layout_scrollInterpolator; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.liftOnScroll = global::BLE.Client.Droid.Resource.Attribute.liftOnScroll; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.lineHeight = global::BLE.Client.Droid.Resource.Attribute.lineHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.lineSpacing = global::BLE.Client.Droid.Resource.Attribute.lineSpacing; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listChoiceBackgroundIndicator = global::BLE.Client.Droid.Resource.Attribute.listChoiceBackgroundIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listDividerAlertDialog = global::BLE.Client.Droid.Resource.Attribute.listDividerAlertDialog; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listItemLayout = global::BLE.Client.Droid.Resource.Attribute.listItemLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listLayout = global::BLE.Client.Droid.Resource.Attribute.listLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listMenuViewStyle = global::BLE.Client.Droid.Resource.Attribute.listMenuViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listPopupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.listPopupWindowStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listPreferredItemHeight = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listPreferredItemHeightLarge = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeightLarge; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listPreferredItemHeightSmall = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeightSmall; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listPreferredItemPaddingLeft = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemPaddingLeft; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.listPreferredItemPaddingRight = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemPaddingRight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.logo = global::BLE.Client.Droid.Resource.Attribute.logo; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.logoDescription = global::BLE.Client.Droid.Resource.Attribute.logoDescription; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.materialButtonStyle = global::BLE.Client.Droid.Resource.Attribute.materialButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.materialCardViewStyle = global::BLE.Client.Droid.Resource.Attribute.materialCardViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.maxActionInlineWidth = global::BLE.Client.Droid.Resource.Attribute.maxActionInlineWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.maxButtonHeight = global::BLE.Client.Droid.Resource.Attribute.maxButtonHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.maxImageSize = global::BLE.Client.Droid.Resource.Attribute.maxImageSize; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.measureWithLargestChild = global::BLE.Client.Droid.Resource.Attribute.measureWithLargestChild; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.menu = global::BLE.Client.Droid.Resource.Attribute.menu; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.multiChoiceItemLayout = global::BLE.Client.Droid.Resource.Attribute.multiChoiceItemLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.navigationContentDescription = global::BLE.Client.Droid.Resource.Attribute.navigationContentDescription; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.navigationIcon = global::BLE.Client.Droid.Resource.Attribute.navigationIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.navigationMode = global::BLE.Client.Droid.Resource.Attribute.navigationMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.navigationViewStyle = global::BLE.Client.Droid.Resource.Attribute.navigationViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.numericModifiers = global::BLE.Client.Droid.Resource.Attribute.numericModifiers; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.overlapAnchor = global::BLE.Client.Droid.Resource.Attribute.overlapAnchor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.paddingBottomNoButtons = global::BLE.Client.Droid.Resource.Attribute.paddingBottomNoButtons; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.paddingEnd = global::BLE.Client.Droid.Resource.Attribute.paddingEnd; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.paddingStart = global::BLE.Client.Droid.Resource.Attribute.paddingStart; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.paddingTopNoTitle = global::BLE.Client.Droid.Resource.Attribute.paddingTopNoTitle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.panelBackground = global::BLE.Client.Droid.Resource.Attribute.panelBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.panelMenuListTheme = global::BLE.Client.Droid.Resource.Attribute.panelMenuListTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.panelMenuListWidth = global::BLE.Client.Droid.Resource.Attribute.panelMenuListWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.passwordToggleContentDescription = global::BLE.Client.Droid.Resource.Attribute.passwordToggleContentDescription; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.passwordToggleDrawable = global::BLE.Client.Droid.Resource.Attribute.passwordToggleDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.passwordToggleEnabled = global::BLE.Client.Droid.Resource.Attribute.passwordToggleEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.passwordToggleTint = global::BLE.Client.Droid.Resource.Attribute.passwordToggleTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.passwordToggleTintMode = global::BLE.Client.Droid.Resource.Attribute.passwordToggleTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.popupMenuStyle = global::BLE.Client.Droid.Resource.Attribute.popupMenuStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.popupTheme = global::BLE.Client.Droid.Resource.Attribute.popupTheme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.popupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.popupWindowStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.preserveIconSpacing = global::BLE.Client.Droid.Resource.Attribute.preserveIconSpacing; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.pressedTranslationZ = global::BLE.Client.Droid.Resource.Attribute.pressedTranslationZ; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.progressBarPadding = global::BLE.Client.Droid.Resource.Attribute.progressBarPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.progressBarStyle = global::BLE.Client.Droid.Resource.Attribute.progressBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.queryBackground = global::BLE.Client.Droid.Resource.Attribute.queryBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.queryHint = global::BLE.Client.Droid.Resource.Attribute.queryHint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.radioButtonStyle = global::BLE.Client.Droid.Resource.Attribute.radioButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.ratingBarStyle = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.ratingBarStyleIndicator = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyleIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.ratingBarStyleSmall = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyleSmall; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.reverseLayout = global::BLE.Client.Droid.Resource.Attribute.reverseLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.rippleColor = global::BLE.Client.Droid.Resource.Attribute.rippleColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.scrimAnimationDuration = global::BLE.Client.Droid.Resource.Attribute.scrimAnimationDuration; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.scrimBackground = global::BLE.Client.Droid.Resource.Attribute.scrimBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.scrimVisibleHeightTrigger = global::BLE.Client.Droid.Resource.Attribute.scrimVisibleHeightTrigger; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.searchHintIcon = global::BLE.Client.Droid.Resource.Attribute.searchHintIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.searchIcon = global::BLE.Client.Droid.Resource.Attribute.searchIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.searchViewStyle = global::BLE.Client.Droid.Resource.Attribute.searchViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.seekBarStyle = global::BLE.Client.Droid.Resource.Attribute.seekBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.selectableItemBackground = global::BLE.Client.Droid.Resource.Attribute.selectableItemBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.selectableItemBackgroundBorderless = global::BLE.Client.Droid.Resource.Attribute.selectableItemBackgroundBorderless; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.showAsAction = global::BLE.Client.Droid.Resource.Attribute.showAsAction; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.showDividers = global::BLE.Client.Droid.Resource.Attribute.showDividers; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.showMotionSpec = global::BLE.Client.Droid.Resource.Attribute.showMotionSpec; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.showText = global::BLE.Client.Droid.Resource.Attribute.showText; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.showTitle = global::BLE.Client.Droid.Resource.Attribute.showTitle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.singleChoiceItemLayout = global::BLE.Client.Droid.Resource.Attribute.singleChoiceItemLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.singleLine = global::BLE.Client.Droid.Resource.Attribute.singleLine; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.singleSelection = global::BLE.Client.Droid.Resource.Attribute.singleSelection; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.snackbarButtonStyle = global::BLE.Client.Droid.Resource.Attribute.snackbarButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.snackbarStyle = global::BLE.Client.Droid.Resource.Attribute.snackbarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.spanCount = global::BLE.Client.Droid.Resource.Attribute.spanCount; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.spinBars = global::BLE.Client.Droid.Resource.Attribute.spinBars; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.spinnerDropDownItemStyle = global::BLE.Client.Droid.Resource.Attribute.spinnerDropDownItemStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.spinnerStyle = global::BLE.Client.Droid.Resource.Attribute.spinnerStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.splitTrack = global::BLE.Client.Droid.Resource.Attribute.splitTrack; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.srcCompat = global::BLE.Client.Droid.Resource.Attribute.srcCompat; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.stackFromEnd = global::BLE.Client.Droid.Resource.Attribute.stackFromEnd; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.state_above_anchor = global::BLE.Client.Droid.Resource.Attribute.state_above_anchor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.state_collapsed = global::BLE.Client.Droid.Resource.Attribute.state_collapsed; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.state_collapsible = global::BLE.Client.Droid.Resource.Attribute.state_collapsible; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.state_liftable = global::BLE.Client.Droid.Resource.Attribute.state_liftable; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.state_lifted = global::BLE.Client.Droid.Resource.Attribute.state_lifted; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.statusBarBackground = global::BLE.Client.Droid.Resource.Attribute.statusBarBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.statusBarScrim = global::BLE.Client.Droid.Resource.Attribute.statusBarScrim; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.strokeColor = global::BLE.Client.Droid.Resource.Attribute.strokeColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.strokeWidth = global::BLE.Client.Droid.Resource.Attribute.strokeWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.subMenuArrow = global::BLE.Client.Droid.Resource.Attribute.subMenuArrow; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.submitBackground = global::BLE.Client.Droid.Resource.Attribute.submitBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.subtitle = global::BLE.Client.Droid.Resource.Attribute.subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.subtitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.subtitleTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.subtitleTextColor = global::BLE.Client.Droid.Resource.Attribute.subtitleTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.subtitleTextStyle = global::BLE.Client.Droid.Resource.Attribute.subtitleTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.suggestionRowLayout = global::BLE.Client.Droid.Resource.Attribute.suggestionRowLayout; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.switchMinWidth = global::BLE.Client.Droid.Resource.Attribute.switchMinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.switchPadding = global::BLE.Client.Droid.Resource.Attribute.switchPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.switchStyle = global::BLE.Client.Droid.Resource.Attribute.switchStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.switchTextAppearance = global::BLE.Client.Droid.Resource.Attribute.switchTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabBackground = global::BLE.Client.Droid.Resource.Attribute.tabBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabContentStart = global::BLE.Client.Droid.Resource.Attribute.tabContentStart; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabGravity = global::BLE.Client.Droid.Resource.Attribute.tabGravity; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabIconTint = global::BLE.Client.Droid.Resource.Attribute.tabIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabIconTintMode = global::BLE.Client.Droid.Resource.Attribute.tabIconTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabIndicator = global::BLE.Client.Droid.Resource.Attribute.tabIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabIndicatorAnimationDuration = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorAnimationDuration; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabIndicatorColor = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabIndicatorFullWidth = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorFullWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabIndicatorGravity = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorGravity; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabIndicatorHeight = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorHeight; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabInlineLabel = global::BLE.Client.Droid.Resource.Attribute.tabInlineLabel; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabMaxWidth = global::BLE.Client.Droid.Resource.Attribute.tabMaxWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabMinWidth = global::BLE.Client.Droid.Resource.Attribute.tabMinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabMode = global::BLE.Client.Droid.Resource.Attribute.tabMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabPadding = global::BLE.Client.Droid.Resource.Attribute.tabPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabPaddingBottom = global::BLE.Client.Droid.Resource.Attribute.tabPaddingBottom; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabPaddingEnd = global::BLE.Client.Droid.Resource.Attribute.tabPaddingEnd; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabPaddingStart = global::BLE.Client.Droid.Resource.Attribute.tabPaddingStart; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabPaddingTop = global::BLE.Client.Droid.Resource.Attribute.tabPaddingTop; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabRippleColor = global::BLE.Client.Droid.Resource.Attribute.tabRippleColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabSelectedTextColor = global::BLE.Client.Droid.Resource.Attribute.tabSelectedTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabStyle = global::BLE.Client.Droid.Resource.Attribute.tabStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabTextAppearance = global::BLE.Client.Droid.Resource.Attribute.tabTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabTextColor = global::BLE.Client.Droid.Resource.Attribute.tabTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tabUnboundedRipple = global::BLE.Client.Droid.Resource.Attribute.tabUnboundedRipple; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAllCaps = global::BLE.Client.Droid.Resource.Attribute.textAllCaps; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceBody1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceBody1; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceBody2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceBody2; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceButton = global::BLE.Client.Droid.Resource.Attribute.textAppearanceButton; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceCaption = global::BLE.Client.Droid.Resource.Attribute.textAppearanceCaption; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceHeadline1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline1; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceHeadline2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline2; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceHeadline3 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline3; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceHeadline4 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline4; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceHeadline5 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline5; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceHeadline6 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline6; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceLargePopupMenu = global::BLE.Client.Droid.Resource.Attribute.textAppearanceLargePopupMenu; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceListItem = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItem; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceListItemSecondary = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItemSecondary; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceListItemSmall = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItemSmall; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceOverline = global::BLE.Client.Droid.Resource.Attribute.textAppearanceOverline; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearancePopupMenuHeader = global::BLE.Client.Droid.Resource.Attribute.textAppearancePopupMenuHeader; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceSearchResultSubtitle = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSearchResultSubtitle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceSearchResultTitle = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSearchResultTitle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceSmallPopupMenu = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSmallPopupMenu; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceSubtitle1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSubtitle1; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textAppearanceSubtitle2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSubtitle2; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textColorAlertDialogListItem = global::BLE.Client.Droid.Resource.Attribute.textColorAlertDialogListItem; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textColorSearchUrl = global::BLE.Client.Droid.Resource.Attribute.textColorSearchUrl; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textEndPadding = global::BLE.Client.Droid.Resource.Attribute.textEndPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textInputStyle = global::BLE.Client.Droid.Resource.Attribute.textInputStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.textStartPadding = global::BLE.Client.Droid.Resource.Attribute.textStartPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.theme = global::BLE.Client.Droid.Resource.Attribute.theme; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.thickness = global::BLE.Client.Droid.Resource.Attribute.thickness; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.thumbTextPadding = global::BLE.Client.Droid.Resource.Attribute.thumbTextPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.thumbTint = global::BLE.Client.Droid.Resource.Attribute.thumbTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.thumbTintMode = global::BLE.Client.Droid.Resource.Attribute.thumbTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tickMark = global::BLE.Client.Droid.Resource.Attribute.tickMark; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tickMarkTint = global::BLE.Client.Droid.Resource.Attribute.tickMarkTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tickMarkTintMode = global::BLE.Client.Droid.Resource.Attribute.tickMarkTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tint = global::BLE.Client.Droid.Resource.Attribute.tint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tintMode = global::BLE.Client.Droid.Resource.Attribute.tintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.title = global::BLE.Client.Droid.Resource.Attribute.title; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleEnabled = global::BLE.Client.Droid.Resource.Attribute.titleEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleMargin = global::BLE.Client.Droid.Resource.Attribute.titleMargin; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleMarginBottom = global::BLE.Client.Droid.Resource.Attribute.titleMarginBottom; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleMarginEnd = global::BLE.Client.Droid.Resource.Attribute.titleMarginEnd; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleMarginStart = global::BLE.Client.Droid.Resource.Attribute.titleMarginStart; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleMarginTop = global::BLE.Client.Droid.Resource.Attribute.titleMarginTop; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleMargins = global::BLE.Client.Droid.Resource.Attribute.titleMargins; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.titleTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleTextColor = global::BLE.Client.Droid.Resource.Attribute.titleTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.titleTextStyle = global::BLE.Client.Droid.Resource.Attribute.titleTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.toolbarId = global::BLE.Client.Droid.Resource.Attribute.toolbarId; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.toolbarNavigationButtonStyle = global::BLE.Client.Droid.Resource.Attribute.toolbarNavigationButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.toolbarStyle = global::BLE.Client.Droid.Resource.Attribute.toolbarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tooltipForegroundColor = global::BLE.Client.Droid.Resource.Attribute.tooltipForegroundColor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tooltipFrameBackground = global::BLE.Client.Droid.Resource.Attribute.tooltipFrameBackground; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.tooltipText = global::BLE.Client.Droid.Resource.Attribute.tooltipText; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.track = global::BLE.Client.Droid.Resource.Attribute.track; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.trackTint = global::BLE.Client.Droid.Resource.Attribute.trackTint; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.trackTintMode = global::BLE.Client.Droid.Resource.Attribute.trackTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.ttcIndex = global::BLE.Client.Droid.Resource.Attribute.ttcIndex; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.useCompatPadding = global::BLE.Client.Droid.Resource.Attribute.useCompatPadding; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.viewInflaterClass = global::BLE.Client.Droid.Resource.Attribute.viewInflaterClass; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.voiceIcon = global::BLE.Client.Droid.Resource.Attribute.voiceIcon; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowActionBar = global::BLE.Client.Droid.Resource.Attribute.windowActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowActionBarOverlay = global::BLE.Client.Droid.Resource.Attribute.windowActionBarOverlay; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowActionModeOverlay = global::BLE.Client.Droid.Resource.Attribute.windowActionModeOverlay; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowFixedHeightMajor = global::BLE.Client.Droid.Resource.Attribute.windowFixedHeightMajor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowFixedHeightMinor = global::BLE.Client.Droid.Resource.Attribute.windowFixedHeightMinor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowFixedWidthMajor = global::BLE.Client.Droid.Resource.Attribute.windowFixedWidthMajor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowFixedWidthMinor = global::BLE.Client.Droid.Resource.Attribute.windowFixedWidthMinor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowMinWidthMajor = global::BLE.Client.Droid.Resource.Attribute.windowMinWidthMajor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowMinWidthMinor = global::BLE.Client.Droid.Resource.Attribute.windowMinWidthMinor; - global::MvvmCross.Droid.Support.Design.Resource.Attribute.windowNoTitle = global::BLE.Client.Droid.Resource.Attribute.windowNoTitle; - global::MvvmCross.Droid.Support.Design.Resource.Boolean.abc_action_bar_embed_tabs = global::BLE.Client.Droid.Resource.Boolean.abc_action_bar_embed_tabs; - global::MvvmCross.Droid.Support.Design.Resource.Boolean.abc_allow_stacked_button_bar = global::BLE.Client.Droid.Resource.Boolean.abc_allow_stacked_button_bar; - global::MvvmCross.Droid.Support.Design.Resource.Boolean.abc_config_actionMenuItemAllCaps = global::BLE.Client.Droid.Resource.Boolean.abc_config_actionMenuItemAllCaps; - global::MvvmCross.Droid.Support.Design.Resource.Boolean.mtrl_btn_textappearance_all_caps = global::BLE.Client.Droid.Resource.Boolean.mtrl_btn_textappearance_all_caps; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_background_cache_hint_selector_material_dark = global::BLE.Client.Droid.Resource.Color.abc_background_cache_hint_selector_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_background_cache_hint_selector_material_light = global::BLE.Client.Droid.Resource.Color.abc_background_cache_hint_selector_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_btn_colored_borderless_text_material = global::BLE.Client.Droid.Resource.Color.abc_btn_colored_borderless_text_material; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_btn_colored_text_material = global::BLE.Client.Droid.Resource.Color.abc_btn_colored_text_material; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_color_highlight_material = global::BLE.Client.Droid.Resource.Color.abc_color_highlight_material; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_hint_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.abc_hint_foreground_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_hint_foreground_material_light = global::BLE.Client.Droid.Resource.Color.abc_hint_foreground_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_input_method_navigation_guard = global::BLE.Client.Droid.Resource.Color.abc_input_method_navigation_guard; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_primary_text_disable_only_material_dark = global::BLE.Client.Droid.Resource.Color.abc_primary_text_disable_only_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_primary_text_disable_only_material_light = global::BLE.Client.Droid.Resource.Color.abc_primary_text_disable_only_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_primary_text_material_dark = global::BLE.Client.Droid.Resource.Color.abc_primary_text_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_primary_text_material_light = global::BLE.Client.Droid.Resource.Color.abc_primary_text_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_search_url_text = global::BLE.Client.Droid.Resource.Color.abc_search_url_text; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_search_url_text_normal = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_normal; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_search_url_text_pressed = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_pressed; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_search_url_text_selected = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_selected; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_secondary_text_material_dark = global::BLE.Client.Droid.Resource.Color.abc_secondary_text_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_secondary_text_material_light = global::BLE.Client.Droid.Resource.Color.abc_secondary_text_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_tint_btn_checkable = global::BLE.Client.Droid.Resource.Color.abc_tint_btn_checkable; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_tint_default = global::BLE.Client.Droid.Resource.Color.abc_tint_default; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_tint_edittext = global::BLE.Client.Droid.Resource.Color.abc_tint_edittext; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_tint_seek_thumb = global::BLE.Client.Droid.Resource.Color.abc_tint_seek_thumb; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_tint_spinner = global::BLE.Client.Droid.Resource.Color.abc_tint_spinner; - global::MvvmCross.Droid.Support.Design.Resource.Color.abc_tint_switch_track = global::BLE.Client.Droid.Resource.Color.abc_tint_switch_track; - global::MvvmCross.Droid.Support.Design.Resource.Color.accent_material_dark = global::BLE.Client.Droid.Resource.Color.accent_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.accent_material_light = global::BLE.Client.Droid.Resource.Color.accent_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.background_floating_material_dark = global::BLE.Client.Droid.Resource.Color.background_floating_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.background_floating_material_light = global::BLE.Client.Droid.Resource.Color.background_floating_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.background_material_dark = global::BLE.Client.Droid.Resource.Color.background_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.background_material_light = global::BLE.Client.Droid.Resource.Color.background_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.bright_foreground_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_disabled_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.bright_foreground_disabled_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_disabled_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.bright_foreground_inverse_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_inverse_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.bright_foreground_inverse_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_inverse_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.bright_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.bright_foreground_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.button_material_dark = global::BLE.Client.Droid.Resource.Color.button_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.button_material_light = global::BLE.Client.Droid.Resource.Color.button_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.cardview_dark_background = global::BLE.Client.Droid.Resource.Color.cardview_dark_background; - global::MvvmCross.Droid.Support.Design.Resource.Color.cardview_light_background = global::BLE.Client.Droid.Resource.Color.cardview_light_background; - global::MvvmCross.Droid.Support.Design.Resource.Color.cardview_shadow_end_color = global::BLE.Client.Droid.Resource.Color.cardview_shadow_end_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.cardview_shadow_start_color = global::BLE.Client.Droid.Resource.Color.cardview_shadow_start_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_bottom_navigation_shadow_color = global::BLE.Client.Droid.Resource.Color.design_bottom_navigation_shadow_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_default_color_primary = global::BLE.Client.Droid.Resource.Color.design_default_color_primary; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_default_color_primary_dark = global::BLE.Client.Droid.Resource.Color.design_default_color_primary_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_error = global::BLE.Client.Droid.Resource.Color.design_error; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_fab_shadow_end_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_end_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_fab_shadow_mid_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_mid_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_fab_shadow_start_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_start_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_fab_stroke_end_inner_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_end_inner_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_fab_stroke_end_outer_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_end_outer_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_fab_stroke_top_inner_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_top_inner_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_fab_stroke_top_outer_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_top_outer_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_snackbar_background_color = global::BLE.Client.Droid.Resource.Color.design_snackbar_background_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.design_tint_password_toggle = global::BLE.Client.Droid.Resource.Color.design_tint_password_toggle; - global::MvvmCross.Droid.Support.Design.Resource.Color.dim_foreground_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.dim_foreground_disabled_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.dim_foreground_disabled_material_light = global::BLE.Client.Droid.Resource.Color.dim_foreground_disabled_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.dim_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.dim_foreground_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.dim_foreground_material_light = global::BLE.Client.Droid.Resource.Color.dim_foreground_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.error_color_material_dark = global::BLE.Client.Droid.Resource.Color.error_color_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.error_color_material_light = global::BLE.Client.Droid.Resource.Color.error_color_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.foreground_material_dark = global::BLE.Client.Droid.Resource.Color.foreground_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.foreground_material_light = global::BLE.Client.Droid.Resource.Color.foreground_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.highlighted_text_material_dark = global::BLE.Client.Droid.Resource.Color.highlighted_text_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.highlighted_text_material_light = global::BLE.Client.Droid.Resource.Color.highlighted_text_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_blue_grey_800 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_800; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_blue_grey_900 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_900; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_blue_grey_950 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_950; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_deep_teal_200 = global::BLE.Client.Droid.Resource.Color.material_deep_teal_200; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_deep_teal_500 = global::BLE.Client.Droid.Resource.Color.material_deep_teal_500; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_grey_100 = global::BLE.Client.Droid.Resource.Color.material_grey_100; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_grey_300 = global::BLE.Client.Droid.Resource.Color.material_grey_300; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_grey_50 = global::BLE.Client.Droid.Resource.Color.material_grey_50; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_grey_600 = global::BLE.Client.Droid.Resource.Color.material_grey_600; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_grey_800 = global::BLE.Client.Droid.Resource.Color.material_grey_800; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_grey_850 = global::BLE.Client.Droid.Resource.Color.material_grey_850; - global::MvvmCross.Droid.Support.Design.Resource.Color.material_grey_900 = global::BLE.Client.Droid.Resource.Color.material_grey_900; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_bottom_nav_colored_item_tint = global::BLE.Client.Droid.Resource.Color.mtrl_bottom_nav_colored_item_tint; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_bottom_nav_item_tint = global::BLE.Client.Droid.Resource.Color.mtrl_bottom_nav_item_tint; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_btn_bg_color_disabled = global::BLE.Client.Droid.Resource.Color.mtrl_btn_bg_color_disabled; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_btn_bg_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_bg_color_selector; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_btn_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_ripple_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_btn_stroke_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_stroke_color_selector; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_btn_text_btn_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_btn_ripple_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_btn_text_color_disabled = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_color_disabled; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_btn_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_color_selector; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_btn_transparent_bg_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_transparent_bg_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_chip_background_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_background_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_chip_close_icon_tint = global::BLE.Client.Droid.Resource.Color.mtrl_chip_close_icon_tint; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_chip_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_ripple_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_chip_text_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_text_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_fab_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_fab_ripple_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_scrim_color = global::BLE.Client.Droid.Resource.Color.mtrl_scrim_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_tabs_colored_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_colored_ripple_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_tabs_icon_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_icon_color_selector; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_tabs_icon_color_selector_colored = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_icon_color_selector_colored; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_tabs_legacy_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_legacy_text_color_selector; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_tabs_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_ripple_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_text_btn_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_text_btn_text_color_selector; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_textinput_default_box_stroke_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_default_box_stroke_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_textinput_disabled_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_disabled_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_textinput_filled_box_default_background_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_filled_box_default_background_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.mtrl_textinput_hovered_box_stroke_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_hovered_box_stroke_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.notification_action_color_filter = global::BLE.Client.Droid.Resource.Color.notification_action_color_filter; - global::MvvmCross.Droid.Support.Design.Resource.Color.notification_icon_bg_color = global::BLE.Client.Droid.Resource.Color.notification_icon_bg_color; - global::MvvmCross.Droid.Support.Design.Resource.Color.primary_dark_material_dark = global::BLE.Client.Droid.Resource.Color.primary_dark_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.primary_dark_material_light = global::BLE.Client.Droid.Resource.Color.primary_dark_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.primary_material_dark = global::BLE.Client.Droid.Resource.Color.primary_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.primary_material_light = global::BLE.Client.Droid.Resource.Color.primary_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.primary_text_default_material_dark = global::BLE.Client.Droid.Resource.Color.primary_text_default_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.primary_text_default_material_light = global::BLE.Client.Droid.Resource.Color.primary_text_default_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.primary_text_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.primary_text_disabled_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.primary_text_disabled_material_light = global::BLE.Client.Droid.Resource.Color.primary_text_disabled_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.ripple_material_dark = global::BLE.Client.Droid.Resource.Color.ripple_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.ripple_material_light = global::BLE.Client.Droid.Resource.Color.ripple_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.secondary_text_default_material_dark = global::BLE.Client.Droid.Resource.Color.secondary_text_default_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.secondary_text_default_material_light = global::BLE.Client.Droid.Resource.Color.secondary_text_default_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.secondary_text_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.secondary_text_disabled_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.secondary_text_disabled_material_light = global::BLE.Client.Droid.Resource.Color.secondary_text_disabled_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.switch_thumb_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_disabled_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.switch_thumb_disabled_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_disabled_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.switch_thumb_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.switch_thumb_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.switch_thumb_normal_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_normal_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.switch_thumb_normal_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_normal_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Color.tooltip_background_dark = global::BLE.Client.Droid.Resource.Color.tooltip_background_dark; - global::MvvmCross.Droid.Support.Design.Resource.Color.tooltip_background_light = global::BLE.Client.Droid.Resource.Color.tooltip_background_light; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_content_inset_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_content_inset_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_content_inset_with_nav = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_content_inset_with_nav; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_default_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_height_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_default_padding_end_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_padding_end_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_default_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_padding_start_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_elevation_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_elevation_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_icon_vertical_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_icon_vertical_padding_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_overflow_padding_end_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_overflow_padding_end_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_overflow_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_overflow_padding_start_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_stacked_max_height = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_stacked_max_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_stacked_tab_max_width = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_stacked_tab_max_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_bar_subtitle_top_margin_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_subtitle_top_margin_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_button_min_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_height_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_button_min_width_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_width_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_action_button_min_width_overflow_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_width_overflow_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_alert_dialog_button_bar_height = global::BLE.Client.Droid.Resource.Dimension.abc_alert_dialog_button_bar_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_alert_dialog_button_dimen = global::BLE.Client.Droid.Resource.Dimension.abc_alert_dialog_button_dimen; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_button_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_inset_horizontal_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_button_inset_vertical_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_inset_vertical_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_button_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_padding_horizontal_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_button_padding_vertical_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_padding_vertical_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_cascading_menus_min_smallest_width = global::BLE.Client.Droid.Resource.Dimension.abc_cascading_menus_min_smallest_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_config_prefDialogWidth = global::BLE.Client.Droid.Resource.Dimension.abc_config_prefDialogWidth; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_control_corner_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_corner_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_control_inset_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_inset_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_control_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_padding_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_corner_radius_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_corner_radius_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_fixed_height_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_height_major; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_fixed_height_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_height_minor; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_fixed_width_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_width_major; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_fixed_width_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_width_minor; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_list_padding_top_no_title = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_list_padding_top_no_title; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_min_width_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_min_width_major; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_min_width_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_min_width_minor; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_padding_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_padding_top_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_padding_top_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dialog_title_divider_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_title_divider_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_disabled_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.abc_disabled_alpha_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_disabled_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.abc_disabled_alpha_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dropdownitem_icon_width = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_icon_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dropdownitem_text_padding_left = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_text_padding_left; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_dropdownitem_text_padding_right = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_text_padding_right; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_edit_text_inset_bottom_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_bottom_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_edit_text_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_horizontal_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_edit_text_inset_top_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_top_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_floating_window_z = global::BLE.Client.Droid.Resource.Dimension.abc_floating_window_z; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_list_item_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_list_item_padding_horizontal_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_panel_menu_list_width = global::BLE.Client.Droid.Resource.Dimension.abc_panel_menu_list_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_progress_bar_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_progress_bar_height_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_search_view_preferred_height = global::BLE.Client.Droid.Resource.Dimension.abc_search_view_preferred_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_search_view_preferred_width = global::BLE.Client.Droid.Resource.Dimension.abc_search_view_preferred_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_seekbar_track_background_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_seekbar_track_background_height_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_seekbar_track_progress_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_seekbar_track_progress_height_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_select_dialog_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_select_dialog_padding_start_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_switch_padding = global::BLE.Client.Droid.Resource.Dimension.abc_switch_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_body_1_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_body_1_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_body_2_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_body_2_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_button_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_button_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_caption_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_caption_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_display_1_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_1_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_display_2_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_2_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_display_3_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_3_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_display_4_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_4_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_headline_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_headline_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_large_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_large_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_medium_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_medium_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_menu_header_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_menu_header_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_menu_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_menu_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_small_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_small_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_subhead_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_subhead_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_subtitle_material_toolbar = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_subtitle_material_toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_title_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_title_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.abc_text_size_title_material_toolbar = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_title_material_toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.cardview_compat_inset_shadow = global::BLE.Client.Droid.Resource.Dimension.cardview_compat_inset_shadow; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.cardview_default_elevation = global::BLE.Client.Droid.Resource.Dimension.cardview_default_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.cardview_default_radius = global::BLE.Client.Droid.Resource.Dimension.cardview_default_radius; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.compat_button_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_inset_horizontal_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.compat_button_inset_vertical_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_inset_vertical_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.compat_button_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_padding_horizontal_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.compat_button_padding_vertical_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_padding_vertical_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.compat_control_corner_material = global::BLE.Client.Droid.Resource.Dimension.compat_control_corner_material; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.compat_notification_large_icon_max_height = global::BLE.Client.Droid.Resource.Dimension.compat_notification_large_icon_max_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.compat_notification_large_icon_max_width = global::BLE.Client.Droid.Resource.Dimension.compat_notification_large_icon_max_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_appbar_elevation = global::BLE.Client.Droid.Resource.Dimension.design_appbar_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_active_item_max_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_item_max_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_active_item_min_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_item_min_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_active_text_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_text_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_height = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_icon_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_icon_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_item_max_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_item_max_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_item_min_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_item_min_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_margin = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_margin; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_shadow_height = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_shadow_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_navigation_text_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_text_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_sheet_modal_elevation = global::BLE.Client.Droid.Resource.Dimension.design_bottom_sheet_modal_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_bottom_sheet_peek_height_min = global::BLE.Client.Droid.Resource.Dimension.design_bottom_sheet_peek_height_min; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_fab_border_width = global::BLE.Client.Droid.Resource.Dimension.design_fab_border_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_fab_elevation = global::BLE.Client.Droid.Resource.Dimension.design_fab_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_fab_image_size = global::BLE.Client.Droid.Resource.Dimension.design_fab_image_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_fab_size_mini = global::BLE.Client.Droid.Resource.Dimension.design_fab_size_mini; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_fab_size_normal = global::BLE.Client.Droid.Resource.Dimension.design_fab_size_normal; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_fab_translation_z_hovered_focused = global::BLE.Client.Droid.Resource.Dimension.design_fab_translation_z_hovered_focused; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_fab_translation_z_pressed = global::BLE.Client.Droid.Resource.Dimension.design_fab_translation_z_pressed; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.design_navigation_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_navigation_icon_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_icon_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_navigation_icon_size = global::BLE.Client.Droid.Resource.Dimension.design_navigation_icon_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_navigation_item_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_item_horizontal_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_navigation_item_icon_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_item_icon_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_navigation_max_width = global::BLE.Client.Droid.Resource.Dimension.design_navigation_max_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_navigation_padding_bottom = global::BLE.Client.Droid.Resource.Dimension.design_navigation_padding_bottom; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_navigation_separator_vertical_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_separator_vertical_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_action_inline_max_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_action_inline_max_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_background_corner_radius = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_background_corner_radius; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_elevation = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_extra_spacing_horizontal = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_extra_spacing_horizontal; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_max_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_max_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_min_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_min_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_padding_horizontal = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_horizontal; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_padding_vertical = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_vertical; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_padding_vertical_2lines = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_vertical_2lines; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_snackbar_text_size = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_text_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_tab_max_width = global::BLE.Client.Droid.Resource.Dimension.design_tab_max_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_tab_scrollable_min_width = global::BLE.Client.Droid.Resource.Dimension.design_tab_scrollable_min_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_tab_text_size = global::BLE.Client.Droid.Resource.Dimension.design_tab_text_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_tab_text_size_2line = global::BLE.Client.Droid.Resource.Dimension.design_tab_text_size_2line; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.design_textinput_caption_translate_y = global::BLE.Client.Droid.Resource.Dimension.design_textinput_caption_translate_y; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.disabled_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.disabled_alpha_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.disabled_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.disabled_alpha_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.fastscroll_default_thickness = global::BLE.Client.Droid.Resource.Dimension.fastscroll_default_thickness; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.fastscroll_margin = global::BLE.Client.Droid.Resource.Dimension.fastscroll_margin; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.fastscroll_minimum_range = global::BLE.Client.Droid.Resource.Dimension.fastscroll_minimum_range; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.highlight_alpha_material_colored = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_colored; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.highlight_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.highlight_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.hint_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.hint_alpha_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.hint_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.hint_alpha_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.hint_pressed_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.hint_pressed_alpha_material_dark; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.hint_pressed_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.hint_pressed_alpha_material_light; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.item_touch_helper_swipe_escape_velocity = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_swipe_escape_velocity; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_bottomappbar_height = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_corner_radius; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_dialog_btn_min_width = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_dialog_btn_min_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_disabled_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_disabled_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_disabled_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_disabled_z; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_focused_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_focused_z; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_hovered_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_hovered_z; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_icon_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_icon_btn_padding_left; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_icon_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_inset = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_inset; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_letter_spacing = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_letter_spacing; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_padding_bottom = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_bottom; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_left; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_padding_right = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_right; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_padding_top = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_top; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_pressed_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_pressed_z; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_stroke_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_stroke_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_text_btn_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_icon_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_text_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_left; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_text_btn_padding_right = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_right; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_text_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_btn_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_z; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_card_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_card_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_card_spacing = global::BLE.Client.Droid.Resource.Dimension.mtrl_card_spacing; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_chip_pressed_translation_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_chip_pressed_translation_z; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_chip_text_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_chip_text_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_fab_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_fab_translation_z_hovered_focused = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_translation_z_hovered_focused; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_fab_translation_z_pressed = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_translation_z_pressed; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_navigation_item_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_item_horizontal_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_navigation_item_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_item_icon_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_snackbar_background_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_snackbar_background_corner_radius; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_snackbar_margin = global::BLE.Client.Droid.Resource.Dimension.mtrl_snackbar_margin; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_textinput_box_bottom_offset = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_bottom_offset; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_textinput_box_corner_radius_medium = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_medium; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_textinput_box_corner_radius_small = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_small; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_textinput_box_label_cutout_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_label_cutout_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_textinput_box_padding_end = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_padding_end; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_textinput_box_stroke_width_default = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_default; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_textinput_box_stroke_width_focused = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_focused; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.mtrl_toolbar_default_height = global::BLE.Client.Droid.Resource.Dimension.mtrl_toolbar_default_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_action_icon_size = global::BLE.Client.Droid.Resource.Dimension.notification_action_icon_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_action_text_size = global::BLE.Client.Droid.Resource.Dimension.notification_action_text_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_big_circle_margin = global::BLE.Client.Droid.Resource.Dimension.notification_big_circle_margin; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_content_margin_start = global::BLE.Client.Droid.Resource.Dimension.notification_content_margin_start; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_large_icon_height = global::BLE.Client.Droid.Resource.Dimension.notification_large_icon_height; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_large_icon_width = global::BLE.Client.Droid.Resource.Dimension.notification_large_icon_width; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_main_column_padding_top = global::BLE.Client.Droid.Resource.Dimension.notification_main_column_padding_top; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_media_narrow_margin = global::BLE.Client.Droid.Resource.Dimension.notification_media_narrow_margin; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_right_icon_size = global::BLE.Client.Droid.Resource.Dimension.notification_right_icon_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_right_side_padding_top = global::BLE.Client.Droid.Resource.Dimension.notification_right_side_padding_top; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_small_icon_background_padding = global::BLE.Client.Droid.Resource.Dimension.notification_small_icon_background_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_small_icon_size_as_large = global::BLE.Client.Droid.Resource.Dimension.notification_small_icon_size_as_large; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_subtext_size = global::BLE.Client.Droid.Resource.Dimension.notification_subtext_size; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_top_pad = global::BLE.Client.Droid.Resource.Dimension.notification_top_pad; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.notification_top_pad_large_text = global::BLE.Client.Droid.Resource.Dimension.notification_top_pad_large_text; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.tooltip_corner_radius = global::BLE.Client.Droid.Resource.Dimension.tooltip_corner_radius; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.tooltip_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.tooltip_horizontal_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.tooltip_margin = global::BLE.Client.Droid.Resource.Dimension.tooltip_margin; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.tooltip_precise_anchor_extra_offset = global::BLE.Client.Droid.Resource.Dimension.tooltip_precise_anchor_extra_offset; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.tooltip_precise_anchor_threshold = global::BLE.Client.Droid.Resource.Dimension.tooltip_precise_anchor_threshold; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.tooltip_vertical_padding = global::BLE.Client.Droid.Resource.Dimension.tooltip_vertical_padding; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.tooltip_y_offset_non_touch = global::BLE.Client.Droid.Resource.Dimension.tooltip_y_offset_non_touch; - global::MvvmCross.Droid.Support.Design.Resource.Dimension.tooltip_y_offset_touch = global::BLE.Client.Droid.Resource.Dimension.tooltip_y_offset_touch; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ab_share_pack_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ab_share_pack_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_action_bar_item_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_action_bar_item_background_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_borderless_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_borderless_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_check_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_check_to_on_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_000; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_check_to_on_mtrl_015 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_015; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_colored_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_colored_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_default_mtrl_shape = global::BLE.Client.Droid.Resource.Drawable.abc_btn_default_mtrl_shape; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_radio_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_radio_to_on_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_000; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_radio_to_on_mtrl_015 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_015; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_cab_background_internal_bg = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_internal_bg; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_cab_background_top_material = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_top_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_cab_background_top_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_top_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_control_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_control_background_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_dialog_material_background = global::BLE.Client.Droid.Resource.Drawable.abc_dialog_material_background; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_edit_text_material = global::BLE.Client.Droid.Resource.Drawable.abc_edit_text_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_ab_back_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_ab_back_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_clear_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_clear_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_go_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_go_search_api_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_menu_overflow_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_overflow_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_menu_share_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_share_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_search_api_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_star_black_16dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_16dp; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_star_black_36dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_36dp; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_star_black_48dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_48dp; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_star_half_black_16dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_16dp; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_star_half_black_36dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_36dp; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_star_half_black_48dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_48dp; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ic_voice_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_voice_search_api_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_item_background_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_item_background_holo_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_item_background_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_item_background_holo_light; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_divider_material = global::BLE.Client.Droid.Resource.Drawable.abc_list_divider_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_divider_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_list_divider_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_focused_holo = global::BLE.Client.Droid.Resource.Drawable.abc_list_focused_holo; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_longpressed_holo = global::BLE.Client.Droid.Resource.Drawable.abc_list_longpressed_holo; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_pressed_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_pressed_holo_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_pressed_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_pressed_holo_light; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_selector_background_transition_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_selector_background_transition_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_light; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_selector_disabled_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_disabled_holo_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_selector_disabled_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_disabled_holo_light; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_selector_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_holo_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_list_selector_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_holo_light; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult = global::BLE.Client.Droid.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_popup_background_mtrl_mult = global::BLE.Client.Droid.Resource.Drawable.abc_popup_background_mtrl_mult; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ratingbar_indicator_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_indicator_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ratingbar_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_ratingbar_small_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_small_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005 = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_scrubber_primary_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_primary_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_scrubber_track_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_track_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_seekbar_thumb_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_thumb_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_seekbar_tick_mark_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_tick_mark_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_seekbar_track_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_track_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_spinner_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_spinner_mtrl_am_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_spinner_textfield_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_spinner_textfield_background_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_switch_thumb_material = global::BLE.Client.Droid.Resource.Drawable.abc_switch_thumb_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_switch_track_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_switch_track_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_tab_indicator_material = global::BLE.Client.Droid.Resource.Drawable.abc_tab_indicator_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_tab_indicator_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_tab_indicator_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_text_cursor_material = global::BLE.Client.Droid.Resource.Drawable.abc_text_cursor_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_text_select_handle_left_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_text_select_handle_left_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_light; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_text_select_handle_middle_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_light; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_text_select_handle_right_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_text_select_handle_right_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_light; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_textfield_activated_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_activated_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_textfield_default_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_default_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_textfield_search_default_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_default_mtrl_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_textfield_search_material = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_material; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.abc_vector_test = global::BLE.Client.Droid.Resource.Drawable.abc_vector_test; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.avd_hide_password = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.avd_hide_password_1 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_1; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.avd_hide_password_2 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_2; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.avd_hide_password_3 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_3; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.avd_show_password = global::BLE.Client.Droid.Resource.Drawable.avd_show_password; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.avd_show_password_1 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_1; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.avd_show_password_2 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_2; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.avd_show_password_3 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_3; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.design_bottom_navigation_item_background = global::BLE.Client.Droid.Resource.Drawable.design_bottom_navigation_item_background; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.design_fab_background = global::BLE.Client.Droid.Resource.Drawable.design_fab_background; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.design_ic_visibility = global::BLE.Client.Droid.Resource.Drawable.design_ic_visibility; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.design_ic_visibility_off = global::BLE.Client.Droid.Resource.Drawable.design_ic_visibility_off; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.design_password_eye = global::BLE.Client.Droid.Resource.Drawable.design_password_eye; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.design_snackbar_background = global::BLE.Client.Droid.Resource.Drawable.design_snackbar_background; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.ic_mtrl_chip_checked_black = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_checked_black; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.ic_mtrl_chip_checked_circle = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_checked_circle; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.ic_mtrl_chip_close_circle = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_close_circle; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.mtrl_snackbar_background = global::BLE.Client.Droid.Resource.Drawable.mtrl_snackbar_background; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.mtrl_tabs_default_indicator = global::BLE.Client.Droid.Resource.Drawable.mtrl_tabs_default_indicator; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.navigation_empty_icon = global::BLE.Client.Droid.Resource.Drawable.navigation_empty_icon; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_action_background = global::BLE.Client.Droid.Resource.Drawable.notification_action_background; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_bg = global::BLE.Client.Droid.Resource.Drawable.notification_bg; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_bg_low = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_bg_low_normal = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low_normal; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_bg_low_pressed = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low_pressed; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_bg_normal = global::BLE.Client.Droid.Resource.Drawable.notification_bg_normal; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_bg_normal_pressed = global::BLE.Client.Droid.Resource.Drawable.notification_bg_normal_pressed; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_icon_background = global::BLE.Client.Droid.Resource.Drawable.notification_icon_background; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_template_icon_bg = global::BLE.Client.Droid.Resource.Drawable.notification_template_icon_bg; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_template_icon_low_bg = global::BLE.Client.Droid.Resource.Drawable.notification_template_icon_low_bg; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notification_tile_bg = global::BLE.Client.Droid.Resource.Drawable.notification_tile_bg; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.notify_panel_notification_icon_bg = global::BLE.Client.Droid.Resource.Drawable.notify_panel_notification_icon_bg; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.tooltip_frame_dark = global::BLE.Client.Droid.Resource.Drawable.tooltip_frame_dark; - global::MvvmCross.Droid.Support.Design.Resource.Drawable.tooltip_frame_light = global::BLE.Client.Droid.Resource.Drawable.tooltip_frame_light; - global::MvvmCross.Droid.Support.Design.Resource.Id.ALT = global::BLE.Client.Droid.Resource.Id.ALT; - global::MvvmCross.Droid.Support.Design.Resource.Id.CTRL = global::BLE.Client.Droid.Resource.Id.CTRL; - global::MvvmCross.Droid.Support.Design.Resource.Id.FUNCTION = global::BLE.Client.Droid.Resource.Id.FUNCTION; - global::MvvmCross.Droid.Support.Design.Resource.Id.META = global::BLE.Client.Droid.Resource.Id.META; - global::MvvmCross.Droid.Support.Design.Resource.Id.MvvmCrossTagId = global::BLE.Client.Droid.Resource.Id.MvvmCrossTagId; - global::MvvmCross.Droid.Support.Design.Resource.Id.MvxBindingTagUnique = global::BLE.Client.Droid.Resource.Id.MvxBindingTagUnique; - global::MvvmCross.Droid.Support.Design.Resource.Id.SHIFT = global::BLE.Client.Droid.Resource.Id.SHIFT; - global::MvvmCross.Droid.Support.Design.Resource.Id.SYM = global::BLE.Client.Droid.Resource.Id.SYM; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_bar = global::BLE.Client.Droid.Resource.Id.action_bar; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_bar_activity_content = global::BLE.Client.Droid.Resource.Id.action_bar_activity_content; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_bar_container = global::BLE.Client.Droid.Resource.Id.action_bar_container; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_bar_root = global::BLE.Client.Droid.Resource.Id.action_bar_root; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_bar_spinner = global::BLE.Client.Droid.Resource.Id.action_bar_spinner; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_bar_subtitle = global::BLE.Client.Droid.Resource.Id.action_bar_subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_bar_title = global::BLE.Client.Droid.Resource.Id.action_bar_title; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_container = global::BLE.Client.Droid.Resource.Id.action_container; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_context_bar = global::BLE.Client.Droid.Resource.Id.action_context_bar; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_divider = global::BLE.Client.Droid.Resource.Id.action_divider; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_image = global::BLE.Client.Droid.Resource.Id.action_image; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_menu_divider = global::BLE.Client.Droid.Resource.Id.action_menu_divider; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_menu_presenter = global::BLE.Client.Droid.Resource.Id.action_menu_presenter; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_mode_bar = global::BLE.Client.Droid.Resource.Id.action_mode_bar; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_mode_bar_stub = global::BLE.Client.Droid.Resource.Id.action_mode_bar_stub; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_mode_close_button = global::BLE.Client.Droid.Resource.Id.action_mode_close_button; - global::MvvmCross.Droid.Support.Design.Resource.Id.action_text = global::BLE.Client.Droid.Resource.Id.action_text; - global::MvvmCross.Droid.Support.Design.Resource.Id.actions = global::BLE.Client.Droid.Resource.Id.actions; - global::MvvmCross.Droid.Support.Design.Resource.Id.activity_chooser_view_content = global::BLE.Client.Droid.Resource.Id.activity_chooser_view_content; - global::MvvmCross.Droid.Support.Design.Resource.Id.add = global::BLE.Client.Droid.Resource.Id.add; - global::MvvmCross.Droid.Support.Design.Resource.Id.alertTitle = global::BLE.Client.Droid.Resource.Id.alertTitle; - global::MvvmCross.Droid.Support.Design.Resource.Id.all = global::BLE.Client.Droid.Resource.Id.all; - global::MvvmCross.Droid.Support.Design.Resource.Id.always = global::BLE.Client.Droid.Resource.Id.always; - global::MvvmCross.Droid.Support.Design.Resource.Id.async = global::BLE.Client.Droid.Resource.Id.async; - global::MvvmCross.Droid.Support.Design.Resource.Id.auto = global::BLE.Client.Droid.Resource.Id.auto; - global::MvvmCross.Droid.Support.Design.Resource.Id.beginning = global::BLE.Client.Droid.Resource.Id.beginning; - global::MvvmCross.Droid.Support.Design.Resource.Id.blocking = global::BLE.Client.Droid.Resource.Id.blocking; - global::MvvmCross.Droid.Support.Design.Resource.Id.bottom = global::BLE.Client.Droid.Resource.Id.bottom; - global::MvvmCross.Droid.Support.Design.Resource.Id.buttonPanel = global::BLE.Client.Droid.Resource.Id.buttonPanel; - global::MvvmCross.Droid.Support.Design.Resource.Id.center = global::BLE.Client.Droid.Resource.Id.center; - global::MvvmCross.Droid.Support.Design.Resource.Id.center_horizontal = global::BLE.Client.Droid.Resource.Id.center_horizontal; - global::MvvmCross.Droid.Support.Design.Resource.Id.center_vertical = global::BLE.Client.Droid.Resource.Id.center_vertical; - global::MvvmCross.Droid.Support.Design.Resource.Id.checkbox = global::BLE.Client.Droid.Resource.Id.checkbox; - global::MvvmCross.Droid.Support.Design.Resource.Id.chronometer = global::BLE.Client.Droid.Resource.Id.chronometer; - global::MvvmCross.Droid.Support.Design.Resource.Id.clip_horizontal = global::BLE.Client.Droid.Resource.Id.clip_horizontal; - global::MvvmCross.Droid.Support.Design.Resource.Id.clip_vertical = global::BLE.Client.Droid.Resource.Id.clip_vertical; - global::MvvmCross.Droid.Support.Design.Resource.Id.collapseActionView = global::BLE.Client.Droid.Resource.Id.collapseActionView; - global::MvvmCross.Droid.Support.Design.Resource.Id.container = global::BLE.Client.Droid.Resource.Id.container; - global::MvvmCross.Droid.Support.Design.Resource.Id.content = global::BLE.Client.Droid.Resource.Id.content; - global::MvvmCross.Droid.Support.Design.Resource.Id.contentPanel = global::BLE.Client.Droid.Resource.Id.contentPanel; - global::MvvmCross.Droid.Support.Design.Resource.Id.coordinator = global::BLE.Client.Droid.Resource.Id.coordinator; - global::MvvmCross.Droid.Support.Design.Resource.Id.custom = global::BLE.Client.Droid.Resource.Id.custom; - global::MvvmCross.Droid.Support.Design.Resource.Id.customPanel = global::BLE.Client.Droid.Resource.Id.customPanel; - global::MvvmCross.Droid.Support.Design.Resource.Id.decor_content_parent = global::BLE.Client.Droid.Resource.Id.decor_content_parent; - global::MvvmCross.Droid.Support.Design.Resource.Id.default_activity_button = global::BLE.Client.Droid.Resource.Id.default_activity_button; - global::MvvmCross.Droid.Support.Design.Resource.Id.design_bottom_sheet = global::BLE.Client.Droid.Resource.Id.design_bottom_sheet; - global::MvvmCross.Droid.Support.Design.Resource.Id.design_menu_item_action_area = global::BLE.Client.Droid.Resource.Id.design_menu_item_action_area; - global::MvvmCross.Droid.Support.Design.Resource.Id.design_menu_item_action_area_stub = global::BLE.Client.Droid.Resource.Id.design_menu_item_action_area_stub; - global::MvvmCross.Droid.Support.Design.Resource.Id.design_menu_item_text = global::BLE.Client.Droid.Resource.Id.design_menu_item_text; - global::MvvmCross.Droid.Support.Design.Resource.Id.design_navigation_view = global::BLE.Client.Droid.Resource.Id.design_navigation_view; - global::MvvmCross.Droid.Support.Design.Resource.Id.disableHome = global::BLE.Client.Droid.Resource.Id.disableHome; - global::MvvmCross.Droid.Support.Design.Resource.Id.edit_query = global::BLE.Client.Droid.Resource.Id.edit_query; - global::MvvmCross.Droid.Support.Design.Resource.Id.end = global::BLE.Client.Droid.Resource.Id.end; - global::MvvmCross.Droid.Support.Design.Resource.Id.enterAlways = global::BLE.Client.Droid.Resource.Id.enterAlways; - global::MvvmCross.Droid.Support.Design.Resource.Id.enterAlwaysCollapsed = global::BLE.Client.Droid.Resource.Id.enterAlwaysCollapsed; - global::MvvmCross.Droid.Support.Design.Resource.Id.exitUntilCollapsed = global::BLE.Client.Droid.Resource.Id.exitUntilCollapsed; - global::MvvmCross.Droid.Support.Design.Resource.Id.expand_activities_button = global::BLE.Client.Droid.Resource.Id.expand_activities_button; - global::MvvmCross.Droid.Support.Design.Resource.Id.expanded_menu = global::BLE.Client.Droid.Resource.Id.expanded_menu; - global::MvvmCross.Droid.Support.Design.Resource.Id.fill = global::BLE.Client.Droid.Resource.Id.fill; - global::MvvmCross.Droid.Support.Design.Resource.Id.fill_horizontal = global::BLE.Client.Droid.Resource.Id.fill_horizontal; - global::MvvmCross.Droid.Support.Design.Resource.Id.fill_vertical = global::BLE.Client.Droid.Resource.Id.fill_vertical; - global::MvvmCross.Droid.Support.Design.Resource.Id.filled = global::BLE.Client.Droid.Resource.Id.filled; - global::MvvmCross.Droid.Support.Design.Resource.Id.@fixed = global::BLE.Client.Droid.Resource.Id.@fixed; - global::MvvmCross.Droid.Support.Design.Resource.Id.forever = global::BLE.Client.Droid.Resource.Id.forever; - global::MvvmCross.Droid.Support.Design.Resource.Id.ghost_view = global::BLE.Client.Droid.Resource.Id.ghost_view; - global::MvvmCross.Droid.Support.Design.Resource.Id.group_divider = global::BLE.Client.Droid.Resource.Id.group_divider; - global::MvvmCross.Droid.Support.Design.Resource.Id.home = global::BLE.Client.Droid.Resource.Id.home; - global::MvvmCross.Droid.Support.Design.Resource.Id.homeAsUp = global::BLE.Client.Droid.Resource.Id.homeAsUp; - global::MvvmCross.Droid.Support.Design.Resource.Id.icon = global::BLE.Client.Droid.Resource.Id.icon; - global::MvvmCross.Droid.Support.Design.Resource.Id.icon_group = global::BLE.Client.Droid.Resource.Id.icon_group; - global::MvvmCross.Droid.Support.Design.Resource.Id.ifRoom = global::BLE.Client.Droid.Resource.Id.ifRoom; - global::MvvmCross.Droid.Support.Design.Resource.Id.image = global::BLE.Client.Droid.Resource.Id.image; - global::MvvmCross.Droid.Support.Design.Resource.Id.info = global::BLE.Client.Droid.Resource.Id.info; - global::MvvmCross.Droid.Support.Design.Resource.Id.italic = global::BLE.Client.Droid.Resource.Id.italic; - global::MvvmCross.Droid.Support.Design.Resource.Id.item_touch_helper_previous_elevation = global::BLE.Client.Droid.Resource.Id.item_touch_helper_previous_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Id.labeled = global::BLE.Client.Droid.Resource.Id.labeled; - global::MvvmCross.Droid.Support.Design.Resource.Id.largeLabel = global::BLE.Client.Droid.Resource.Id.largeLabel; - global::MvvmCross.Droid.Support.Design.Resource.Id.left = global::BLE.Client.Droid.Resource.Id.left; - global::MvvmCross.Droid.Support.Design.Resource.Id.line1 = global::BLE.Client.Droid.Resource.Id.line1; - global::MvvmCross.Droid.Support.Design.Resource.Id.line3 = global::BLE.Client.Droid.Resource.Id.line3; - global::MvvmCross.Droid.Support.Design.Resource.Id.listMode = global::BLE.Client.Droid.Resource.Id.listMode; - global::MvvmCross.Droid.Support.Design.Resource.Id.list_item = global::BLE.Client.Droid.Resource.Id.list_item; - global::MvvmCross.Droid.Support.Design.Resource.Id.masked = global::BLE.Client.Droid.Resource.Id.masked; - global::MvvmCross.Droid.Support.Design.Resource.Id.message = global::BLE.Client.Droid.Resource.Id.message; - global::MvvmCross.Droid.Support.Design.Resource.Id.middle = global::BLE.Client.Droid.Resource.Id.middle; - global::MvvmCross.Droid.Support.Design.Resource.Id.mini = global::BLE.Client.Droid.Resource.Id.mini; - global::MvvmCross.Droid.Support.Design.Resource.Id.mtrl_child_content_container = global::BLE.Client.Droid.Resource.Id.mtrl_child_content_container; - global::MvvmCross.Droid.Support.Design.Resource.Id.mtrl_internal_children_alpha_tag = global::BLE.Client.Droid.Resource.Id.mtrl_internal_children_alpha_tag; - global::MvvmCross.Droid.Support.Design.Resource.Id.multiply = global::BLE.Client.Droid.Resource.Id.multiply; - global::MvvmCross.Droid.Support.Design.Resource.Id.navigation_header_container = global::BLE.Client.Droid.Resource.Id.navigation_header_container; - global::MvvmCross.Droid.Support.Design.Resource.Id.never = global::BLE.Client.Droid.Resource.Id.never; - global::MvvmCross.Droid.Support.Design.Resource.Id.none = global::BLE.Client.Droid.Resource.Id.none; - global::MvvmCross.Droid.Support.Design.Resource.Id.normal = global::BLE.Client.Droid.Resource.Id.normal; - global::MvvmCross.Droid.Support.Design.Resource.Id.notification_background = global::BLE.Client.Droid.Resource.Id.notification_background; - global::MvvmCross.Droid.Support.Design.Resource.Id.notification_main_column = global::BLE.Client.Droid.Resource.Id.notification_main_column; - global::MvvmCross.Droid.Support.Design.Resource.Id.notification_main_column_container = global::BLE.Client.Droid.Resource.Id.notification_main_column_container; - global::MvvmCross.Droid.Support.Design.Resource.Id.outline = global::BLE.Client.Droid.Resource.Id.outline; - global::MvvmCross.Droid.Support.Design.Resource.Id.parallax = global::BLE.Client.Droid.Resource.Id.parallax; - global::MvvmCross.Droid.Support.Design.Resource.Id.parentPanel = global::BLE.Client.Droid.Resource.Id.parentPanel; - global::MvvmCross.Droid.Support.Design.Resource.Id.parent_matrix = global::BLE.Client.Droid.Resource.Id.parent_matrix; - global::MvvmCross.Droid.Support.Design.Resource.Id.pin = global::BLE.Client.Droid.Resource.Id.pin; - global::MvvmCross.Droid.Support.Design.Resource.Id.progress_circular = global::BLE.Client.Droid.Resource.Id.progress_circular; - global::MvvmCross.Droid.Support.Design.Resource.Id.progress_horizontal = global::BLE.Client.Droid.Resource.Id.progress_horizontal; - global::MvvmCross.Droid.Support.Design.Resource.Id.radio = global::BLE.Client.Droid.Resource.Id.radio; - global::MvvmCross.Droid.Support.Design.Resource.Id.right = global::BLE.Client.Droid.Resource.Id.right; - global::MvvmCross.Droid.Support.Design.Resource.Id.right_icon = global::BLE.Client.Droid.Resource.Id.right_icon; - global::MvvmCross.Droid.Support.Design.Resource.Id.right_side = global::BLE.Client.Droid.Resource.Id.right_side; - global::MvvmCross.Droid.Support.Design.Resource.Id.save_image_matrix = global::BLE.Client.Droid.Resource.Id.save_image_matrix; - global::MvvmCross.Droid.Support.Design.Resource.Id.save_non_transition_alpha = global::BLE.Client.Droid.Resource.Id.save_non_transition_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Id.save_scale_type = global::BLE.Client.Droid.Resource.Id.save_scale_type; - global::MvvmCross.Droid.Support.Design.Resource.Id.screen = global::BLE.Client.Droid.Resource.Id.screen; - global::MvvmCross.Droid.Support.Design.Resource.Id.scroll = global::BLE.Client.Droid.Resource.Id.scroll; - global::MvvmCross.Droid.Support.Design.Resource.Id.scrollIndicatorDown = global::BLE.Client.Droid.Resource.Id.scrollIndicatorDown; - global::MvvmCross.Droid.Support.Design.Resource.Id.scrollIndicatorUp = global::BLE.Client.Droid.Resource.Id.scrollIndicatorUp; - global::MvvmCross.Droid.Support.Design.Resource.Id.scrollView = global::BLE.Client.Droid.Resource.Id.scrollView; - global::MvvmCross.Droid.Support.Design.Resource.Id.scrollable = global::BLE.Client.Droid.Resource.Id.scrollable; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_badge = global::BLE.Client.Droid.Resource.Id.search_badge; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_bar = global::BLE.Client.Droid.Resource.Id.search_bar; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_button = global::BLE.Client.Droid.Resource.Id.search_button; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_close_btn = global::BLE.Client.Droid.Resource.Id.search_close_btn; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_edit_frame = global::BLE.Client.Droid.Resource.Id.search_edit_frame; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_go_btn = global::BLE.Client.Droid.Resource.Id.search_go_btn; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_mag_icon = global::BLE.Client.Droid.Resource.Id.search_mag_icon; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_plate = global::BLE.Client.Droid.Resource.Id.search_plate; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_src_text = global::BLE.Client.Droid.Resource.Id.search_src_text; - global::MvvmCross.Droid.Support.Design.Resource.Id.search_voice_btn = global::BLE.Client.Droid.Resource.Id.search_voice_btn; - global::MvvmCross.Droid.Support.Design.Resource.Id.select_dialog_listview = global::BLE.Client.Droid.Resource.Id.select_dialog_listview; - global::MvvmCross.Droid.Support.Design.Resource.Id.selected = global::BLE.Client.Droid.Resource.Id.selected; - global::MvvmCross.Droid.Support.Design.Resource.Id.shortcut = global::BLE.Client.Droid.Resource.Id.shortcut; - global::MvvmCross.Droid.Support.Design.Resource.Id.showCustom = global::BLE.Client.Droid.Resource.Id.showCustom; - global::MvvmCross.Droid.Support.Design.Resource.Id.showHome = global::BLE.Client.Droid.Resource.Id.showHome; - global::MvvmCross.Droid.Support.Design.Resource.Id.showTitle = global::BLE.Client.Droid.Resource.Id.showTitle; - global::MvvmCross.Droid.Support.Design.Resource.Id.smallLabel = global::BLE.Client.Droid.Resource.Id.smallLabel; - global::MvvmCross.Droid.Support.Design.Resource.Id.snackbar_action = global::BLE.Client.Droid.Resource.Id.snackbar_action; - global::MvvmCross.Droid.Support.Design.Resource.Id.snackbar_text = global::BLE.Client.Droid.Resource.Id.snackbar_text; - global::MvvmCross.Droid.Support.Design.Resource.Id.snap = global::BLE.Client.Droid.Resource.Id.snap; - global::MvvmCross.Droid.Support.Design.Resource.Id.snapMargins = global::BLE.Client.Droid.Resource.Id.snapMargins; - global::MvvmCross.Droid.Support.Design.Resource.Id.spacer = global::BLE.Client.Droid.Resource.Id.spacer; - global::MvvmCross.Droid.Support.Design.Resource.Id.split_action_bar = global::BLE.Client.Droid.Resource.Id.split_action_bar; - global::MvvmCross.Droid.Support.Design.Resource.Id.src_atop = global::BLE.Client.Droid.Resource.Id.src_atop; - global::MvvmCross.Droid.Support.Design.Resource.Id.src_in = global::BLE.Client.Droid.Resource.Id.src_in; - global::MvvmCross.Droid.Support.Design.Resource.Id.src_over = global::BLE.Client.Droid.Resource.Id.src_over; - global::MvvmCross.Droid.Support.Design.Resource.Id.start = global::BLE.Client.Droid.Resource.Id.start; - global::MvvmCross.Droid.Support.Design.Resource.Id.stretch = global::BLE.Client.Droid.Resource.Id.stretch; - global::MvvmCross.Droid.Support.Design.Resource.Id.submenuarrow = global::BLE.Client.Droid.Resource.Id.submenuarrow; - global::MvvmCross.Droid.Support.Design.Resource.Id.submit_area = global::BLE.Client.Droid.Resource.Id.submit_area; - global::MvvmCross.Droid.Support.Design.Resource.Id.tabMode = global::BLE.Client.Droid.Resource.Id.tabMode; - global::MvvmCross.Droid.Support.Design.Resource.Id.tag_transition_group = global::BLE.Client.Droid.Resource.Id.tag_transition_group; - global::MvvmCross.Droid.Support.Design.Resource.Id.tag_unhandled_key_event_manager = global::BLE.Client.Droid.Resource.Id.tag_unhandled_key_event_manager; - global::MvvmCross.Droid.Support.Design.Resource.Id.tag_unhandled_key_listeners = global::BLE.Client.Droid.Resource.Id.tag_unhandled_key_listeners; - global::MvvmCross.Droid.Support.Design.Resource.Id.text = global::BLE.Client.Droid.Resource.Id.text; - global::MvvmCross.Droid.Support.Design.Resource.Id.text2 = global::BLE.Client.Droid.Resource.Id.text2; - global::MvvmCross.Droid.Support.Design.Resource.Id.textSpacerNoButtons = global::BLE.Client.Droid.Resource.Id.textSpacerNoButtons; - global::MvvmCross.Droid.Support.Design.Resource.Id.textSpacerNoTitle = global::BLE.Client.Droid.Resource.Id.textSpacerNoTitle; - global::MvvmCross.Droid.Support.Design.Resource.Id.textStart = global::BLE.Client.Droid.Resource.Id.textStart; - global::MvvmCross.Droid.Support.Design.Resource.Id.text_input_password_toggle = global::BLE.Client.Droid.Resource.Id.text_input_password_toggle; - global::MvvmCross.Droid.Support.Design.Resource.Id.textinput_counter = global::BLE.Client.Droid.Resource.Id.textinput_counter; - global::MvvmCross.Droid.Support.Design.Resource.Id.textinput_error = global::BLE.Client.Droid.Resource.Id.textinput_error; - global::MvvmCross.Droid.Support.Design.Resource.Id.textinput_helper_text = global::BLE.Client.Droid.Resource.Id.textinput_helper_text; - global::MvvmCross.Droid.Support.Design.Resource.Id.time = global::BLE.Client.Droid.Resource.Id.time; - global::MvvmCross.Droid.Support.Design.Resource.Id.title = global::BLE.Client.Droid.Resource.Id.title; - global::MvvmCross.Droid.Support.Design.Resource.Id.titleDividerNoCustom = global::BLE.Client.Droid.Resource.Id.titleDividerNoCustom; - global::MvvmCross.Droid.Support.Design.Resource.Id.title_template = global::BLE.Client.Droid.Resource.Id.title_template; - global::MvvmCross.Droid.Support.Design.Resource.Id.top = global::BLE.Client.Droid.Resource.Id.top; - global::MvvmCross.Droid.Support.Design.Resource.Id.topPanel = global::BLE.Client.Droid.Resource.Id.topPanel; - global::MvvmCross.Droid.Support.Design.Resource.Id.touch_outside = global::BLE.Client.Droid.Resource.Id.touch_outside; - global::MvvmCross.Droid.Support.Design.Resource.Id.transition_current_scene = global::BLE.Client.Droid.Resource.Id.transition_current_scene; - global::MvvmCross.Droid.Support.Design.Resource.Id.transition_layout_save = global::BLE.Client.Droid.Resource.Id.transition_layout_save; - global::MvvmCross.Droid.Support.Design.Resource.Id.transition_position = global::BLE.Client.Droid.Resource.Id.transition_position; - global::MvvmCross.Droid.Support.Design.Resource.Id.transition_scene_layoutid_cache = global::BLE.Client.Droid.Resource.Id.transition_scene_layoutid_cache; - global::MvvmCross.Droid.Support.Design.Resource.Id.transition_transform = global::BLE.Client.Droid.Resource.Id.transition_transform; - global::MvvmCross.Droid.Support.Design.Resource.Id.uniform = global::BLE.Client.Droid.Resource.Id.uniform; - global::MvvmCross.Droid.Support.Design.Resource.Id.unlabeled = global::BLE.Client.Droid.Resource.Id.unlabeled; - global::MvvmCross.Droid.Support.Design.Resource.Id.up = global::BLE.Client.Droid.Resource.Id.up; - global::MvvmCross.Droid.Support.Design.Resource.Id.useLogo = global::BLE.Client.Droid.Resource.Id.useLogo; - global::MvvmCross.Droid.Support.Design.Resource.Id.view_offset_helper = global::BLE.Client.Droid.Resource.Id.view_offset_helper; - global::MvvmCross.Droid.Support.Design.Resource.Id.visible = global::BLE.Client.Droid.Resource.Id.visible; - global::MvvmCross.Droid.Support.Design.Resource.Id.withText = global::BLE.Client.Droid.Resource.Id.withText; - global::MvvmCross.Droid.Support.Design.Resource.Id.wrap_content = global::BLE.Client.Droid.Resource.Id.wrap_content; - global::MvvmCross.Droid.Support.Design.Resource.Integer.abc_config_activityDefaultDur = global::BLE.Client.Droid.Resource.Integer.abc_config_activityDefaultDur; - global::MvvmCross.Droid.Support.Design.Resource.Integer.abc_config_activityShortDur = global::BLE.Client.Droid.Resource.Integer.abc_config_activityShortDur; - global::MvvmCross.Droid.Support.Design.Resource.Integer.app_bar_elevation_anim_duration = global::BLE.Client.Droid.Resource.Integer.app_bar_elevation_anim_duration; - global::MvvmCross.Droid.Support.Design.Resource.Integer.bottom_sheet_slide_duration = global::BLE.Client.Droid.Resource.Integer.bottom_sheet_slide_duration; - global::MvvmCross.Droid.Support.Design.Resource.Integer.cancel_button_image_alpha = global::BLE.Client.Droid.Resource.Integer.cancel_button_image_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Integer.config_tooltipAnimTime = global::BLE.Client.Droid.Resource.Integer.config_tooltipAnimTime; - global::MvvmCross.Droid.Support.Design.Resource.Integer.design_snackbar_text_max_lines = global::BLE.Client.Droid.Resource.Integer.design_snackbar_text_max_lines; - global::MvvmCross.Droid.Support.Design.Resource.Integer.design_tab_indicator_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.design_tab_indicator_anim_duration_ms; - global::MvvmCross.Droid.Support.Design.Resource.Integer.hide_password_duration = global::BLE.Client.Droid.Resource.Integer.hide_password_duration; - global::MvvmCross.Droid.Support.Design.Resource.Integer.mtrl_btn_anim_delay_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_btn_anim_delay_ms; - global::MvvmCross.Droid.Support.Design.Resource.Integer.mtrl_btn_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_btn_anim_duration_ms; - global::MvvmCross.Droid.Support.Design.Resource.Integer.mtrl_chip_anim_duration = global::BLE.Client.Droid.Resource.Integer.mtrl_chip_anim_duration; - global::MvvmCross.Droid.Support.Design.Resource.Integer.mtrl_tab_indicator_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_tab_indicator_anim_duration_ms; - global::MvvmCross.Droid.Support.Design.Resource.Integer.show_password_duration = global::BLE.Client.Droid.Resource.Integer.show_password_duration; - global::MvvmCross.Droid.Support.Design.Resource.Integer.status_bar_notification_info_maxnum = global::BLE.Client.Droid.Resource.Integer.status_bar_notification_info_maxnum; - global::MvvmCross.Droid.Support.Design.Resource.Interpolator.mtrl_fast_out_linear_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_fast_out_linear_in; - global::MvvmCross.Droid.Support.Design.Resource.Interpolator.mtrl_fast_out_slow_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_fast_out_slow_in; - global::MvvmCross.Droid.Support.Design.Resource.Interpolator.mtrl_linear = global::BLE.Client.Droid.Resource.Interpolator.mtrl_linear; - global::MvvmCross.Droid.Support.Design.Resource.Interpolator.mtrl_linear_out_slow_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_linear_out_slow_in; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_action_bar_title_item = global::BLE.Client.Droid.Resource.Layout.abc_action_bar_title_item; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_action_bar_up_container = global::BLE.Client.Droid.Resource.Layout.abc_action_bar_up_container; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_action_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_action_menu_item_layout; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_action_menu_layout = global::BLE.Client.Droid.Resource.Layout.abc_action_menu_layout; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_action_mode_bar = global::BLE.Client.Droid.Resource.Layout.abc_action_mode_bar; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_action_mode_close_item_material = global::BLE.Client.Droid.Resource.Layout.abc_action_mode_close_item_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_activity_chooser_view = global::BLE.Client.Droid.Resource.Layout.abc_activity_chooser_view; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_activity_chooser_view_list_item = global::BLE.Client.Droid.Resource.Layout.abc_activity_chooser_view_list_item; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_alert_dialog_button_bar_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_button_bar_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_alert_dialog_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_alert_dialog_title_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_title_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_cascading_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_cascading_menu_item_layout; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_dialog_title_material = global::BLE.Client.Droid.Resource.Layout.abc_dialog_title_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_expanded_menu_layout = global::BLE.Client.Droid.Resource.Layout.abc_expanded_menu_layout; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_list_menu_item_checkbox = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_checkbox; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_list_menu_item_icon = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_icon; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_list_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_layout; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_list_menu_item_radio = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_radio; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_popup_menu_header_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_popup_menu_header_item_layout; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_popup_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_popup_menu_item_layout; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_screen_content_include = global::BLE.Client.Droid.Resource.Layout.abc_screen_content_include; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_screen_simple = global::BLE.Client.Droid.Resource.Layout.abc_screen_simple; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_screen_simple_overlay_action_mode = global::BLE.Client.Droid.Resource.Layout.abc_screen_simple_overlay_action_mode; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_screen_toolbar = global::BLE.Client.Droid.Resource.Layout.abc_screen_toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_search_dropdown_item_icons_2line = global::BLE.Client.Droid.Resource.Layout.abc_search_dropdown_item_icons_2line; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_search_view = global::BLE.Client.Droid.Resource.Layout.abc_search_view; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_select_dialog_material = global::BLE.Client.Droid.Resource.Layout.abc_select_dialog_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.abc_tooltip = global::BLE.Client.Droid.Resource.Layout.abc_tooltip; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_bottom_navigation_item = global::BLE.Client.Droid.Resource.Layout.design_bottom_navigation_item; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_bottom_sheet_dialog = global::BLE.Client.Droid.Resource.Layout.design_bottom_sheet_dialog; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_layout_snackbar = global::BLE.Client.Droid.Resource.Layout.design_layout_snackbar; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_layout_snackbar_include = global::BLE.Client.Droid.Resource.Layout.design_layout_snackbar_include; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_layout_tab_icon = global::BLE.Client.Droid.Resource.Layout.design_layout_tab_icon; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_layout_tab_text = global::BLE.Client.Droid.Resource.Layout.design_layout_tab_text; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_menu_item_action_area = global::BLE.Client.Droid.Resource.Layout.design_menu_item_action_area; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_navigation_item = global::BLE.Client.Droid.Resource.Layout.design_navigation_item; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_navigation_item_header = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_header; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_navigation_item_separator = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_separator; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_navigation_item_subheader = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_subheader; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_navigation_menu = global::BLE.Client.Droid.Resource.Layout.design_navigation_menu; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_navigation_menu_item = global::BLE.Client.Droid.Resource.Layout.design_navigation_menu_item; - global::MvvmCross.Droid.Support.Design.Resource.Layout.design_text_input_password_icon = global::BLE.Client.Droid.Resource.Layout.design_text_input_password_icon; - global::MvvmCross.Droid.Support.Design.Resource.Layout.mtrl_layout_snackbar = global::BLE.Client.Droid.Resource.Layout.mtrl_layout_snackbar; - global::MvvmCross.Droid.Support.Design.Resource.Layout.mtrl_layout_snackbar_include = global::BLE.Client.Droid.Resource.Layout.mtrl_layout_snackbar_include; - global::MvvmCross.Droid.Support.Design.Resource.Layout.notification_action = global::BLE.Client.Droid.Resource.Layout.notification_action; - global::MvvmCross.Droid.Support.Design.Resource.Layout.notification_action_tombstone = global::BLE.Client.Droid.Resource.Layout.notification_action_tombstone; - global::MvvmCross.Droid.Support.Design.Resource.Layout.notification_template_custom_big = global::BLE.Client.Droid.Resource.Layout.notification_template_custom_big; - global::MvvmCross.Droid.Support.Design.Resource.Layout.notification_template_icon_group = global::BLE.Client.Droid.Resource.Layout.notification_template_icon_group; - global::MvvmCross.Droid.Support.Design.Resource.Layout.notification_template_part_chronometer = global::BLE.Client.Droid.Resource.Layout.notification_template_part_chronometer; - global::MvvmCross.Droid.Support.Design.Resource.Layout.notification_template_part_time = global::BLE.Client.Droid.Resource.Layout.notification_template_part_time; - global::MvvmCross.Droid.Support.Design.Resource.Layout.select_dialog_item_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_item_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.select_dialog_multichoice_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_multichoice_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.select_dialog_singlechoice_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_singlechoice_material; - global::MvvmCross.Droid.Support.Design.Resource.Layout.support_simple_spinner_dropdown_item = global::BLE.Client.Droid.Resource.Layout.support_simple_spinner_dropdown_item; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_action_bar_home_description = global::BLE.Client.Droid.Resource.String.abc_action_bar_home_description; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_action_bar_up_description = global::BLE.Client.Droid.Resource.String.abc_action_bar_up_description; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_action_menu_overflow_description = global::BLE.Client.Droid.Resource.String.abc_action_menu_overflow_description; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_action_mode_done = global::BLE.Client.Droid.Resource.String.abc_action_mode_done; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_activity_chooser_view_see_all = global::BLE.Client.Droid.Resource.String.abc_activity_chooser_view_see_all; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_activitychooserview_choose_application = global::BLE.Client.Droid.Resource.String.abc_activitychooserview_choose_application; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_capital_off = global::BLE.Client.Droid.Resource.String.abc_capital_off; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_capital_on = global::BLE.Client.Droid.Resource.String.abc_capital_on; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_body_1_material = global::BLE.Client.Droid.Resource.String.abc_font_family_body_1_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_body_2_material = global::BLE.Client.Droid.Resource.String.abc_font_family_body_2_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_button_material = global::BLE.Client.Droid.Resource.String.abc_font_family_button_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_caption_material = global::BLE.Client.Droid.Resource.String.abc_font_family_caption_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_display_1_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_1_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_display_2_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_2_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_display_3_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_3_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_display_4_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_4_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_headline_material = global::BLE.Client.Droid.Resource.String.abc_font_family_headline_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_menu_material = global::BLE.Client.Droid.Resource.String.abc_font_family_menu_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_subhead_material = global::BLE.Client.Droid.Resource.String.abc_font_family_subhead_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_font_family_title_material = global::BLE.Client.Droid.Resource.String.abc_font_family_title_material; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_alt_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_alt_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_ctrl_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_ctrl_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_delete_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_delete_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_enter_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_enter_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_function_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_function_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_meta_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_meta_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_shift_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_shift_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_space_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_space_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_menu_sym_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_sym_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_prepend_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_prepend_shortcut_label; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_search_hint = global::BLE.Client.Droid.Resource.String.abc_search_hint; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_searchview_description_clear = global::BLE.Client.Droid.Resource.String.abc_searchview_description_clear; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_searchview_description_query = global::BLE.Client.Droid.Resource.String.abc_searchview_description_query; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_searchview_description_search = global::BLE.Client.Droid.Resource.String.abc_searchview_description_search; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_searchview_description_submit = global::BLE.Client.Droid.Resource.String.abc_searchview_description_submit; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_searchview_description_voice = global::BLE.Client.Droid.Resource.String.abc_searchview_description_voice; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_shareactionprovider_share_with = global::BLE.Client.Droid.Resource.String.abc_shareactionprovider_share_with; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_shareactionprovider_share_with_application = global::BLE.Client.Droid.Resource.String.abc_shareactionprovider_share_with_application; - global::MvvmCross.Droid.Support.Design.Resource.String.abc_toolbar_collapse_description = global::BLE.Client.Droid.Resource.String.abc_toolbar_collapse_description; - global::MvvmCross.Droid.Support.Design.Resource.String.appbar_scrolling_view_behavior = global::BLE.Client.Droid.Resource.String.appbar_scrolling_view_behavior; - global::MvvmCross.Droid.Support.Design.Resource.String.bottom_sheet_behavior = global::BLE.Client.Droid.Resource.String.bottom_sheet_behavior; - global::MvvmCross.Droid.Support.Design.Resource.String.character_counter_content_description = global::BLE.Client.Droid.Resource.String.character_counter_content_description; - global::MvvmCross.Droid.Support.Design.Resource.String.character_counter_pattern = global::BLE.Client.Droid.Resource.String.character_counter_pattern; - global::MvvmCross.Droid.Support.Design.Resource.String.fab_scroll_shrink_grow_autohide_behavior = global::BLE.Client.Droid.Resource.String.fab_scroll_shrink_grow_autohide_behavior; - global::MvvmCross.Droid.Support.Design.Resource.String.fab_transformation_scrim_behavior = global::BLE.Client.Droid.Resource.String.fab_transformation_scrim_behavior; - global::MvvmCross.Droid.Support.Design.Resource.String.fab_transformation_sheet_behavior = global::BLE.Client.Droid.Resource.String.fab_transformation_sheet_behavior; - global::MvvmCross.Droid.Support.Design.Resource.String.hide_bottom_view_on_scroll_behavior = global::BLE.Client.Droid.Resource.String.hide_bottom_view_on_scroll_behavior; - global::MvvmCross.Droid.Support.Design.Resource.String.mtrl_chip_close_icon_content_description = global::BLE.Client.Droid.Resource.String.mtrl_chip_close_icon_content_description; - global::MvvmCross.Droid.Support.Design.Resource.String.password_toggle_content_description = global::BLE.Client.Droid.Resource.String.password_toggle_content_description; - global::MvvmCross.Droid.Support.Design.Resource.String.path_password_eye = global::BLE.Client.Droid.Resource.String.path_password_eye; - global::MvvmCross.Droid.Support.Design.Resource.String.path_password_eye_mask_strike_through = global::BLE.Client.Droid.Resource.String.path_password_eye_mask_strike_through; - global::MvvmCross.Droid.Support.Design.Resource.String.path_password_eye_mask_visible = global::BLE.Client.Droid.Resource.String.path_password_eye_mask_visible; - global::MvvmCross.Droid.Support.Design.Resource.String.path_password_strike_through = global::BLE.Client.Droid.Resource.String.path_password_strike_through; - global::MvvmCross.Droid.Support.Design.Resource.String.search_menu_title = global::BLE.Client.Droid.Resource.String.search_menu_title; - global::MvvmCross.Droid.Support.Design.Resource.String.status_bar_notification_info_overflow = global::BLE.Client.Droid.Resource.String.status_bar_notification_info_overflow; - global::MvvmCross.Droid.Support.Design.Resource.String.view_scroll_translation_autohide_behavior = global::BLE.Client.Droid.Resource.String.view_scroll_translation_autohide_behavior; - global::MvvmCross.Droid.Support.Design.Resource.Style.AlertDialog_AppCompat = global::BLE.Client.Droid.Resource.Style.AlertDialog_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.AlertDialog_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.AlertDialog_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Animation_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Animation_AppCompat_DropDownUp = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_DropDownUp; - global::MvvmCross.Droid.Support.Design.Resource.Style.Animation_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_Tooltip; - global::MvvmCross.Droid.Support.Design.Resource.Style.Animation_Design_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Animation_Design_BottomSheetDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_AlertDialog_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_AlertDialog_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_AlertDialog_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_AlertDialog_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Animation_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Animation_AppCompat_DropDownUp = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_DropDownUp; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Animation_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_Tooltip; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_CardView = global::BLE.Client.Droid.Resource.Style.Base_CardView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_DialogWindowTitle_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_DialogWindowTitle_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_DialogWindowTitleBackground_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_DialogWindowTitleBackground_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Body1 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body1; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Body2 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body2; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Button; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Caption = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Caption; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Display1 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display1; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Display2 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display2; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Display3 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display3; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Display4 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display4; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Headline = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Headline; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Medium = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Menu = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Menu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_SearchResult = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Subhead = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Tooltip; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_CompactMenu = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_CompactMenu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_CompactMenu = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_CompactMenu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V21_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V21_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V21_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V22_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V22_Theme_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V22_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V22_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V23_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V23_Theme_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V23_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V23_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V26_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V26_Theme_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V26_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V26_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V26_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_V26_Widget_AppCompat_Toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V28_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V28_Theme_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V28_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V28_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V7_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V7_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V7_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V7_Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_EditText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_V7_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_Toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActionMode = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionMode; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActivityChooserView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Button_Borderless = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Button_Colored = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Button_Small = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ButtonBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_EditText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ImageButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ImageButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Light_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ListMenuView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListMenuView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListPopupWindow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ListView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView_DropDown; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ListView_Menu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView_Menu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_PopupMenu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_PopupWindow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupWindow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ProgressBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_RatingBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_RatingBar_Small = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_SearchView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SearchView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_SeekBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Spinner; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_Design_TabLayout = global::BLE.Client.Droid.Resource.Style.Base_Widget_Design_TabLayout; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_MaterialComponents_Chip = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_Chip; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout; - global::MvvmCross.Droid.Support.Design.Resource.Style.CardView = global::BLE.Client.Droid.Resource.Style.CardView; - global::MvvmCross.Droid.Support.Design.Resource.Style.CardView_Dark = global::BLE.Client.Droid.Resource.Style.CardView_Dark; - global::MvvmCross.Droid.Support.Design.Resource.Style.CardView_Light = global::BLE.Client.Droid.Resource.Style.CardView_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Light_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_V21_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_V21_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_V21_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_V21_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_V25_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_V25_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_V25_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_V25_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Platform_Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Platform_Widget_AppCompat_Spinner; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat = global::BLE.Client.Droid.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Body1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Body1; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Body2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Body2; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Button; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Caption = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Caption; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Display1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display1; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Display2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display2; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Display3 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display3; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Display4 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display4; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Headline = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Headline; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Large; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Large_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Large_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Medium = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Medium; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Medium_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Medium_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Menu = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Menu; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Small_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Small_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Subhead = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Subhead; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Title_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Tooltip; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_Switch = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Switch; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Compat_Notification = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Compat_Notification_Info = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Info; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Compat_Notification_Time = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Time; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Compat_Notification_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Design_Counter = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Counter; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Design_Counter_Overflow = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Counter_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Design_Error = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Error; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Design_HelperText = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_HelperText; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Design_Hint = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Hint; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Design_Snackbar_Message = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Snackbar_Message; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Design_Tab = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Tab; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Body1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Body1; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Body2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Body2; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Button; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Caption = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Caption; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Chip = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Chip; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Headline1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline1; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Headline2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline2; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Headline3 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline3; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Headline4 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline4; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Headline5 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline5; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Headline6 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline6; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Overline = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Overline; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Subtitle1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle1; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Subtitle2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle2; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_MaterialComponents_Tab = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Tab; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_CompactMenu = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_CompactMenu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_DayNight = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_DayNight_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_DayNight_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_NoActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_DarkActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_NoActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_AppCompat_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_NoActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_Design = global::BLE.Client.Droid.Resource.Style.Theme_Design; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_Design_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_Design_BottomSheetDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_Design_Light = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_Design_Light_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light_BottomSheetDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_Design_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light_NoActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_Design_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_Design_NoActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_BottomSheetDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_CompactMenu = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_CompactMenu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_Dark = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Light; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox; - global::MvvmCross.Droid.Support.Design.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_Solid; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton_CloseMode; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActionMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionMode; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActivityChooserView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_AutoCompleteTextView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Button_Borderless = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Borderless; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Borderless_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Button_Colored = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Button_Small = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ButtonBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ButtonBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_CompoundButton_Switch = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_Switch; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_DrawerArrowToggle = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_DrawerArrowToggle; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_DropDownItem_Spinner; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_EditText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ImageButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ImageButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActivityChooserView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ListPopupWindow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ListView_DropDown; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_PopupMenu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_SearchView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_SearchView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ListMenuView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListMenuView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListPopupWindow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ListView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView_DropDown; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ListView_Menu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView_Menu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_PopupMenu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupMenu; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupMenu_Overflow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_PopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupWindow; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ProgressBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ProgressBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_RatingBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_RatingBar_Indicator = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar_Indicator; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_RatingBar_Small = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar_Small; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_SearchView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SearchView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_SearchView_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SearchView_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_SeekBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SeekBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_SeekBar_Discrete = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SeekBar_Discrete; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Spinner_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Spinner_Underlined = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_Underlined; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_TextView_SpinnerItem; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Compat_NotificationActionContainer = global::BLE.Client.Droid.Resource.Style.Widget_Compat_NotificationActionContainer; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Compat_NotificationActionText = global::BLE.Client.Droid.Resource.Style.Widget_Compat_NotificationActionText; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_AppBarLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_AppBarLayout; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_BottomNavigationView = global::BLE.Client.Droid.Resource.Style.Widget_Design_BottomNavigationView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_BottomSheet_Modal = global::BLE.Client.Droid.Resource.Style.Widget_Design_BottomSheet_Modal; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_CollapsingToolbar = global::BLE.Client.Droid.Resource.Style.Widget_Design_CollapsingToolbar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_FloatingActionButton = global::BLE.Client.Droid.Resource.Style.Widget_Design_FloatingActionButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_NavigationView = global::BLE.Client.Droid.Resource.Style.Widget_Design_NavigationView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_ScrimInsetsFrameLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_ScrimInsetsFrameLayout; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_Snackbar = global::BLE.Client.Droid.Resource.Style.Widget_Design_Snackbar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_TabLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_TabLayout; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Design_TextInputLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_TextInputLayout; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_BottomAppBar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_BottomNavigationView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_Icon; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_TextButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_CardView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_CardView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Chip_Action = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Action; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Chip_Choice = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Choice; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Chip_Entry = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Entry; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Chip_Filter = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Filter; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_ChipGroup = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_ChipGroup; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_FloatingActionButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_FloatingActionButton; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_NavigationView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_NavigationView; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Snackbar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Snackbar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TabLayout = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TabLayout; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TabLayout_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TabLayout_Colored; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_MaterialComponents_Toolbar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Style.Widget_Support_CoordinatorLayout = global::BLE.Client.Droid.Resource.Style.Widget_Support_CoordinatorLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar = global::BLE.Client.Droid.Resource.Styleable.ActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_background = global::BLE.Client.Droid.Resource.Styleable.ActionBar_background; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_backgroundSplit = global::BLE.Client.Droid.Resource.Styleable.ActionBar_backgroundSplit; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_backgroundStacked = global::BLE.Client.Droid.Resource.Styleable.ActionBar_backgroundStacked; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_contentInsetEnd = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetEndWithActions; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_contentInsetLeft = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetLeft; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_contentInsetRight = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetRight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_contentInsetStart = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetStartWithNavigation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_customNavigationLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBar_customNavigationLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_displayOptions = global::BLE.Client.Droid.Resource.Styleable.ActionBar_displayOptions; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_divider = global::BLE.Client.Droid.Resource.Styleable.ActionBar_divider; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_elevation = global::BLE.Client.Droid.Resource.Styleable.ActionBar_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_height = global::BLE.Client.Droid.Resource.Styleable.ActionBar_height; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_hideOnContentScroll = global::BLE.Client.Droid.Resource.Styleable.ActionBar_hideOnContentScroll; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_homeAsUpIndicator = global::BLE.Client.Droid.Resource.Styleable.ActionBar_homeAsUpIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_homeLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBar_homeLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_icon = global::BLE.Client.Droid.Resource.Styleable.ActionBar_icon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_indeterminateProgressStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_indeterminateProgressStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_itemPadding = global::BLE.Client.Droid.Resource.Styleable.ActionBar_itemPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_logo = global::BLE.Client.Droid.Resource.Styleable.ActionBar_logo; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_navigationMode = global::BLE.Client.Droid.Resource.Styleable.ActionBar_navigationMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_popupTheme = global::BLE.Client.Droid.Resource.Styleable.ActionBar_popupTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_progressBarPadding = global::BLE.Client.Droid.Resource.Styleable.ActionBar_progressBarPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_progressBarStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_progressBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_subtitle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_subtitleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_subtitleTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_title = global::BLE.Client.Droid.Resource.Styleable.ActionBar_title; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBar_titleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_titleTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBarLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBarLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionBarLayout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.ActionBarLayout_android_layout_gravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMenuItemView = global::BLE.Client.Droid.Resource.Styleable.ActionMenuItemView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMenuItemView_android_minWidth = global::BLE.Client.Droid.Resource.Styleable.ActionMenuItemView_android_minWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMenuView = global::BLE.Client.Droid.Resource.Styleable.ActionMenuView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMode = global::BLE.Client.Droid.Resource.Styleable.ActionMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMode_background = global::BLE.Client.Droid.Resource.Styleable.ActionMode_background; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMode_backgroundSplit = global::BLE.Client.Droid.Resource.Styleable.ActionMode_backgroundSplit; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMode_closeItemLayout = global::BLE.Client.Droid.Resource.Styleable.ActionMode_closeItemLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMode_height = global::BLE.Client.Droid.Resource.Styleable.ActionMode_height; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMode_subtitleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionMode_subtitleTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActionMode_titleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionMode_titleTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActivityChooserView = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ActivityChooserView_initialActivityCount = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView_initialActivityCount; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog = global::BLE.Client.Droid.Resource.Styleable.AlertDialog; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog_android_layout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_android_layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog_buttonIconDimen = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_buttonIconDimen; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog_buttonPanelSideLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_buttonPanelSideLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog_listItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_listItemLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog_listLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_listLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog_multiChoiceItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_multiChoiceItemLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog_showTitle = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_showTitle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AlertDialog_singleChoiceItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_singleChoiceItemLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableCompat = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableItem = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableItem_android_id = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_id; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableTransition = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_android_background = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_background; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_elevation = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_expanded = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_expanded; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_liftOnScroll = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_liftOnScroll; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayoutStates = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayoutStates_state_collapsed = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsed; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayoutStates_state_collapsible = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayoutStates_state_liftable = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_liftable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayoutStates_state_lifted = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_lifted; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatImageView = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatImageView_android_src = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_android_src; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatImageView_srcCompat = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_srcCompat; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatImageView_tint = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_tint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatImageView_tintMode = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_tintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatSeekBar = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatSeekBar_android_thumb = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_android_thumb; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatSeekBar_tickMark = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMark; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatSeekBar_tickMarkTint = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextHelper = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextHelper_android_drawableBottom = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableBottom; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextHelper_android_drawableEnd = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextHelper_android_drawableLeft = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableLeft; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextHelper_android_drawableRight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableRight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextHelper_android_drawableStart = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextHelper_android_drawableTop = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableTop; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextHelper_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_textAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_android_textAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_autoSizePresetSizes = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizePresetSizes; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_autoSizeTextType = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeTextType; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_fontFamily = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_fontFamily; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_lineHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_lineHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTextView_textAllCaps = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_textAllCaps; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarDivider = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarDivider; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarItemBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarItemBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarPopupTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarPopupTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarSplitStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarSplitStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarTabStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionDropDownStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionDropDownStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionMenuTextColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeCutDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCutDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeFindDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeFindDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModePasteDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModePasteDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeShareDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeShareDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeSplitBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeSplitBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_activityChooserViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_activityChooserViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_alertDialogStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_alertDialogTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_android_windowIsFloating = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_android_windowIsFloating; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_borderlessButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_borderlessButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_buttonBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_buttonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_buttonStyleSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonStyleSmall; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_checkboxStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_checkboxStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_checkedTextViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_checkedTextViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorAccent = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorAccent; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorBackgroundFloating = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorBackgroundFloating; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorButtonNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorButtonNormal; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorControlActivated = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlActivated; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorControlHighlight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlHighlight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorControlNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlNormal; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorError = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorError; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorPrimary = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorPrimary; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorPrimaryDark = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorPrimaryDark; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_controlBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_controlBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_dialogCornerRadius = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogCornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_dialogPreferredPadding = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogPreferredPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_dialogTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_dividerHorizontal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dividerHorizontal; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_dividerVertical = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dividerVertical; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_dropDownListViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dropDownListViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_editTextBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_editTextColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_editTextStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_homeAsUpIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_homeAsUpIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_imageButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_imageButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listDividerAlertDialog = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listDividerAlertDialog; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listMenuViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listMenuViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listPopupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPopupWindowStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listPreferredItemHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_panelBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_panelMenuListTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelMenuListTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_panelMenuListWidth = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelMenuListWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_popupMenuStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_popupMenuStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_popupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_popupWindowStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_radioButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_radioButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_ratingBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_searchViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_searchViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_seekBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_seekBarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_selectableItemBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_spinnerStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_spinnerStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_switchStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_switchStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textAppearanceListItem = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItem; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_textColorSearchUrl = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textColorSearchUrl; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_toolbarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_toolbarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_tooltipForegroundColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_tooltipForegroundColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_tooltipFrameBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_tooltipFrameBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_viewInflaterClass = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_viewInflaterClass; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowActionBar = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionBar; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowActionBarOverlay = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionBarOverlay; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowActionModeOverlay = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionModeOverlay; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowMinWidthMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMajor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowMinWidthMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMinor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.AppCompatTheme_windowNoTitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowNoTitle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomAppBar = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomAppBar_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_backgroundTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomAppBar_fabAlignmentMode = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabAlignmentMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomAppBar_fabCradleMargin = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleMargin; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomAppBar_hideOnScroll = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_hideOnScroll; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_elevation = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_itemBackground = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_itemIconSize = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemIconSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_itemIconTint = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_itemTextColor = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_labelVisibilityMode = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_labelVisibilityMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomNavigationView_menu = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_menu; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomSheetBehavior_Layout = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ButtonBarLayout = global::BLE.Client.Droid.Resource.Styleable.ButtonBarLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ButtonBarLayout_allowStacking = global::BLE.Client.Droid.Resource.Styleable.ButtonBarLayout_allowStacking; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView = global::BLE.Client.Droid.Resource.Styleable.CardView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_android_minHeight = global::BLE.Client.Droid.Resource.Styleable.CardView_android_minHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_android_minWidth = global::BLE.Client.Droid.Resource.Styleable.CardView_android_minWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_cardBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.CardView_cardBackgroundColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_cardCornerRadius = global::BLE.Client.Droid.Resource.Styleable.CardView_cardCornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_cardElevation = global::BLE.Client.Droid.Resource.Styleable.CardView_cardElevation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_cardMaxElevation = global::BLE.Client.Droid.Resource.Styleable.CardView_cardMaxElevation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_cardPreventCornerOverlap = global::BLE.Client.Droid.Resource.Styleable.CardView_cardPreventCornerOverlap; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_cardUseCompatPadding = global::BLE.Client.Droid.Resource.Styleable.CardView_cardUseCompatPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_contentPadding = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_contentPaddingBottom = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingBottom; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_contentPaddingLeft = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingLeft; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_contentPaddingRight = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingRight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CardView_contentPaddingTop = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingTop; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip = global::BLE.Client.Droid.Resource.Styleable.Chip; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_android_checkable = global::BLE.Client.Droid.Resource.Styleable.Chip_android_checkable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_android_ellipsize = global::BLE.Client.Droid.Resource.Styleable.Chip_android_ellipsize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.Chip_android_maxWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_android_text = global::BLE.Client.Droid.Resource.Styleable.Chip_android_text; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.Chip_android_textAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_checkedIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_checkedIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIconEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_checkedIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIconVisible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.Chip_chipBackgroundColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipCornerRadius = global::BLE.Client.Droid.Resource.Styleable.Chip_chipCornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_chipEndPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipIconSize = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipIconTint = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconVisible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipMinHeight = global::BLE.Client.Droid.Resource.Styleable.Chip_chipMinHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStartPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipStrokeColor = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStrokeColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_chipStrokeWidth = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStrokeWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_closeIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_closeIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_closeIconEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconEndPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_closeIconSize = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_closeIconStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconStartPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_closeIconTint = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_closeIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconVisible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_hideMotionSpec = global::BLE.Client.Droid.Resource.Styleable.Chip_hideMotionSpec; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_iconEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_iconEndPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_iconStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_iconStartPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_rippleColor = global::BLE.Client.Droid.Resource.Styleable.Chip_rippleColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_showMotionSpec = global::BLE.Client.Droid.Resource.Styleable.Chip_showMotionSpec; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_textEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_textEndPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Chip_textStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_textStartPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ChipGroup = global::BLE.Client.Droid.Resource.Styleable.ChipGroup; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ChipGroup_checkedChip = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_checkedChip; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ChipGroup_chipSpacing = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacing; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ChipGroup_chipSpacingHorizontal = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacingHorizontal; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ChipGroup_chipSpacingVertical = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacingVertical; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ChipGroup_singleLine = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_singleLine; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ChipGroup_singleSelection = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_singleSelection; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_contentScrim = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_contentScrim; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_title = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_title; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_titleEnabled = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_titleEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_toolbarId = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_toolbarId; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ColorStateListItem = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ColorStateListItem_alpha = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ColorStateListItem_android_alpha = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_android_alpha; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ColorStateListItem_android_color = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_android_color; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CompoundButton = global::BLE.Client.Droid.Resource.Styleable.CompoundButton; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CompoundButton_android_button = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_android_button; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CompoundButton_buttonTint = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_buttonTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CompoundButton_buttonTintMode = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_buttonTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_keylines = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_keylines; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DesignTheme = global::BLE.Client.Droid.Resource.Styleable.DesignTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DesignTheme_bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Styleable.DesignTheme_bottomSheetDialogTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DesignTheme_bottomSheetStyle = global::BLE.Client.Droid.Resource.Styleable.DesignTheme_bottomSheetStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle_arrowHeadLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_arrowHeadLength; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle_arrowShaftLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_arrowShaftLength; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle_barLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_barLength; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle_color = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_color; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle_drawableSize = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_drawableSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle_gapBetweenBars = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_gapBetweenBars; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle_spinBars = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_spinBars; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.DrawerArrowToggle_thickness = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_thickness; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_backgroundTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_backgroundTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_borderWidth = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_borderWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_elevation = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_fabCustomSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_fabCustomSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_fabSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_fabSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_hideMotionSpec = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_hideMotionSpec; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_maxImageSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_maxImageSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_pressedTranslationZ = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_pressedTranslationZ; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_rippleColor = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_rippleColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_showMotionSpec = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_showMotionSpec; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_useCompatPadding = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_useCompatPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_Behavior_Layout = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FlowLayout = global::BLE.Client.Droid.Resource.Styleable.FlowLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FlowLayout_itemSpacing = global::BLE.Client.Droid.Resource.Styleable.FlowLayout_itemSpacing; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FlowLayout_lineSpacing = global::BLE.Client.Droid.Resource.Styleable.FlowLayout_lineSpacing; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamily = global::BLE.Client.Droid.Resource.Styleable.FontFamily; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamily_fontProviderAuthority = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderAuthority; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamily_fontProviderCerts = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderCerts; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamily_fontProviderPackage = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderPackage; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamily_fontProviderQuery = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderQuery; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_android_font = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_font; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_android_fontStyle = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_android_fontWeight = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_font = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_font; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_fontStyle = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_fontWeight = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontWeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.FontFamilyFont_ttcIndex = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_ttcIndex; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ForegroundLinearLayout = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ForegroundLinearLayout_android_foreground = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_android_foreground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_centerColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_centerX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerX; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_centerY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerY; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_endColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_endX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endX; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_endY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endY; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_gradientRadius = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_gradientRadius; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_startColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_startX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startX; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_startY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startY; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_tileMode = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_tileMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColor_android_type = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_type; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColorItem = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColorItem_android_color = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem_android_color; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.GradientColorItem_android_offset = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem_android_offset; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_android_baselineAligned = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAligned; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_android_gravity = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_gravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_android_orientation = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_orientation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_android_weightSum = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_weightSum; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_divider = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_divider; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_dividerPadding = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_dividerPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_showDividers = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_showDividers; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_Layout = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ListPopupWindow = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton = global::BLE.Client.Droid.Resource.Styleable.MaterialButton; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_android_insetBottom = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetBottom; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_android_insetLeft = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetLeft; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_android_insetRight = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetRight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_android_insetTop = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetTop; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_backgroundTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_backgroundTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_cornerRadius = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_cornerRadius; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_icon = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_icon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_iconGravity = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconGravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_iconPadding = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_iconSize = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_iconTint = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_iconTintMode = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_rippleColor = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_rippleColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_strokeColor = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_strokeColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialButton_strokeWidth = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_strokeWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialCardView = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialCardView_strokeColor = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView_strokeColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialCardView_strokeWidth = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView_strokeWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_chipStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_colorAccent = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorAccent; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_colorPrimary = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimary; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_colorSecondary = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorSecondary; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_editTextStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_editTextStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_scrimBackground = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_scrimBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_tabStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_tabStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MaterialComponentsTheme_textInputStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textInputStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuGroup = global::BLE.Client.Droid.Resource.Styleable.MenuGroup; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuGroup_android_checkableBehavior = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_checkableBehavior; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuGroup_android_enabled = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_enabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuGroup_android_id = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_id; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuGroup_android_menuCategory = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_menuCategory; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuGroup_android_orderInCategory = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_orderInCategory; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuGroup_android_visible = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_visible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem = global::BLE.Client.Droid.Resource.Styleable.MenuItem; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_actionLayout = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_actionProviderClass = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionProviderClass; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_actionViewClass = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionViewClass; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_alphabeticModifiers = global::BLE.Client.Droid.Resource.Styleable.MenuItem_alphabeticModifiers; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_alphabeticShortcut = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_alphabeticShortcut; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_checkable = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_checkable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_checked = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_checked; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_enabled = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_enabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_icon = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_icon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_id = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_id; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_menuCategory = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_menuCategory; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_numericShortcut = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_numericShortcut; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_onClick = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_onClick; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_orderInCategory = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_orderInCategory; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_title = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_title; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_titleCondensed = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_titleCondensed; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_android_visible = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_visible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_contentDescription = global::BLE.Client.Droid.Resource.Styleable.MenuItem_contentDescription; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_iconTint = global::BLE.Client.Droid.Resource.Styleable.MenuItem_iconTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_iconTintMode = global::BLE.Client.Droid.Resource.Styleable.MenuItem_iconTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_numericModifiers = global::BLE.Client.Droid.Resource.Styleable.MenuItem_numericModifiers; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_showAsAction = global::BLE.Client.Droid.Resource.Styleable.MenuItem_showAsAction; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuItem_tooltipText = global::BLE.Client.Droid.Resource.Styleable.MenuItem_tooltipText; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView = global::BLE.Client.Droid.Resource.Styleable.MenuView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_android_headerBackground = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_headerBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_android_horizontalDivider = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_horizontalDivider; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_android_itemBackground = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_android_itemIconDisabledAlpha = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemIconDisabledAlpha; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_android_itemTextAppearance = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_android_verticalDivider = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_verticalDivider; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_android_windowAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_windowAnimationStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_preserveIconSpacing = global::BLE.Client.Droid.Resource.Styleable.MenuView_preserveIconSpacing; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MenuView_subMenuArrow = global::BLE.Client.Droid.Resource.Styleable.MenuView_subMenuArrow; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxBinding = global::BLE.Client.Droid.Resource.Styleable.MvxBinding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxBinding_MvxBind = global::BLE.Client.Droid.Resource.Styleable.MvxBinding_MvxBind; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxBinding_MvxLang = global::BLE.Client.Droid.Resource.Styleable.MvxBinding_MvxLang; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxControl = global::BLE.Client.Droid.Resource.Styleable.MvxControl; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxControl_MvxTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxControl_MvxTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxExpandableListView = global::BLE.Client.Droid.Resource.Styleable.MvxExpandableListView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxExpandableListView_MvxGroupItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxExpandableListView_MvxGroupItemTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxListView = global::BLE.Client.Droid.Resource.Styleable.MvxListView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxListView_MvxDropDownItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxListView_MvxDropDownItemTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.MvxListView_MvxItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxListView_MvxItemTemplate; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView = global::BLE.Client.Droid.Resource.Styleable.NavigationView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_android_background = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_background; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_android_fitsSystemWindows = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_fitsSystemWindows; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_maxWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_elevation = global::BLE.Client.Droid.Resource.Styleable.NavigationView_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_headerLayout = global::BLE.Client.Droid.Resource.Styleable.NavigationView_headerLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_itemBackground = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_itemHorizontalPadding = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemHorizontalPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_itemIconPadding = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemIconPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_itemIconTint = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_itemTextAppearance = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_itemTextColor = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.NavigationView_menu = global::BLE.Client.Droid.Resource.Styleable.NavigationView_menu; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.PopupWindow = global::BLE.Client.Droid.Resource.Styleable.PopupWindow; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.PopupWindow_android_popupAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_android_popupAnimationStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.PopupWindow_android_popupBackground = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_android_popupBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.PopupWindow_overlapAnchor = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_overlapAnchor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.PopupWindowBackgroundState = global::BLE.Client.Droid.Resource.Styleable.PopupWindowBackgroundState; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor = global::BLE.Client.Droid.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecycleListView = global::BLE.Client.Droid.Resource.Styleable.RecycleListView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecycleListView_paddingBottomNoButtons = global::BLE.Client.Droid.Resource.Styleable.RecycleListView_paddingBottomNoButtons; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecycleListView_paddingTopNoTitle = global::BLE.Client.Droid.Resource.Styleable.RecycleListView_paddingTopNoTitle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView = global::BLE.Client.Droid.Resource.Styleable.RecyclerView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_android_descendantFocusability = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_android_descendantFocusability; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_android_orientation = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_android_orientation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_fastScrollEnabled = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_layoutManager = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_layoutManager; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_reverseLayout = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_reverseLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_spanCount = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_spanCount; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.RecyclerView_stackFromEnd = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_stackFromEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ScrimInsetsFrameLayout = global::BLE.Client.Droid.Resource.Styleable.ScrimInsetsFrameLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground = global::BLE.Client.Droid.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ScrollingViewBehavior_Layout = global::BLE.Client.Droid.Resource.Styleable.ScrollingViewBehavior_Layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop = global::BLE.Client.Droid.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView = global::BLE.Client.Droid.Resource.Styleable.SearchView; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_android_focusable = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_focusable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_android_imeOptions = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_imeOptions; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_android_inputType = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_inputType; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_maxWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_closeIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_closeIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_commitIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_commitIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_defaultQueryHint = global::BLE.Client.Droid.Resource.Styleable.SearchView_defaultQueryHint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_goIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_goIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_iconifiedByDefault = global::BLE.Client.Droid.Resource.Styleable.SearchView_iconifiedByDefault; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_layout = global::BLE.Client.Droid.Resource.Styleable.SearchView_layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_queryBackground = global::BLE.Client.Droid.Resource.Styleable.SearchView_queryBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_queryHint = global::BLE.Client.Droid.Resource.Styleable.SearchView_queryHint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_searchHintIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_searchHintIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_searchIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_searchIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_submitBackground = global::BLE.Client.Droid.Resource.Styleable.SearchView_submitBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_suggestionRowLayout = global::BLE.Client.Droid.Resource.Styleable.SearchView_suggestionRowLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SearchView_voiceIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_voiceIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Snackbar = global::BLE.Client.Droid.Resource.Styleable.Snackbar; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Snackbar_snackbarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.Snackbar_snackbarButtonStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Snackbar_snackbarStyle = global::BLE.Client.Droid.Resource.Styleable.Snackbar_snackbarStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SnackbarLayout = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SnackbarLayout_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_android_maxWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SnackbarLayout_elevation = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_elevation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SnackbarLayout_maxActionInlineWidth = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_maxActionInlineWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Spinner = global::BLE.Client.Droid.Resource.Styleable.Spinner; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Spinner_android_dropDownWidth = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_dropDownWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Spinner_android_entries = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_entries; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Spinner_android_popupBackground = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_popupBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Spinner_android_prompt = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_prompt; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Spinner_popupTheme = global::BLE.Client.Droid.Resource.Styleable.Spinner_popupTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawable = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawable_android_constantSize = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_constantSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawable_android_dither = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_dither; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawable_android_enterFadeDuration = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_enterFadeDuration; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawable_android_exitFadeDuration = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_exitFadeDuration; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawable_android_variablePadding = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_variablePadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawable_android_visible = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_visible; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawableItem = global::BLE.Client.Droid.Resource.Styleable.StateListDrawableItem; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.StateListDrawableItem_android_drawable = global::BLE.Client.Droid.Resource.Styleable.StateListDrawableItem_android_drawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_android_textOff = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_textOff; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_android_textOn = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_textOn; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_android_thumb = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_thumb; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_showText = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_showText; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_splitTrack = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_splitTrack; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_switchMinWidth = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchMinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_switchPadding = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_switchTextAppearance = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_thumbTextPadding = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTextPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_thumbTint = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_thumbTintMode = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_track = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_track; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_trackTint = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_trackTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.SwitchCompat_trackTintMode = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_trackTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabItem = global::BLE.Client.Droid.Resource.Styleable.TabItem; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabItem_android_icon = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_icon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabItem_android_layout = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_layout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabItem_android_text = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_text; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout = global::BLE.Client.Droid.Resource.Styleable.TabLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabBackground = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabBackground; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabContentStart = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabContentStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabGravity = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabGravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabIconTint = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIconTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabIconTintMode = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIconTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabIndicator = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicator; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabIndicatorColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabIndicatorFullWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorFullWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabIndicatorGravity = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorGravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabIndicatorHeight = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabInlineLabel = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabInlineLabel; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabMaxWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMaxWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabMinWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMinWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabMode = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabPadding = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPadding; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabPaddingBottom = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingBottom; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabPaddingEnd = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabPaddingStart = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabPaddingTop = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingTop; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabRippleColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabRippleColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabSelectedTextColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabSelectedTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabTextColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TabLayout_tabUnboundedRipple = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabUnboundedRipple; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_fontFamily = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_fontFamily; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_shadowColor = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_shadowDx = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowDx; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_shadowDy = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowDy; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_shadowRadius = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowRadius; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_textColor = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_textColorHint = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColorHint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_textColorLink = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColorLink; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_textSize = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textSize; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_textStyle = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textStyle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_android_typeface = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_typeface; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_fontFamily = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_fontFamily; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextAppearance_textAllCaps = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_textAllCaps; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_android_hint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_android_hint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_android_textColorHint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_android_textColorHint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxBackgroundColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxBackgroundMode = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxBackgroundMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxStrokeColor = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxStrokeColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_boxStrokeWidth = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxStrokeWidth; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_counterEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_counterMaxLength = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterMaxLength; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_counterTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_errorEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_errorEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_errorTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_errorTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_helperText = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperText; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_helperTextEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperTextEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_helperTextTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperTextTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_hintAnimationEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintAnimationEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_hintEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_hintTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_passwordToggleContentDescription = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleContentDescription; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_passwordToggleDrawable = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleDrawable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_passwordToggleEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleEnabled; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_passwordToggleTint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.TextInputLayout_passwordToggleTintMode = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ThemeEnforcement = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ThemeEnforcement_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_android_textAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ThemeEnforcement_enforceTextAppearance = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_enforceTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar = global::BLE.Client.Droid.Resource.Styleable.Toolbar; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_android_gravity = global::BLE.Client.Droid.Resource.Styleable.Toolbar_android_gravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_android_minHeight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_android_minHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_buttonGravity = global::BLE.Client.Droid.Resource.Styleable.Toolbar_buttonGravity; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_collapseContentDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_collapseContentDescription; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_collapseIcon = global::BLE.Client.Droid.Resource.Styleable.Toolbar_collapseIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_contentInsetEnd = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetEndWithActions; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_contentInsetLeft = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetLeft; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_contentInsetRight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetRight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_contentInsetStart = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetStartWithNavigation; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_logo = global::BLE.Client.Droid.Resource.Styleable.Toolbar_logo; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_logoDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_logoDescription; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_maxButtonHeight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_maxButtonHeight; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_navigationContentDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_navigationContentDescription; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_navigationIcon = global::BLE.Client.Droid.Resource.Styleable.Toolbar_navigationIcon; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_popupTheme = global::BLE.Client.Droid.Resource.Styleable.Toolbar_popupTheme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_subtitle = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitle; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_subtitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitleTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_subtitleTextColor = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitleTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_title = global::BLE.Client.Droid.Resource.Styleable.Toolbar_title; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_titleMargin = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMargin; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_titleMarginBottom = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginBottom; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_titleMarginEnd = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_titleMarginStart = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_titleMarginTop = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginTop; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_titleMargins = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMargins; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_titleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleTextAppearance; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.Toolbar_titleTextColor = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleTextColor; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.View = global::BLE.Client.Droid.Resource.Styleable.View; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.View_android_focusable = global::BLE.Client.Droid.Resource.Styleable.View_android_focusable; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.View_android_theme = global::BLE.Client.Droid.Resource.Styleable.View_android_theme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.View_paddingEnd = global::BLE.Client.Droid.Resource.Styleable.View_paddingEnd; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.View_paddingStart = global::BLE.Client.Droid.Resource.Styleable.View_paddingStart; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.View_theme = global::BLE.Client.Droid.Resource.Styleable.View_theme; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ViewBackgroundHelper = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ViewBackgroundHelper_android_background = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_android_background; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ViewBackgroundHelper_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTint; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ViewStubCompat = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ViewStubCompat_android_id = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_id; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ViewStubCompat_android_inflatedId = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_inflatedId; - global::MvvmCross.Droid.Support.Design.Resource.Styleable.ViewStubCompat_android_layout = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_fade_in = global::BLE.Client.Droid.Resource.Animation.abc_fade_in; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_fade_out = global::BLE.Client.Droid.Resource.Animation.abc_fade_out; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_grow_fade_in_from_bottom = global::BLE.Client.Droid.Resource.Animation.abc_grow_fade_in_from_bottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_popup_enter = global::BLE.Client.Droid.Resource.Animation.abc_popup_enter; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_popup_exit = global::BLE.Client.Droid.Resource.Animation.abc_popup_exit; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_shrink_fade_out_from_bottom = global::BLE.Client.Droid.Resource.Animation.abc_shrink_fade_out_from_bottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_slide_in_bottom = global::BLE.Client.Droid.Resource.Animation.abc_slide_in_bottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_slide_in_top = global::BLE.Client.Droid.Resource.Animation.abc_slide_in_top; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_slide_out_bottom = global::BLE.Client.Droid.Resource.Animation.abc_slide_out_bottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_slide_out_top = global::BLE.Client.Droid.Resource.Animation.abc_slide_out_top; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_tooltip_enter = global::BLE.Client.Droid.Resource.Animation.abc_tooltip_enter; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.abc_tooltip_exit = global::BLE.Client.Droid.Resource.Animation.abc_tooltip_exit; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.design_bottom_sheet_slide_in = global::BLE.Client.Droid.Resource.Animation.design_bottom_sheet_slide_in; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.design_bottom_sheet_slide_out = global::BLE.Client.Droid.Resource.Animation.design_bottom_sheet_slide_out; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.design_snackbar_in = global::BLE.Client.Droid.Resource.Animation.design_snackbar_in; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animation.design_snackbar_out = global::BLE.Client.Droid.Resource.Animation.design_snackbar_out; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.design_appbar_state_list_animator = global::BLE.Client.Droid.Resource.Animator.design_appbar_state_list_animator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.design_fab_hide_motion_spec = global::BLE.Client.Droid.Resource.Animator.design_fab_hide_motion_spec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.design_fab_show_motion_spec = global::BLE.Client.Droid.Resource.Animator.design_fab_show_motion_spec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.mtrl_btn_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_btn_state_list_anim; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.mtrl_btn_unelevated_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_btn_unelevated_state_list_anim; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.mtrl_chip_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_chip_state_list_anim; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.mtrl_fab_hide_motion_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_hide_motion_spec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.mtrl_fab_show_motion_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_show_motion_spec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.MvxBind = global::BLE.Client.Droid.Resource.Attribute.MvxBind; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.MvxDropDownItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxDropDownItemTemplate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.MvxGroupItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxGroupItemTemplate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.MvxItemTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxItemTemplate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.MvxLang = global::BLE.Client.Droid.Resource.Attribute.MvxLang; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.MvxTemplate = global::BLE.Client.Droid.Resource.Attribute.MvxTemplate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarDivider = global::BLE.Client.Droid.Resource.Attribute.actionBarDivider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarItemBackground = global::BLE.Client.Droid.Resource.Attribute.actionBarItemBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarPopupTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarPopupTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarSize = global::BLE.Client.Droid.Resource.Attribute.actionBarSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarSplitStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarSplitStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarTabBarStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarTabStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarTabTextStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionBarWidgetTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarWidgetTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionDropDownStyle = global::BLE.Client.Droid.Resource.Attribute.actionDropDownStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionLayout = global::BLE.Client.Droid.Resource.Attribute.actionLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionMenuTextAppearance = global::BLE.Client.Droid.Resource.Attribute.actionMenuTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionMenuTextColor = global::BLE.Client.Droid.Resource.Attribute.actionMenuTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeBackground = global::BLE.Client.Droid.Resource.Attribute.actionModeBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeCloseButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionModeCloseButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeCloseDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCloseDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeCopyDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCopyDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeCutDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCutDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeFindDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeFindDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModePasteDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModePasteDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModePopupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.actionModePopupWindowStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeSelectAllDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeSelectAllDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeShareDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeShareDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeSplitBackground = global::BLE.Client.Droid.Resource.Attribute.actionModeSplitBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeStyle = global::BLE.Client.Droid.Resource.Attribute.actionModeStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionModeWebSearchDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeWebSearchDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionOverflowButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionOverflowButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionOverflowMenuStyle = global::BLE.Client.Droid.Resource.Attribute.actionOverflowMenuStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionProviderClass = global::BLE.Client.Droid.Resource.Attribute.actionProviderClass; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.actionViewClass = global::BLE.Client.Droid.Resource.Attribute.actionViewClass; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.activityChooserViewStyle = global::BLE.Client.Droid.Resource.Attribute.activityChooserViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.alertDialogButtonGroupStyle = global::BLE.Client.Droid.Resource.Attribute.alertDialogButtonGroupStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.alertDialogCenterButtons = global::BLE.Client.Droid.Resource.Attribute.alertDialogCenterButtons; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.alertDialogStyle = global::BLE.Client.Droid.Resource.Attribute.alertDialogStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.alertDialogTheme = global::BLE.Client.Droid.Resource.Attribute.alertDialogTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.allowStacking = global::BLE.Client.Droid.Resource.Attribute.allowStacking; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.alpha = global::BLE.Client.Droid.Resource.Attribute.alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.alphabeticModifiers = global::BLE.Client.Droid.Resource.Attribute.alphabeticModifiers; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.arrowHeadLength = global::BLE.Client.Droid.Resource.Attribute.arrowHeadLength; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.arrowShaftLength = global::BLE.Client.Droid.Resource.Attribute.arrowShaftLength; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.autoCompleteTextViewStyle = global::BLE.Client.Droid.Resource.Attribute.autoCompleteTextViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.autoSizeMaxTextSize = global::BLE.Client.Droid.Resource.Attribute.autoSizeMaxTextSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.autoSizeMinTextSize = global::BLE.Client.Droid.Resource.Attribute.autoSizeMinTextSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.autoSizePresetSizes = global::BLE.Client.Droid.Resource.Attribute.autoSizePresetSizes; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.autoSizeStepGranularity = global::BLE.Client.Droid.Resource.Attribute.autoSizeStepGranularity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.autoSizeTextType = global::BLE.Client.Droid.Resource.Attribute.autoSizeTextType; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.background = global::BLE.Client.Droid.Resource.Attribute.background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.backgroundSplit = global::BLE.Client.Droid.Resource.Attribute.backgroundSplit; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.backgroundStacked = global::BLE.Client.Droid.Resource.Attribute.backgroundStacked; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.backgroundTint = global::BLE.Client.Droid.Resource.Attribute.backgroundTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.backgroundTintMode = global::BLE.Client.Droid.Resource.Attribute.backgroundTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.barLength = global::BLE.Client.Droid.Resource.Attribute.barLength; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.behavior_autoHide = global::BLE.Client.Droid.Resource.Attribute.behavior_autoHide; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.behavior_fitToContents = global::BLE.Client.Droid.Resource.Attribute.behavior_fitToContents; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.behavior_hideable = global::BLE.Client.Droid.Resource.Attribute.behavior_hideable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.behavior_overlapTop = global::BLE.Client.Droid.Resource.Attribute.behavior_overlapTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.behavior_peekHeight = global::BLE.Client.Droid.Resource.Attribute.behavior_peekHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.behavior_skipCollapsed = global::BLE.Client.Droid.Resource.Attribute.behavior_skipCollapsed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.borderWidth = global::BLE.Client.Droid.Resource.Attribute.borderWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.borderlessButtonStyle = global::BLE.Client.Droid.Resource.Attribute.borderlessButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.bottomAppBarStyle = global::BLE.Client.Droid.Resource.Attribute.bottomAppBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.bottomNavigationStyle = global::BLE.Client.Droid.Resource.Attribute.bottomNavigationStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Attribute.bottomSheetDialogTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.bottomSheetStyle = global::BLE.Client.Droid.Resource.Attribute.bottomSheetStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.boxBackgroundColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxBackgroundMode = global::BLE.Client.Droid.Resource.Attribute.boxBackgroundMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxCollapsedPaddingTop = global::BLE.Client.Droid.Resource.Attribute.boxCollapsedPaddingTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxCornerRadiusBottomEnd = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusBottomEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxCornerRadiusBottomStart = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusBottomStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxCornerRadiusTopEnd = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusTopEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxCornerRadiusTopStart = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusTopStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxStrokeColor = global::BLE.Client.Droid.Resource.Attribute.boxStrokeColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.boxStrokeWidth = global::BLE.Client.Droid.Resource.Attribute.boxStrokeWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonBarButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonBarNegativeButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarNegativeButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonBarNeutralButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarNeutralButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonBarPositiveButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarPositiveButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonBarStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonGravity = global::BLE.Client.Droid.Resource.Attribute.buttonGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonIconDimen = global::BLE.Client.Droid.Resource.Attribute.buttonIconDimen; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonPanelSideLayout = global::BLE.Client.Droid.Resource.Attribute.buttonPanelSideLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonStyleSmall = global::BLE.Client.Droid.Resource.Attribute.buttonStyleSmall; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonTint = global::BLE.Client.Droid.Resource.Attribute.buttonTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.buttonTintMode = global::BLE.Client.Droid.Resource.Attribute.buttonTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.cardBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.cardBackgroundColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.cardCornerRadius = global::BLE.Client.Droid.Resource.Attribute.cardCornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.cardElevation = global::BLE.Client.Droid.Resource.Attribute.cardElevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.cardMaxElevation = global::BLE.Client.Droid.Resource.Attribute.cardMaxElevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.cardPreventCornerOverlap = global::BLE.Client.Droid.Resource.Attribute.cardPreventCornerOverlap; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.cardUseCompatPadding = global::BLE.Client.Droid.Resource.Attribute.cardUseCompatPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.cardViewStyle = global::BLE.Client.Droid.Resource.Attribute.cardViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.checkboxStyle = global::BLE.Client.Droid.Resource.Attribute.checkboxStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.checkedChip = global::BLE.Client.Droid.Resource.Attribute.checkedChip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.checkedIcon = global::BLE.Client.Droid.Resource.Attribute.checkedIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.checkedIconEnabled = global::BLE.Client.Droid.Resource.Attribute.checkedIconEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.checkedIconVisible = global::BLE.Client.Droid.Resource.Attribute.checkedIconVisible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.checkedTextViewStyle = global::BLE.Client.Droid.Resource.Attribute.checkedTextViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.chipBackgroundColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipCornerRadius = global::BLE.Client.Droid.Resource.Attribute.chipCornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipEndPadding = global::BLE.Client.Droid.Resource.Attribute.chipEndPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipGroupStyle = global::BLE.Client.Droid.Resource.Attribute.chipGroupStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipIcon = global::BLE.Client.Droid.Resource.Attribute.chipIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipIconEnabled = global::BLE.Client.Droid.Resource.Attribute.chipIconEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipIconSize = global::BLE.Client.Droid.Resource.Attribute.chipIconSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipIconTint = global::BLE.Client.Droid.Resource.Attribute.chipIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipIconVisible = global::BLE.Client.Droid.Resource.Attribute.chipIconVisible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipMinHeight = global::BLE.Client.Droid.Resource.Attribute.chipMinHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipSpacing = global::BLE.Client.Droid.Resource.Attribute.chipSpacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipSpacingHorizontal = global::BLE.Client.Droid.Resource.Attribute.chipSpacingHorizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipSpacingVertical = global::BLE.Client.Droid.Resource.Attribute.chipSpacingVertical; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipStandaloneStyle = global::BLE.Client.Droid.Resource.Attribute.chipStandaloneStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipStartPadding = global::BLE.Client.Droid.Resource.Attribute.chipStartPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipStrokeColor = global::BLE.Client.Droid.Resource.Attribute.chipStrokeColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipStrokeWidth = global::BLE.Client.Droid.Resource.Attribute.chipStrokeWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.chipStyle = global::BLE.Client.Droid.Resource.Attribute.chipStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.closeIcon = global::BLE.Client.Droid.Resource.Attribute.closeIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.closeIconEnabled = global::BLE.Client.Droid.Resource.Attribute.closeIconEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.closeIconEndPadding = global::BLE.Client.Droid.Resource.Attribute.closeIconEndPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.closeIconSize = global::BLE.Client.Droid.Resource.Attribute.closeIconSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.closeIconStartPadding = global::BLE.Client.Droid.Resource.Attribute.closeIconStartPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.closeIconTint = global::BLE.Client.Droid.Resource.Attribute.closeIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.closeIconVisible = global::BLE.Client.Droid.Resource.Attribute.closeIconVisible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.closeItemLayout = global::BLE.Client.Droid.Resource.Attribute.closeItemLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.collapseContentDescription = global::BLE.Client.Droid.Resource.Attribute.collapseContentDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.collapseIcon = global::BLE.Client.Droid.Resource.Attribute.collapseIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.collapsedTitleGravity = global::BLE.Client.Droid.Resource.Attribute.collapsedTitleGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.collapsedTitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.collapsedTitleTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.color = global::BLE.Client.Droid.Resource.Attribute.color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorAccent = global::BLE.Client.Droid.Resource.Attribute.colorAccent; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorBackgroundFloating = global::BLE.Client.Droid.Resource.Attribute.colorBackgroundFloating; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorButtonNormal = global::BLE.Client.Droid.Resource.Attribute.colorButtonNormal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorControlActivated = global::BLE.Client.Droid.Resource.Attribute.colorControlActivated; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorControlHighlight = global::BLE.Client.Droid.Resource.Attribute.colorControlHighlight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorControlNormal = global::BLE.Client.Droid.Resource.Attribute.colorControlNormal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorError = global::BLE.Client.Droid.Resource.Attribute.colorError; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorPrimary = global::BLE.Client.Droid.Resource.Attribute.colorPrimary; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorPrimaryDark = global::BLE.Client.Droid.Resource.Attribute.colorPrimaryDark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorSecondary = global::BLE.Client.Droid.Resource.Attribute.colorSecondary; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.colorSwitchThumbNormal = global::BLE.Client.Droid.Resource.Attribute.colorSwitchThumbNormal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.commitIcon = global::BLE.Client.Droid.Resource.Attribute.commitIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentDescription = global::BLE.Client.Droid.Resource.Attribute.contentDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentInsetEnd = global::BLE.Client.Droid.Resource.Attribute.contentInsetEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Attribute.contentInsetEndWithActions; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentInsetLeft = global::BLE.Client.Droid.Resource.Attribute.contentInsetLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentInsetRight = global::BLE.Client.Droid.Resource.Attribute.contentInsetRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentInsetStart = global::BLE.Client.Droid.Resource.Attribute.contentInsetStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Attribute.contentInsetStartWithNavigation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentPadding = global::BLE.Client.Droid.Resource.Attribute.contentPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentPaddingBottom = global::BLE.Client.Droid.Resource.Attribute.contentPaddingBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentPaddingLeft = global::BLE.Client.Droid.Resource.Attribute.contentPaddingLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentPaddingRight = global::BLE.Client.Droid.Resource.Attribute.contentPaddingRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentPaddingTop = global::BLE.Client.Droid.Resource.Attribute.contentPaddingTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.contentScrim = global::BLE.Client.Droid.Resource.Attribute.contentScrim; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.controlBackground = global::BLE.Client.Droid.Resource.Attribute.controlBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.coordinatorLayoutStyle = global::BLE.Client.Droid.Resource.Attribute.coordinatorLayoutStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.cornerRadius = global::BLE.Client.Droid.Resource.Attribute.cornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.counterEnabled = global::BLE.Client.Droid.Resource.Attribute.counterEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.counterMaxLength = global::BLE.Client.Droid.Resource.Attribute.counterMaxLength; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.counterOverflowTextAppearance = global::BLE.Client.Droid.Resource.Attribute.counterOverflowTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.counterTextAppearance = global::BLE.Client.Droid.Resource.Attribute.counterTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.customNavigationLayout = global::BLE.Client.Droid.Resource.Attribute.customNavigationLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.defaultQueryHint = global::BLE.Client.Droid.Resource.Attribute.defaultQueryHint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.dialogCornerRadius = global::BLE.Client.Droid.Resource.Attribute.dialogCornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.dialogPreferredPadding = global::BLE.Client.Droid.Resource.Attribute.dialogPreferredPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.dialogTheme = global::BLE.Client.Droid.Resource.Attribute.dialogTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.displayOptions = global::BLE.Client.Droid.Resource.Attribute.displayOptions; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.divider = global::BLE.Client.Droid.Resource.Attribute.divider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.dividerHorizontal = global::BLE.Client.Droid.Resource.Attribute.dividerHorizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.dividerPadding = global::BLE.Client.Droid.Resource.Attribute.dividerPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.dividerVertical = global::BLE.Client.Droid.Resource.Attribute.dividerVertical; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.drawableSize = global::BLE.Client.Droid.Resource.Attribute.drawableSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.drawerArrowStyle = global::BLE.Client.Droid.Resource.Attribute.drawerArrowStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.dropDownListViewStyle = global::BLE.Client.Droid.Resource.Attribute.dropDownListViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.dropdownListPreferredItemHeight = global::BLE.Client.Droid.Resource.Attribute.dropdownListPreferredItemHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.editTextBackground = global::BLE.Client.Droid.Resource.Attribute.editTextBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.editTextColor = global::BLE.Client.Droid.Resource.Attribute.editTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.editTextStyle = global::BLE.Client.Droid.Resource.Attribute.editTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.elevation = global::BLE.Client.Droid.Resource.Attribute.elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.enforceMaterialTheme = global::BLE.Client.Droid.Resource.Attribute.enforceMaterialTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.enforceTextAppearance = global::BLE.Client.Droid.Resource.Attribute.enforceTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.errorEnabled = global::BLE.Client.Droid.Resource.Attribute.errorEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.errorTextAppearance = global::BLE.Client.Droid.Resource.Attribute.errorTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expandActivityOverflowButtonDrawable = global::BLE.Client.Droid.Resource.Attribute.expandActivityOverflowButtonDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expanded = global::BLE.Client.Droid.Resource.Attribute.expanded; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expandedTitleGravity = global::BLE.Client.Droid.Resource.Attribute.expandedTitleGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expandedTitleMargin = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMargin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expandedTitleMarginBottom = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expandedTitleMarginEnd = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expandedTitleMarginStart = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expandedTitleMarginTop = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.expandedTitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.expandedTitleTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fabAlignmentMode = global::BLE.Client.Droid.Resource.Attribute.fabAlignmentMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fabCradleMargin = global::BLE.Client.Droid.Resource.Attribute.fabCradleMargin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fabCradleRoundedCornerRadius = global::BLE.Client.Droid.Resource.Attribute.fabCradleRoundedCornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fabCradleVerticalOffset = global::BLE.Client.Droid.Resource.Attribute.fabCradleVerticalOffset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fabCustomSize = global::BLE.Client.Droid.Resource.Attribute.fabCustomSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fabSize = global::BLE.Client.Droid.Resource.Attribute.fabSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fastScrollEnabled = global::BLE.Client.Droid.Resource.Attribute.fastScrollEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fastScrollHorizontalThumbDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollHorizontalThumbDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fastScrollHorizontalTrackDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollHorizontalTrackDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fastScrollVerticalThumbDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollVerticalThumbDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fastScrollVerticalTrackDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollVerticalTrackDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.firstBaselineToTopHeight = global::BLE.Client.Droid.Resource.Attribute.firstBaselineToTopHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.floatingActionButtonStyle = global::BLE.Client.Droid.Resource.Attribute.floatingActionButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.font = global::BLE.Client.Droid.Resource.Attribute.font; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontFamily = global::BLE.Client.Droid.Resource.Attribute.fontFamily; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontProviderAuthority = global::BLE.Client.Droid.Resource.Attribute.fontProviderAuthority; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontProviderCerts = global::BLE.Client.Droid.Resource.Attribute.fontProviderCerts; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontProviderFetchStrategy = global::BLE.Client.Droid.Resource.Attribute.fontProviderFetchStrategy; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontProviderFetchTimeout = global::BLE.Client.Droid.Resource.Attribute.fontProviderFetchTimeout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontProviderPackage = global::BLE.Client.Droid.Resource.Attribute.fontProviderPackage; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontProviderQuery = global::BLE.Client.Droid.Resource.Attribute.fontProviderQuery; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontStyle = global::BLE.Client.Droid.Resource.Attribute.fontStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontVariationSettings = global::BLE.Client.Droid.Resource.Attribute.fontVariationSettings; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.fontWeight = global::BLE.Client.Droid.Resource.Attribute.fontWeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.foregroundInsidePadding = global::BLE.Client.Droid.Resource.Attribute.foregroundInsidePadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.gapBetweenBars = global::BLE.Client.Droid.Resource.Attribute.gapBetweenBars; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.goIcon = global::BLE.Client.Droid.Resource.Attribute.goIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.headerLayout = global::BLE.Client.Droid.Resource.Attribute.headerLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.height = global::BLE.Client.Droid.Resource.Attribute.height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.helperText = global::BLE.Client.Droid.Resource.Attribute.helperText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.helperTextEnabled = global::BLE.Client.Droid.Resource.Attribute.helperTextEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.helperTextTextAppearance = global::BLE.Client.Droid.Resource.Attribute.helperTextTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.hideMotionSpec = global::BLE.Client.Droid.Resource.Attribute.hideMotionSpec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.hideOnContentScroll = global::BLE.Client.Droid.Resource.Attribute.hideOnContentScroll; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.hideOnScroll = global::BLE.Client.Droid.Resource.Attribute.hideOnScroll; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.hintAnimationEnabled = global::BLE.Client.Droid.Resource.Attribute.hintAnimationEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.hintEnabled = global::BLE.Client.Droid.Resource.Attribute.hintEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.hintTextAppearance = global::BLE.Client.Droid.Resource.Attribute.hintTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.homeAsUpIndicator = global::BLE.Client.Droid.Resource.Attribute.homeAsUpIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.homeLayout = global::BLE.Client.Droid.Resource.Attribute.homeLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.hoveredFocusedTranslationZ = global::BLE.Client.Droid.Resource.Attribute.hoveredFocusedTranslationZ; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.icon = global::BLE.Client.Droid.Resource.Attribute.icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.iconEndPadding = global::BLE.Client.Droid.Resource.Attribute.iconEndPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.iconGravity = global::BLE.Client.Droid.Resource.Attribute.iconGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.iconPadding = global::BLE.Client.Droid.Resource.Attribute.iconPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.iconSize = global::BLE.Client.Droid.Resource.Attribute.iconSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.iconStartPadding = global::BLE.Client.Droid.Resource.Attribute.iconStartPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.iconTint = global::BLE.Client.Droid.Resource.Attribute.iconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.iconTintMode = global::BLE.Client.Droid.Resource.Attribute.iconTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.iconifiedByDefault = global::BLE.Client.Droid.Resource.Attribute.iconifiedByDefault; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.imageButtonStyle = global::BLE.Client.Droid.Resource.Attribute.imageButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.indeterminateProgressStyle = global::BLE.Client.Droid.Resource.Attribute.indeterminateProgressStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.initialActivityCount = global::BLE.Client.Droid.Resource.Attribute.initialActivityCount; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.insetForeground = global::BLE.Client.Droid.Resource.Attribute.insetForeground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.isLightTheme = global::BLE.Client.Droid.Resource.Attribute.isLightTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemBackground = global::BLE.Client.Droid.Resource.Attribute.itemBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemHorizontalPadding = global::BLE.Client.Droid.Resource.Attribute.itemHorizontalPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemHorizontalTranslationEnabled = global::BLE.Client.Droid.Resource.Attribute.itemHorizontalTranslationEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemIconPadding = global::BLE.Client.Droid.Resource.Attribute.itemIconPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemIconSize = global::BLE.Client.Droid.Resource.Attribute.itemIconSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemIconTint = global::BLE.Client.Droid.Resource.Attribute.itemIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemPadding = global::BLE.Client.Droid.Resource.Attribute.itemPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemSpacing = global::BLE.Client.Droid.Resource.Attribute.itemSpacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemTextAppearance = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemTextAppearanceActive = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearanceActive; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemTextAppearanceInactive = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearanceInactive; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.itemTextColor = global::BLE.Client.Droid.Resource.Attribute.itemTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.keylines = global::BLE.Client.Droid.Resource.Attribute.keylines; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.labelVisibilityMode = global::BLE.Client.Droid.Resource.Attribute.labelVisibilityMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.lastBaselineToBottomHeight = global::BLE.Client.Droid.Resource.Attribute.lastBaselineToBottomHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout = global::BLE.Client.Droid.Resource.Attribute.layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layoutManager = global::BLE.Client.Droid.Resource.Attribute.layoutManager; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_anchor = global::BLE.Client.Droid.Resource.Attribute.layout_anchor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_anchorGravity = global::BLE.Client.Droid.Resource.Attribute.layout_anchorGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_behavior = global::BLE.Client.Droid.Resource.Attribute.layout_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_collapseMode = global::BLE.Client.Droid.Resource.Attribute.layout_collapseMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_collapseParallaxMultiplier = global::BLE.Client.Droid.Resource.Attribute.layout_collapseParallaxMultiplier; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_dodgeInsetEdges = global::BLE.Client.Droid.Resource.Attribute.layout_dodgeInsetEdges; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_insetEdge = global::BLE.Client.Droid.Resource.Attribute.layout_insetEdge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_keyline = global::BLE.Client.Droid.Resource.Attribute.layout_keyline; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_scrollFlags = global::BLE.Client.Droid.Resource.Attribute.layout_scrollFlags; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.layout_scrollInterpolator = global::BLE.Client.Droid.Resource.Attribute.layout_scrollInterpolator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.liftOnScroll = global::BLE.Client.Droid.Resource.Attribute.liftOnScroll; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.lineHeight = global::BLE.Client.Droid.Resource.Attribute.lineHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.lineSpacing = global::BLE.Client.Droid.Resource.Attribute.lineSpacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listChoiceBackgroundIndicator = global::BLE.Client.Droid.Resource.Attribute.listChoiceBackgroundIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listDividerAlertDialog = global::BLE.Client.Droid.Resource.Attribute.listDividerAlertDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listItemLayout = global::BLE.Client.Droid.Resource.Attribute.listItemLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listLayout = global::BLE.Client.Droid.Resource.Attribute.listLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listMenuViewStyle = global::BLE.Client.Droid.Resource.Attribute.listMenuViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listPopupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.listPopupWindowStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listPreferredItemHeight = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listPreferredItemHeightLarge = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeightLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listPreferredItemHeightSmall = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeightSmall; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listPreferredItemPaddingLeft = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemPaddingLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.listPreferredItemPaddingRight = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemPaddingRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.logo = global::BLE.Client.Droid.Resource.Attribute.logo; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.logoDescription = global::BLE.Client.Droid.Resource.Attribute.logoDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.materialButtonStyle = global::BLE.Client.Droid.Resource.Attribute.materialButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.materialCardViewStyle = global::BLE.Client.Droid.Resource.Attribute.materialCardViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.maxActionInlineWidth = global::BLE.Client.Droid.Resource.Attribute.maxActionInlineWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.maxButtonHeight = global::BLE.Client.Droid.Resource.Attribute.maxButtonHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.maxImageSize = global::BLE.Client.Droid.Resource.Attribute.maxImageSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.measureWithLargestChild = global::BLE.Client.Droid.Resource.Attribute.measureWithLargestChild; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.menu = global::BLE.Client.Droid.Resource.Attribute.menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.multiChoiceItemLayout = global::BLE.Client.Droid.Resource.Attribute.multiChoiceItemLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.navigationContentDescription = global::BLE.Client.Droid.Resource.Attribute.navigationContentDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.navigationIcon = global::BLE.Client.Droid.Resource.Attribute.navigationIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.navigationMode = global::BLE.Client.Droid.Resource.Attribute.navigationMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.navigationViewStyle = global::BLE.Client.Droid.Resource.Attribute.navigationViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.numericModifiers = global::BLE.Client.Droid.Resource.Attribute.numericModifiers; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.overlapAnchor = global::BLE.Client.Droid.Resource.Attribute.overlapAnchor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.paddingBottomNoButtons = global::BLE.Client.Droid.Resource.Attribute.paddingBottomNoButtons; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.paddingEnd = global::BLE.Client.Droid.Resource.Attribute.paddingEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.paddingStart = global::BLE.Client.Droid.Resource.Attribute.paddingStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.paddingTopNoTitle = global::BLE.Client.Droid.Resource.Attribute.paddingTopNoTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.panelBackground = global::BLE.Client.Droid.Resource.Attribute.panelBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.panelMenuListTheme = global::BLE.Client.Droid.Resource.Attribute.panelMenuListTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.panelMenuListWidth = global::BLE.Client.Droid.Resource.Attribute.panelMenuListWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.passwordToggleContentDescription = global::BLE.Client.Droid.Resource.Attribute.passwordToggleContentDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.passwordToggleDrawable = global::BLE.Client.Droid.Resource.Attribute.passwordToggleDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.passwordToggleEnabled = global::BLE.Client.Droid.Resource.Attribute.passwordToggleEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.passwordToggleTint = global::BLE.Client.Droid.Resource.Attribute.passwordToggleTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.passwordToggleTintMode = global::BLE.Client.Droid.Resource.Attribute.passwordToggleTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.popupMenuStyle = global::BLE.Client.Droid.Resource.Attribute.popupMenuStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.popupTheme = global::BLE.Client.Droid.Resource.Attribute.popupTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.popupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.popupWindowStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.preserveIconSpacing = global::BLE.Client.Droid.Resource.Attribute.preserveIconSpacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.pressedTranslationZ = global::BLE.Client.Droid.Resource.Attribute.pressedTranslationZ; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.progressBarPadding = global::BLE.Client.Droid.Resource.Attribute.progressBarPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.progressBarStyle = global::BLE.Client.Droid.Resource.Attribute.progressBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.queryBackground = global::BLE.Client.Droid.Resource.Attribute.queryBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.queryHint = global::BLE.Client.Droid.Resource.Attribute.queryHint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.radioButtonStyle = global::BLE.Client.Droid.Resource.Attribute.radioButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.ratingBarStyle = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.ratingBarStyleIndicator = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyleIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.ratingBarStyleSmall = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyleSmall; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.reverseLayout = global::BLE.Client.Droid.Resource.Attribute.reverseLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.rippleColor = global::BLE.Client.Droid.Resource.Attribute.rippleColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.scrimAnimationDuration = global::BLE.Client.Droid.Resource.Attribute.scrimAnimationDuration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.scrimBackground = global::BLE.Client.Droid.Resource.Attribute.scrimBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.scrimVisibleHeightTrigger = global::BLE.Client.Droid.Resource.Attribute.scrimVisibleHeightTrigger; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.searchHintIcon = global::BLE.Client.Droid.Resource.Attribute.searchHintIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.searchIcon = global::BLE.Client.Droid.Resource.Attribute.searchIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.searchViewStyle = global::BLE.Client.Droid.Resource.Attribute.searchViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.seekBarStyle = global::BLE.Client.Droid.Resource.Attribute.seekBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.selectableItemBackground = global::BLE.Client.Droid.Resource.Attribute.selectableItemBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.selectableItemBackgroundBorderless = global::BLE.Client.Droid.Resource.Attribute.selectableItemBackgroundBorderless; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.showAsAction = global::BLE.Client.Droid.Resource.Attribute.showAsAction; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.showDividers = global::BLE.Client.Droid.Resource.Attribute.showDividers; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.showMotionSpec = global::BLE.Client.Droid.Resource.Attribute.showMotionSpec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.showText = global::BLE.Client.Droid.Resource.Attribute.showText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.showTitle = global::BLE.Client.Droid.Resource.Attribute.showTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.singleChoiceItemLayout = global::BLE.Client.Droid.Resource.Attribute.singleChoiceItemLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.singleLine = global::BLE.Client.Droid.Resource.Attribute.singleLine; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.singleSelection = global::BLE.Client.Droid.Resource.Attribute.singleSelection; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.snackbarButtonStyle = global::BLE.Client.Droid.Resource.Attribute.snackbarButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.snackbarStyle = global::BLE.Client.Droid.Resource.Attribute.snackbarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.spanCount = global::BLE.Client.Droid.Resource.Attribute.spanCount; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.spinBars = global::BLE.Client.Droid.Resource.Attribute.spinBars; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.spinnerDropDownItemStyle = global::BLE.Client.Droid.Resource.Attribute.spinnerDropDownItemStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.spinnerStyle = global::BLE.Client.Droid.Resource.Attribute.spinnerStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.splitTrack = global::BLE.Client.Droid.Resource.Attribute.splitTrack; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.srcCompat = global::BLE.Client.Droid.Resource.Attribute.srcCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.stackFromEnd = global::BLE.Client.Droid.Resource.Attribute.stackFromEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.state_above_anchor = global::BLE.Client.Droid.Resource.Attribute.state_above_anchor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.state_collapsed = global::BLE.Client.Droid.Resource.Attribute.state_collapsed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.state_collapsible = global::BLE.Client.Droid.Resource.Attribute.state_collapsible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.state_liftable = global::BLE.Client.Droid.Resource.Attribute.state_liftable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.state_lifted = global::BLE.Client.Droid.Resource.Attribute.state_lifted; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.statusBarBackground = global::BLE.Client.Droid.Resource.Attribute.statusBarBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.statusBarScrim = global::BLE.Client.Droid.Resource.Attribute.statusBarScrim; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.strokeColor = global::BLE.Client.Droid.Resource.Attribute.strokeColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.strokeWidth = global::BLE.Client.Droid.Resource.Attribute.strokeWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.subMenuArrow = global::BLE.Client.Droid.Resource.Attribute.subMenuArrow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.submitBackground = global::BLE.Client.Droid.Resource.Attribute.submitBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.subtitle = global::BLE.Client.Droid.Resource.Attribute.subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.subtitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.subtitleTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.subtitleTextColor = global::BLE.Client.Droid.Resource.Attribute.subtitleTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.subtitleTextStyle = global::BLE.Client.Droid.Resource.Attribute.subtitleTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.suggestionRowLayout = global::BLE.Client.Droid.Resource.Attribute.suggestionRowLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.switchMinWidth = global::BLE.Client.Droid.Resource.Attribute.switchMinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.switchPadding = global::BLE.Client.Droid.Resource.Attribute.switchPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.switchStyle = global::BLE.Client.Droid.Resource.Attribute.switchStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.switchTextAppearance = global::BLE.Client.Droid.Resource.Attribute.switchTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabBackground = global::BLE.Client.Droid.Resource.Attribute.tabBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabContentStart = global::BLE.Client.Droid.Resource.Attribute.tabContentStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabGravity = global::BLE.Client.Droid.Resource.Attribute.tabGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabIconTint = global::BLE.Client.Droid.Resource.Attribute.tabIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabIconTintMode = global::BLE.Client.Droid.Resource.Attribute.tabIconTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabIndicator = global::BLE.Client.Droid.Resource.Attribute.tabIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabIndicatorAnimationDuration = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorAnimationDuration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabIndicatorColor = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabIndicatorFullWidth = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorFullWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabIndicatorGravity = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabIndicatorHeight = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabInlineLabel = global::BLE.Client.Droid.Resource.Attribute.tabInlineLabel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabMaxWidth = global::BLE.Client.Droid.Resource.Attribute.tabMaxWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabMinWidth = global::BLE.Client.Droid.Resource.Attribute.tabMinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabMode = global::BLE.Client.Droid.Resource.Attribute.tabMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabPadding = global::BLE.Client.Droid.Resource.Attribute.tabPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabPaddingBottom = global::BLE.Client.Droid.Resource.Attribute.tabPaddingBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabPaddingEnd = global::BLE.Client.Droid.Resource.Attribute.tabPaddingEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabPaddingStart = global::BLE.Client.Droid.Resource.Attribute.tabPaddingStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabPaddingTop = global::BLE.Client.Droid.Resource.Attribute.tabPaddingTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabRippleColor = global::BLE.Client.Droid.Resource.Attribute.tabRippleColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabSelectedTextColor = global::BLE.Client.Droid.Resource.Attribute.tabSelectedTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabStyle = global::BLE.Client.Droid.Resource.Attribute.tabStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabTextAppearance = global::BLE.Client.Droid.Resource.Attribute.tabTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabTextColor = global::BLE.Client.Droid.Resource.Attribute.tabTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tabUnboundedRipple = global::BLE.Client.Droid.Resource.Attribute.tabUnboundedRipple; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAllCaps = global::BLE.Client.Droid.Resource.Attribute.textAllCaps; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceBody1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceBody1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceBody2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceBody2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceButton = global::BLE.Client.Droid.Resource.Attribute.textAppearanceButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceCaption = global::BLE.Client.Droid.Resource.Attribute.textAppearanceCaption; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceHeadline1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceHeadline2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceHeadline3 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline3; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceHeadline4 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline4; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceHeadline5 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline5; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceHeadline6 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline6; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceLargePopupMenu = global::BLE.Client.Droid.Resource.Attribute.textAppearanceLargePopupMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceListItem = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceListItemSecondary = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItemSecondary; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceListItemSmall = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItemSmall; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceOverline = global::BLE.Client.Droid.Resource.Attribute.textAppearanceOverline; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearancePopupMenuHeader = global::BLE.Client.Droid.Resource.Attribute.textAppearancePopupMenuHeader; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceSearchResultSubtitle = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSearchResultSubtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceSearchResultTitle = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSearchResultTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceSmallPopupMenu = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSmallPopupMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceSubtitle1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSubtitle1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textAppearanceSubtitle2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSubtitle2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textColorAlertDialogListItem = global::BLE.Client.Droid.Resource.Attribute.textColorAlertDialogListItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textColorSearchUrl = global::BLE.Client.Droid.Resource.Attribute.textColorSearchUrl; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textEndPadding = global::BLE.Client.Droid.Resource.Attribute.textEndPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textInputStyle = global::BLE.Client.Droid.Resource.Attribute.textInputStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.textStartPadding = global::BLE.Client.Droid.Resource.Attribute.textStartPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.theme = global::BLE.Client.Droid.Resource.Attribute.theme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.thickness = global::BLE.Client.Droid.Resource.Attribute.thickness; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.thumbTextPadding = global::BLE.Client.Droid.Resource.Attribute.thumbTextPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.thumbTint = global::BLE.Client.Droid.Resource.Attribute.thumbTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.thumbTintMode = global::BLE.Client.Droid.Resource.Attribute.thumbTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tickMark = global::BLE.Client.Droid.Resource.Attribute.tickMark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tickMarkTint = global::BLE.Client.Droid.Resource.Attribute.tickMarkTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tickMarkTintMode = global::BLE.Client.Droid.Resource.Attribute.tickMarkTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tint = global::BLE.Client.Droid.Resource.Attribute.tint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tintMode = global::BLE.Client.Droid.Resource.Attribute.tintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.title = global::BLE.Client.Droid.Resource.Attribute.title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleEnabled = global::BLE.Client.Droid.Resource.Attribute.titleEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleMargin = global::BLE.Client.Droid.Resource.Attribute.titleMargin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleMarginBottom = global::BLE.Client.Droid.Resource.Attribute.titleMarginBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleMarginEnd = global::BLE.Client.Droid.Resource.Attribute.titleMarginEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleMarginStart = global::BLE.Client.Droid.Resource.Attribute.titleMarginStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleMarginTop = global::BLE.Client.Droid.Resource.Attribute.titleMarginTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleMargins = global::BLE.Client.Droid.Resource.Attribute.titleMargins; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.titleTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleTextColor = global::BLE.Client.Droid.Resource.Attribute.titleTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.titleTextStyle = global::BLE.Client.Droid.Resource.Attribute.titleTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.toolbarId = global::BLE.Client.Droid.Resource.Attribute.toolbarId; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.toolbarNavigationButtonStyle = global::BLE.Client.Droid.Resource.Attribute.toolbarNavigationButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.toolbarStyle = global::BLE.Client.Droid.Resource.Attribute.toolbarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tooltipForegroundColor = global::BLE.Client.Droid.Resource.Attribute.tooltipForegroundColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tooltipFrameBackground = global::BLE.Client.Droid.Resource.Attribute.tooltipFrameBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.tooltipText = global::BLE.Client.Droid.Resource.Attribute.tooltipText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.track = global::BLE.Client.Droid.Resource.Attribute.track; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.trackTint = global::BLE.Client.Droid.Resource.Attribute.trackTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.trackTintMode = global::BLE.Client.Droid.Resource.Attribute.trackTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.ttcIndex = global::BLE.Client.Droid.Resource.Attribute.ttcIndex; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.useCompatPadding = global::BLE.Client.Droid.Resource.Attribute.useCompatPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.viewInflaterClass = global::BLE.Client.Droid.Resource.Attribute.viewInflaterClass; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.voiceIcon = global::BLE.Client.Droid.Resource.Attribute.voiceIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowActionBar = global::BLE.Client.Droid.Resource.Attribute.windowActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowActionBarOverlay = global::BLE.Client.Droid.Resource.Attribute.windowActionBarOverlay; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowActionModeOverlay = global::BLE.Client.Droid.Resource.Attribute.windowActionModeOverlay; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowFixedHeightMajor = global::BLE.Client.Droid.Resource.Attribute.windowFixedHeightMajor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowFixedHeightMinor = global::BLE.Client.Droid.Resource.Attribute.windowFixedHeightMinor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowFixedWidthMajor = global::BLE.Client.Droid.Resource.Attribute.windowFixedWidthMajor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowFixedWidthMinor = global::BLE.Client.Droid.Resource.Attribute.windowFixedWidthMinor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowMinWidthMajor = global::BLE.Client.Droid.Resource.Attribute.windowMinWidthMajor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowMinWidthMinor = global::BLE.Client.Droid.Resource.Attribute.windowMinWidthMinor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Attribute.windowNoTitle = global::BLE.Client.Droid.Resource.Attribute.windowNoTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Boolean.abc_action_bar_embed_tabs = global::BLE.Client.Droid.Resource.Boolean.abc_action_bar_embed_tabs; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Boolean.abc_allow_stacked_button_bar = global::BLE.Client.Droid.Resource.Boolean.abc_allow_stacked_button_bar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Boolean.abc_config_actionMenuItemAllCaps = global::BLE.Client.Droid.Resource.Boolean.abc_config_actionMenuItemAllCaps; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Boolean.mtrl_btn_textappearance_all_caps = global::BLE.Client.Droid.Resource.Boolean.mtrl_btn_textappearance_all_caps; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_background_cache_hint_selector_material_dark = global::BLE.Client.Droid.Resource.Color.abc_background_cache_hint_selector_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_background_cache_hint_selector_material_light = global::BLE.Client.Droid.Resource.Color.abc_background_cache_hint_selector_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_btn_colored_borderless_text_material = global::BLE.Client.Droid.Resource.Color.abc_btn_colored_borderless_text_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_btn_colored_text_material = global::BLE.Client.Droid.Resource.Color.abc_btn_colored_text_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_color_highlight_material = global::BLE.Client.Droid.Resource.Color.abc_color_highlight_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_hint_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.abc_hint_foreground_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_hint_foreground_material_light = global::BLE.Client.Droid.Resource.Color.abc_hint_foreground_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_input_method_navigation_guard = global::BLE.Client.Droid.Resource.Color.abc_input_method_navigation_guard; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_primary_text_disable_only_material_dark = global::BLE.Client.Droid.Resource.Color.abc_primary_text_disable_only_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_primary_text_disable_only_material_light = global::BLE.Client.Droid.Resource.Color.abc_primary_text_disable_only_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_primary_text_material_dark = global::BLE.Client.Droid.Resource.Color.abc_primary_text_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_primary_text_material_light = global::BLE.Client.Droid.Resource.Color.abc_primary_text_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_search_url_text = global::BLE.Client.Droid.Resource.Color.abc_search_url_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_search_url_text_normal = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_normal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_search_url_text_pressed = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_pressed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_search_url_text_selected = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_selected; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_secondary_text_material_dark = global::BLE.Client.Droid.Resource.Color.abc_secondary_text_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_secondary_text_material_light = global::BLE.Client.Droid.Resource.Color.abc_secondary_text_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_tint_btn_checkable = global::BLE.Client.Droid.Resource.Color.abc_tint_btn_checkable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_tint_default = global::BLE.Client.Droid.Resource.Color.abc_tint_default; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_tint_edittext = global::BLE.Client.Droid.Resource.Color.abc_tint_edittext; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_tint_seek_thumb = global::BLE.Client.Droid.Resource.Color.abc_tint_seek_thumb; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_tint_spinner = global::BLE.Client.Droid.Resource.Color.abc_tint_spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.abc_tint_switch_track = global::BLE.Client.Droid.Resource.Color.abc_tint_switch_track; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.accent_material_dark = global::BLE.Client.Droid.Resource.Color.accent_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.accent_material_light = global::BLE.Client.Droid.Resource.Color.accent_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.background_floating_material_dark = global::BLE.Client.Droid.Resource.Color.background_floating_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.background_floating_material_light = global::BLE.Client.Droid.Resource.Color.background_floating_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.background_material_dark = global::BLE.Client.Droid.Resource.Color.background_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.background_material_light = global::BLE.Client.Droid.Resource.Color.background_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.bright_foreground_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_disabled_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.bright_foreground_disabled_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_disabled_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.bright_foreground_inverse_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_inverse_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.bright_foreground_inverse_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_inverse_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.bright_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.bright_foreground_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.button_material_dark = global::BLE.Client.Droid.Resource.Color.button_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.button_material_light = global::BLE.Client.Droid.Resource.Color.button_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.cardview_dark_background = global::BLE.Client.Droid.Resource.Color.cardview_dark_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.cardview_light_background = global::BLE.Client.Droid.Resource.Color.cardview_light_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.cardview_shadow_end_color = global::BLE.Client.Droid.Resource.Color.cardview_shadow_end_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.cardview_shadow_start_color = global::BLE.Client.Droid.Resource.Color.cardview_shadow_start_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_bottom_navigation_shadow_color = global::BLE.Client.Droid.Resource.Color.design_bottom_navigation_shadow_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_default_color_primary = global::BLE.Client.Droid.Resource.Color.design_default_color_primary; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_default_color_primary_dark = global::BLE.Client.Droid.Resource.Color.design_default_color_primary_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_error = global::BLE.Client.Droid.Resource.Color.design_error; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_fab_shadow_end_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_end_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_fab_shadow_mid_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_mid_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_fab_shadow_start_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_start_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_fab_stroke_end_inner_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_end_inner_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_fab_stroke_end_outer_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_end_outer_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_fab_stroke_top_inner_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_top_inner_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_fab_stroke_top_outer_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_top_outer_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_snackbar_background_color = global::BLE.Client.Droid.Resource.Color.design_snackbar_background_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.design_tint_password_toggle = global::BLE.Client.Droid.Resource.Color.design_tint_password_toggle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.dim_foreground_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.dim_foreground_disabled_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.dim_foreground_disabled_material_light = global::BLE.Client.Droid.Resource.Color.dim_foreground_disabled_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.dim_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.dim_foreground_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.dim_foreground_material_light = global::BLE.Client.Droid.Resource.Color.dim_foreground_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.error_color_material_dark = global::BLE.Client.Droid.Resource.Color.error_color_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.error_color_material_light = global::BLE.Client.Droid.Resource.Color.error_color_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.foreground_material_dark = global::BLE.Client.Droid.Resource.Color.foreground_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.foreground_material_light = global::BLE.Client.Droid.Resource.Color.foreground_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.highlighted_text_material_dark = global::BLE.Client.Droid.Resource.Color.highlighted_text_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.highlighted_text_material_light = global::BLE.Client.Droid.Resource.Color.highlighted_text_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_blue_grey_800 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_800; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_blue_grey_900 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_900; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_blue_grey_950 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_950; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_deep_teal_200 = global::BLE.Client.Droid.Resource.Color.material_deep_teal_200; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_deep_teal_500 = global::BLE.Client.Droid.Resource.Color.material_deep_teal_500; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_grey_100 = global::BLE.Client.Droid.Resource.Color.material_grey_100; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_grey_300 = global::BLE.Client.Droid.Resource.Color.material_grey_300; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_grey_50 = global::BLE.Client.Droid.Resource.Color.material_grey_50; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_grey_600 = global::BLE.Client.Droid.Resource.Color.material_grey_600; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_grey_800 = global::BLE.Client.Droid.Resource.Color.material_grey_800; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_grey_850 = global::BLE.Client.Droid.Resource.Color.material_grey_850; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.material_grey_900 = global::BLE.Client.Droid.Resource.Color.material_grey_900; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_bottom_nav_colored_item_tint = global::BLE.Client.Droid.Resource.Color.mtrl_bottom_nav_colored_item_tint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_bottom_nav_item_tint = global::BLE.Client.Droid.Resource.Color.mtrl_bottom_nav_item_tint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_btn_bg_color_disabled = global::BLE.Client.Droid.Resource.Color.mtrl_btn_bg_color_disabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_btn_bg_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_bg_color_selector; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_btn_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_ripple_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_btn_stroke_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_stroke_color_selector; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_btn_text_btn_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_btn_ripple_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_btn_text_color_disabled = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_color_disabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_btn_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_color_selector; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_btn_transparent_bg_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_transparent_bg_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_chip_background_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_background_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_chip_close_icon_tint = global::BLE.Client.Droid.Resource.Color.mtrl_chip_close_icon_tint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_chip_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_ripple_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_chip_text_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_text_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_fab_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_fab_ripple_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_scrim_color = global::BLE.Client.Droid.Resource.Color.mtrl_scrim_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_tabs_colored_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_colored_ripple_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_tabs_icon_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_icon_color_selector; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_tabs_icon_color_selector_colored = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_icon_color_selector_colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_tabs_legacy_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_legacy_text_color_selector; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_tabs_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_ripple_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_text_btn_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_text_btn_text_color_selector; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_textinput_default_box_stroke_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_default_box_stroke_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_textinput_disabled_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_disabled_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_textinput_filled_box_default_background_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_filled_box_default_background_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.mtrl_textinput_hovered_box_stroke_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_hovered_box_stroke_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.notification_action_color_filter = global::BLE.Client.Droid.Resource.Color.notification_action_color_filter; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.notification_icon_bg_color = global::BLE.Client.Droid.Resource.Color.notification_icon_bg_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.primary_dark_material_dark = global::BLE.Client.Droid.Resource.Color.primary_dark_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.primary_dark_material_light = global::BLE.Client.Droid.Resource.Color.primary_dark_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.primary_material_dark = global::BLE.Client.Droid.Resource.Color.primary_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.primary_material_light = global::BLE.Client.Droid.Resource.Color.primary_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.primary_text_default_material_dark = global::BLE.Client.Droid.Resource.Color.primary_text_default_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.primary_text_default_material_light = global::BLE.Client.Droid.Resource.Color.primary_text_default_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.primary_text_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.primary_text_disabled_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.primary_text_disabled_material_light = global::BLE.Client.Droid.Resource.Color.primary_text_disabled_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.ripple_material_dark = global::BLE.Client.Droid.Resource.Color.ripple_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.ripple_material_light = global::BLE.Client.Droid.Resource.Color.ripple_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.secondary_text_default_material_dark = global::BLE.Client.Droid.Resource.Color.secondary_text_default_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.secondary_text_default_material_light = global::BLE.Client.Droid.Resource.Color.secondary_text_default_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.secondary_text_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.secondary_text_disabled_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.secondary_text_disabled_material_light = global::BLE.Client.Droid.Resource.Color.secondary_text_disabled_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.switch_thumb_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_disabled_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.switch_thumb_disabled_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_disabled_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.switch_thumb_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.switch_thumb_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.switch_thumb_normal_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_normal_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.switch_thumb_normal_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_normal_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.tooltip_background_dark = global::BLE.Client.Droid.Resource.Color.tooltip_background_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Color.tooltip_background_light = global::BLE.Client.Droid.Resource.Color.tooltip_background_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_content_inset_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_content_inset_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_content_inset_with_nav = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_content_inset_with_nav; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_default_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_height_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_default_padding_end_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_padding_end_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_default_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_padding_start_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_elevation_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_elevation_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_icon_vertical_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_icon_vertical_padding_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_overflow_padding_end_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_overflow_padding_end_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_overflow_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_overflow_padding_start_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_stacked_max_height = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_stacked_max_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_stacked_tab_max_width = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_stacked_tab_max_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_bar_subtitle_top_margin_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_subtitle_top_margin_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_button_min_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_height_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_button_min_width_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_width_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_action_button_min_width_overflow_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_width_overflow_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_alert_dialog_button_bar_height = global::BLE.Client.Droid.Resource.Dimension.abc_alert_dialog_button_bar_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_alert_dialog_button_dimen = global::BLE.Client.Droid.Resource.Dimension.abc_alert_dialog_button_dimen; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_button_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_inset_horizontal_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_button_inset_vertical_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_inset_vertical_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_button_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_padding_horizontal_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_button_padding_vertical_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_padding_vertical_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_cascading_menus_min_smallest_width = global::BLE.Client.Droid.Resource.Dimension.abc_cascading_menus_min_smallest_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_config_prefDialogWidth = global::BLE.Client.Droid.Resource.Dimension.abc_config_prefDialogWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_control_corner_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_corner_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_control_inset_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_inset_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_control_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_padding_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_corner_radius_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_corner_radius_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_fixed_height_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_height_major; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_fixed_height_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_height_minor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_fixed_width_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_width_major; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_fixed_width_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_width_minor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_list_padding_top_no_title = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_list_padding_top_no_title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_min_width_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_min_width_major; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_min_width_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_min_width_minor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_padding_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_padding_top_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_padding_top_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dialog_title_divider_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_title_divider_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_disabled_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.abc_disabled_alpha_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_disabled_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.abc_disabled_alpha_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dropdownitem_icon_width = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_icon_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dropdownitem_text_padding_left = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_text_padding_left; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_dropdownitem_text_padding_right = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_text_padding_right; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_edit_text_inset_bottom_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_bottom_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_edit_text_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_horizontal_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_edit_text_inset_top_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_top_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_floating_window_z = global::BLE.Client.Droid.Resource.Dimension.abc_floating_window_z; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_list_item_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_list_item_padding_horizontal_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_panel_menu_list_width = global::BLE.Client.Droid.Resource.Dimension.abc_panel_menu_list_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_progress_bar_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_progress_bar_height_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_search_view_preferred_height = global::BLE.Client.Droid.Resource.Dimension.abc_search_view_preferred_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_search_view_preferred_width = global::BLE.Client.Droid.Resource.Dimension.abc_search_view_preferred_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_seekbar_track_background_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_seekbar_track_background_height_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_seekbar_track_progress_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_seekbar_track_progress_height_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_select_dialog_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_select_dialog_padding_start_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_switch_padding = global::BLE.Client.Droid.Resource.Dimension.abc_switch_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_body_1_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_body_1_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_body_2_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_body_2_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_button_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_button_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_caption_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_caption_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_display_1_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_1_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_display_2_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_2_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_display_3_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_3_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_display_4_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_4_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_headline_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_headline_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_large_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_large_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_medium_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_medium_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_menu_header_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_menu_header_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_menu_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_menu_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_small_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_small_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_subhead_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_subhead_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_subtitle_material_toolbar = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_subtitle_material_toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_title_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_title_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.abc_text_size_title_material_toolbar = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_title_material_toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.cardview_compat_inset_shadow = global::BLE.Client.Droid.Resource.Dimension.cardview_compat_inset_shadow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.cardview_default_elevation = global::BLE.Client.Droid.Resource.Dimension.cardview_default_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.cardview_default_radius = global::BLE.Client.Droid.Resource.Dimension.cardview_default_radius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.compat_button_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_inset_horizontal_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.compat_button_inset_vertical_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_inset_vertical_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.compat_button_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_padding_horizontal_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.compat_button_padding_vertical_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_padding_vertical_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.compat_control_corner_material = global::BLE.Client.Droid.Resource.Dimension.compat_control_corner_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.compat_notification_large_icon_max_height = global::BLE.Client.Droid.Resource.Dimension.compat_notification_large_icon_max_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.compat_notification_large_icon_max_width = global::BLE.Client.Droid.Resource.Dimension.compat_notification_large_icon_max_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_appbar_elevation = global::BLE.Client.Droid.Resource.Dimension.design_appbar_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_active_item_max_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_item_max_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_active_item_min_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_item_min_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_active_text_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_text_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_height = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_icon_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_icon_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_item_max_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_item_max_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_item_min_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_item_min_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_margin = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_margin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_shadow_height = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_shadow_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_navigation_text_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_text_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_sheet_modal_elevation = global::BLE.Client.Droid.Resource.Dimension.design_bottom_sheet_modal_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_bottom_sheet_peek_height_min = global::BLE.Client.Droid.Resource.Dimension.design_bottom_sheet_peek_height_min; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_fab_border_width = global::BLE.Client.Droid.Resource.Dimension.design_fab_border_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_fab_elevation = global::BLE.Client.Droid.Resource.Dimension.design_fab_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_fab_image_size = global::BLE.Client.Droid.Resource.Dimension.design_fab_image_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_fab_size_mini = global::BLE.Client.Droid.Resource.Dimension.design_fab_size_mini; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_fab_size_normal = global::BLE.Client.Droid.Resource.Dimension.design_fab_size_normal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_fab_translation_z_hovered_focused = global::BLE.Client.Droid.Resource.Dimension.design_fab_translation_z_hovered_focused; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_fab_translation_z_pressed = global::BLE.Client.Droid.Resource.Dimension.design_fab_translation_z_pressed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.design_navigation_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_navigation_icon_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_icon_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_navigation_icon_size = global::BLE.Client.Droid.Resource.Dimension.design_navigation_icon_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_navigation_item_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_item_horizontal_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_navigation_item_icon_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_item_icon_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_navigation_max_width = global::BLE.Client.Droid.Resource.Dimension.design_navigation_max_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_navigation_padding_bottom = global::BLE.Client.Droid.Resource.Dimension.design_navigation_padding_bottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_navigation_separator_vertical_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_separator_vertical_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_action_inline_max_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_action_inline_max_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_background_corner_radius = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_background_corner_radius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_elevation = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_extra_spacing_horizontal = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_extra_spacing_horizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_max_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_max_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_min_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_min_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_padding_horizontal = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_horizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_padding_vertical = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_vertical; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_padding_vertical_2lines = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_vertical_2lines; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_snackbar_text_size = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_text_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_tab_max_width = global::BLE.Client.Droid.Resource.Dimension.design_tab_max_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_tab_scrollable_min_width = global::BLE.Client.Droid.Resource.Dimension.design_tab_scrollable_min_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_tab_text_size = global::BLE.Client.Droid.Resource.Dimension.design_tab_text_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_tab_text_size_2line = global::BLE.Client.Droid.Resource.Dimension.design_tab_text_size_2line; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.design_textinput_caption_translate_y = global::BLE.Client.Droid.Resource.Dimension.design_textinput_caption_translate_y; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.disabled_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.disabled_alpha_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.disabled_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.disabled_alpha_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.fastscroll_default_thickness = global::BLE.Client.Droid.Resource.Dimension.fastscroll_default_thickness; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.fastscroll_margin = global::BLE.Client.Droid.Resource.Dimension.fastscroll_margin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.fastscroll_minimum_range = global::BLE.Client.Droid.Resource.Dimension.fastscroll_minimum_range; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.highlight_alpha_material_colored = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.highlight_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.highlight_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.hint_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.hint_alpha_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.hint_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.hint_alpha_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.hint_pressed_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.hint_pressed_alpha_material_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.hint_pressed_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.hint_pressed_alpha_material_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.item_touch_helper_swipe_escape_velocity = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_swipe_escape_velocity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_bottomappbar_height = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_corner_radius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_dialog_btn_min_width = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_dialog_btn_min_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_disabled_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_disabled_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_disabled_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_disabled_z; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_focused_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_focused_z; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_hovered_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_hovered_z; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_icon_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_icon_btn_padding_left; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_icon_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_inset = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_inset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_letter_spacing = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_letter_spacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_padding_bottom = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_bottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_left; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_padding_right = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_right; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_padding_top = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_top; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_pressed_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_pressed_z; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_stroke_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_stroke_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_text_btn_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_icon_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_text_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_left; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_text_btn_padding_right = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_right; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_text_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_btn_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_z; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_card_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_card_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_card_spacing = global::BLE.Client.Droid.Resource.Dimension.mtrl_card_spacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_chip_pressed_translation_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_chip_pressed_translation_z; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_chip_text_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_chip_text_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_fab_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_fab_translation_z_hovered_focused = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_translation_z_hovered_focused; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_fab_translation_z_pressed = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_translation_z_pressed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_navigation_item_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_item_horizontal_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_navigation_item_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_item_icon_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_snackbar_background_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_snackbar_background_corner_radius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_snackbar_margin = global::BLE.Client.Droid.Resource.Dimension.mtrl_snackbar_margin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_textinput_box_bottom_offset = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_bottom_offset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_textinput_box_corner_radius_medium = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_medium; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_textinput_box_corner_radius_small = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_textinput_box_label_cutout_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_label_cutout_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_textinput_box_padding_end = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_padding_end; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_textinput_box_stroke_width_default = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_default; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_textinput_box_stroke_width_focused = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_focused; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.mtrl_toolbar_default_height = global::BLE.Client.Droid.Resource.Dimension.mtrl_toolbar_default_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_action_icon_size = global::BLE.Client.Droid.Resource.Dimension.notification_action_icon_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_action_text_size = global::BLE.Client.Droid.Resource.Dimension.notification_action_text_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_big_circle_margin = global::BLE.Client.Droid.Resource.Dimension.notification_big_circle_margin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_content_margin_start = global::BLE.Client.Droid.Resource.Dimension.notification_content_margin_start; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_large_icon_height = global::BLE.Client.Droid.Resource.Dimension.notification_large_icon_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_large_icon_width = global::BLE.Client.Droid.Resource.Dimension.notification_large_icon_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_main_column_padding_top = global::BLE.Client.Droid.Resource.Dimension.notification_main_column_padding_top; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_media_narrow_margin = global::BLE.Client.Droid.Resource.Dimension.notification_media_narrow_margin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_right_icon_size = global::BLE.Client.Droid.Resource.Dimension.notification_right_icon_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_right_side_padding_top = global::BLE.Client.Droid.Resource.Dimension.notification_right_side_padding_top; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_small_icon_background_padding = global::BLE.Client.Droid.Resource.Dimension.notification_small_icon_background_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_small_icon_size_as_large = global::BLE.Client.Droid.Resource.Dimension.notification_small_icon_size_as_large; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_subtext_size = global::BLE.Client.Droid.Resource.Dimension.notification_subtext_size; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_top_pad = global::BLE.Client.Droid.Resource.Dimension.notification_top_pad; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.notification_top_pad_large_text = global::BLE.Client.Droid.Resource.Dimension.notification_top_pad_large_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.tooltip_corner_radius = global::BLE.Client.Droid.Resource.Dimension.tooltip_corner_radius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.tooltip_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.tooltip_horizontal_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.tooltip_margin = global::BLE.Client.Droid.Resource.Dimension.tooltip_margin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.tooltip_precise_anchor_extra_offset = global::BLE.Client.Droid.Resource.Dimension.tooltip_precise_anchor_extra_offset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.tooltip_precise_anchor_threshold = global::BLE.Client.Droid.Resource.Dimension.tooltip_precise_anchor_threshold; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.tooltip_vertical_padding = global::BLE.Client.Droid.Resource.Dimension.tooltip_vertical_padding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.tooltip_y_offset_non_touch = global::BLE.Client.Droid.Resource.Dimension.tooltip_y_offset_non_touch; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Dimension.tooltip_y_offset_touch = global::BLE.Client.Droid.Resource.Dimension.tooltip_y_offset_touch; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ab_share_pack_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ab_share_pack_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_action_bar_item_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_action_bar_item_background_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_borderless_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_borderless_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_check_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_check_to_on_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_000; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_check_to_on_mtrl_015 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_015; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_colored_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_colored_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_default_mtrl_shape = global::BLE.Client.Droid.Resource.Drawable.abc_btn_default_mtrl_shape; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_radio_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_radio_to_on_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_000; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_radio_to_on_mtrl_015 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_015; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_cab_background_internal_bg = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_internal_bg; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_cab_background_top_material = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_top_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_cab_background_top_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_top_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_control_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_control_background_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_dialog_material_background = global::BLE.Client.Droid.Resource.Drawable.abc_dialog_material_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_edit_text_material = global::BLE.Client.Droid.Resource.Drawable.abc_edit_text_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_ab_back_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_ab_back_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_clear_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_clear_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_go_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_go_search_api_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_menu_overflow_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_overflow_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_menu_share_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_share_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_search_api_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_star_black_16dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_16dp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_star_black_36dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_36dp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_star_black_48dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_48dp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_star_half_black_16dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_16dp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_star_half_black_36dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_36dp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_star_half_black_48dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_48dp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ic_voice_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_voice_search_api_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_item_background_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_item_background_holo_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_item_background_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_item_background_holo_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_divider_material = global::BLE.Client.Droid.Resource.Drawable.abc_list_divider_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_divider_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_list_divider_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_focused_holo = global::BLE.Client.Droid.Resource.Drawable.abc_list_focused_holo; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_longpressed_holo = global::BLE.Client.Droid.Resource.Drawable.abc_list_longpressed_holo; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_pressed_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_pressed_holo_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_pressed_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_pressed_holo_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_selector_background_transition_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_selector_background_transition_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_selector_disabled_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_disabled_holo_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_selector_disabled_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_disabled_holo_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_selector_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_holo_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_list_selector_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_holo_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult = global::BLE.Client.Droid.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_popup_background_mtrl_mult = global::BLE.Client.Droid.Resource.Drawable.abc_popup_background_mtrl_mult; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ratingbar_indicator_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_indicator_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ratingbar_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_ratingbar_small_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_small_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005 = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_scrubber_primary_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_primary_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_scrubber_track_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_track_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_seekbar_thumb_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_thumb_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_seekbar_tick_mark_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_tick_mark_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_seekbar_track_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_track_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_spinner_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_spinner_mtrl_am_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_spinner_textfield_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_spinner_textfield_background_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_switch_thumb_material = global::BLE.Client.Droid.Resource.Drawable.abc_switch_thumb_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_switch_track_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_switch_track_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_tab_indicator_material = global::BLE.Client.Droid.Resource.Drawable.abc_tab_indicator_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_tab_indicator_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_tab_indicator_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_text_cursor_material = global::BLE.Client.Droid.Resource.Drawable.abc_text_cursor_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_text_select_handle_left_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_text_select_handle_left_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_text_select_handle_middle_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_text_select_handle_right_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_text_select_handle_right_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_textfield_activated_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_activated_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_textfield_default_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_default_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_textfield_search_default_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_default_mtrl_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_textfield_search_material = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.abc_vector_test = global::BLE.Client.Droid.Resource.Drawable.abc_vector_test; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.avd_hide_password = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.avd_hide_password_1 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.avd_hide_password_2 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.avd_hide_password_3 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_3; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.avd_show_password = global::BLE.Client.Droid.Resource.Drawable.avd_show_password; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.avd_show_password_1 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.avd_show_password_2 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.avd_show_password_3 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_3; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.design_bottom_navigation_item_background = global::BLE.Client.Droid.Resource.Drawable.design_bottom_navigation_item_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.design_fab_background = global::BLE.Client.Droid.Resource.Drawable.design_fab_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.design_ic_visibility = global::BLE.Client.Droid.Resource.Drawable.design_ic_visibility; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.design_ic_visibility_off = global::BLE.Client.Droid.Resource.Drawable.design_ic_visibility_off; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.design_password_eye = global::BLE.Client.Droid.Resource.Drawable.design_password_eye; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.design_snackbar_background = global::BLE.Client.Droid.Resource.Drawable.design_snackbar_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.ic_mtrl_chip_checked_black = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_checked_black; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.ic_mtrl_chip_checked_circle = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_checked_circle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.ic_mtrl_chip_close_circle = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_close_circle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.mtrl_snackbar_background = global::BLE.Client.Droid.Resource.Drawable.mtrl_snackbar_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.mtrl_tabs_default_indicator = global::BLE.Client.Droid.Resource.Drawable.mtrl_tabs_default_indicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.navigation_empty_icon = global::BLE.Client.Droid.Resource.Drawable.navigation_empty_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_action_background = global::BLE.Client.Droid.Resource.Drawable.notification_action_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_bg = global::BLE.Client.Droid.Resource.Drawable.notification_bg; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_bg_low = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_bg_low_normal = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low_normal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_bg_low_pressed = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low_pressed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_bg_normal = global::BLE.Client.Droid.Resource.Drawable.notification_bg_normal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_bg_normal_pressed = global::BLE.Client.Droid.Resource.Drawable.notification_bg_normal_pressed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_icon_background = global::BLE.Client.Droid.Resource.Drawable.notification_icon_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_template_icon_bg = global::BLE.Client.Droid.Resource.Drawable.notification_template_icon_bg; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_template_icon_low_bg = global::BLE.Client.Droid.Resource.Drawable.notification_template_icon_low_bg; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notification_tile_bg = global::BLE.Client.Droid.Resource.Drawable.notification_tile_bg; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.notify_panel_notification_icon_bg = global::BLE.Client.Droid.Resource.Drawable.notify_panel_notification_icon_bg; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.tooltip_frame_dark = global::BLE.Client.Droid.Resource.Drawable.tooltip_frame_dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Drawable.tooltip_frame_light = global::BLE.Client.Droid.Resource.Drawable.tooltip_frame_light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.ALT = global::BLE.Client.Droid.Resource.Id.ALT; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.CTRL = global::BLE.Client.Droid.Resource.Id.CTRL; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.FUNCTION = global::BLE.Client.Droid.Resource.Id.FUNCTION; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.META = global::BLE.Client.Droid.Resource.Id.META; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.MvvmCrossTagId = global::BLE.Client.Droid.Resource.Id.MvvmCrossTagId; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.MvxBindingTagUnique = global::BLE.Client.Droid.Resource.Id.MvxBindingTagUnique; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.SHIFT = global::BLE.Client.Droid.Resource.Id.SHIFT; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.SYM = global::BLE.Client.Droid.Resource.Id.SYM; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_bar = global::BLE.Client.Droid.Resource.Id.action_bar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_bar_activity_content = global::BLE.Client.Droid.Resource.Id.action_bar_activity_content; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_bar_container = global::BLE.Client.Droid.Resource.Id.action_bar_container; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_bar_root = global::BLE.Client.Droid.Resource.Id.action_bar_root; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_bar_spinner = global::BLE.Client.Droid.Resource.Id.action_bar_spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_bar_subtitle = global::BLE.Client.Droid.Resource.Id.action_bar_subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_bar_title = global::BLE.Client.Droid.Resource.Id.action_bar_title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_container = global::BLE.Client.Droid.Resource.Id.action_container; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_context_bar = global::BLE.Client.Droid.Resource.Id.action_context_bar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_divider = global::BLE.Client.Droid.Resource.Id.action_divider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_image = global::BLE.Client.Droid.Resource.Id.action_image; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_menu_divider = global::BLE.Client.Droid.Resource.Id.action_menu_divider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_menu_presenter = global::BLE.Client.Droid.Resource.Id.action_menu_presenter; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_mode_bar = global::BLE.Client.Droid.Resource.Id.action_mode_bar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_mode_bar_stub = global::BLE.Client.Droid.Resource.Id.action_mode_bar_stub; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_mode_close_button = global::BLE.Client.Droid.Resource.Id.action_mode_close_button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.action_text = global::BLE.Client.Droid.Resource.Id.action_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.actions = global::BLE.Client.Droid.Resource.Id.actions; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.activity_chooser_view_content = global::BLE.Client.Droid.Resource.Id.activity_chooser_view_content; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.add = global::BLE.Client.Droid.Resource.Id.add; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.alertTitle = global::BLE.Client.Droid.Resource.Id.alertTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.all = global::BLE.Client.Droid.Resource.Id.all; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.always = global::BLE.Client.Droid.Resource.Id.always; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.async = global::BLE.Client.Droid.Resource.Id.async; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.auto = global::BLE.Client.Droid.Resource.Id.auto; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.beginning = global::BLE.Client.Droid.Resource.Id.beginning; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.blocking = global::BLE.Client.Droid.Resource.Id.blocking; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.bottom = global::BLE.Client.Droid.Resource.Id.bottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.buttonPanel = global::BLE.Client.Droid.Resource.Id.buttonPanel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.center = global::BLE.Client.Droid.Resource.Id.center; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.center_horizontal = global::BLE.Client.Droid.Resource.Id.center_horizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.center_vertical = global::BLE.Client.Droid.Resource.Id.center_vertical; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.checkbox = global::BLE.Client.Droid.Resource.Id.checkbox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.chronometer = global::BLE.Client.Droid.Resource.Id.chronometer; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.clip_horizontal = global::BLE.Client.Droid.Resource.Id.clip_horizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.clip_vertical = global::BLE.Client.Droid.Resource.Id.clip_vertical; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.collapseActionView = global::BLE.Client.Droid.Resource.Id.collapseActionView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.container = global::BLE.Client.Droid.Resource.Id.container; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.content = global::BLE.Client.Droid.Resource.Id.content; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.contentPanel = global::BLE.Client.Droid.Resource.Id.contentPanel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.coordinator = global::BLE.Client.Droid.Resource.Id.coordinator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.custom = global::BLE.Client.Droid.Resource.Id.custom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.customPanel = global::BLE.Client.Droid.Resource.Id.customPanel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.decor_content_parent = global::BLE.Client.Droid.Resource.Id.decor_content_parent; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.default_activity_button = global::BLE.Client.Droid.Resource.Id.default_activity_button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.design_bottom_sheet = global::BLE.Client.Droid.Resource.Id.design_bottom_sheet; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.design_menu_item_action_area = global::BLE.Client.Droid.Resource.Id.design_menu_item_action_area; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.design_menu_item_action_area_stub = global::BLE.Client.Droid.Resource.Id.design_menu_item_action_area_stub; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.design_menu_item_text = global::BLE.Client.Droid.Resource.Id.design_menu_item_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.design_navigation_view = global::BLE.Client.Droid.Resource.Id.design_navigation_view; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.disableHome = global::BLE.Client.Droid.Resource.Id.disableHome; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.edit_query = global::BLE.Client.Droid.Resource.Id.edit_query; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.end = global::BLE.Client.Droid.Resource.Id.end; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.enterAlways = global::BLE.Client.Droid.Resource.Id.enterAlways; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.enterAlwaysCollapsed = global::BLE.Client.Droid.Resource.Id.enterAlwaysCollapsed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.exitUntilCollapsed = global::BLE.Client.Droid.Resource.Id.exitUntilCollapsed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.expand_activities_button = global::BLE.Client.Droid.Resource.Id.expand_activities_button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.expanded_menu = global::BLE.Client.Droid.Resource.Id.expanded_menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.fill = global::BLE.Client.Droid.Resource.Id.fill; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.fill_horizontal = global::BLE.Client.Droid.Resource.Id.fill_horizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.fill_vertical = global::BLE.Client.Droid.Resource.Id.fill_vertical; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.filled = global::BLE.Client.Droid.Resource.Id.filled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.@fixed = global::BLE.Client.Droid.Resource.Id.@fixed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.forever = global::BLE.Client.Droid.Resource.Id.forever; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.ghost_view = global::BLE.Client.Droid.Resource.Id.ghost_view; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.group_divider = global::BLE.Client.Droid.Resource.Id.group_divider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.home = global::BLE.Client.Droid.Resource.Id.home; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.homeAsUp = global::BLE.Client.Droid.Resource.Id.homeAsUp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.icon = global::BLE.Client.Droid.Resource.Id.icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.icon_group = global::BLE.Client.Droid.Resource.Id.icon_group; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.ifRoom = global::BLE.Client.Droid.Resource.Id.ifRoom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.image = global::BLE.Client.Droid.Resource.Id.image; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.info = global::BLE.Client.Droid.Resource.Id.info; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.italic = global::BLE.Client.Droid.Resource.Id.italic; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.item_touch_helper_previous_elevation = global::BLE.Client.Droid.Resource.Id.item_touch_helper_previous_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.labeled = global::BLE.Client.Droid.Resource.Id.labeled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.largeLabel = global::BLE.Client.Droid.Resource.Id.largeLabel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.left = global::BLE.Client.Droid.Resource.Id.left; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.line1 = global::BLE.Client.Droid.Resource.Id.line1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.line3 = global::BLE.Client.Droid.Resource.Id.line3; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.listMode = global::BLE.Client.Droid.Resource.Id.listMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.list_item = global::BLE.Client.Droid.Resource.Id.list_item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.masked = global::BLE.Client.Droid.Resource.Id.masked; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.message = global::BLE.Client.Droid.Resource.Id.message; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.middle = global::BLE.Client.Droid.Resource.Id.middle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.mini = global::BLE.Client.Droid.Resource.Id.mini; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.mtrl_child_content_container = global::BLE.Client.Droid.Resource.Id.mtrl_child_content_container; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.mtrl_internal_children_alpha_tag = global::BLE.Client.Droid.Resource.Id.mtrl_internal_children_alpha_tag; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.multiply = global::BLE.Client.Droid.Resource.Id.multiply; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.navigation_header_container = global::BLE.Client.Droid.Resource.Id.navigation_header_container; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.never = global::BLE.Client.Droid.Resource.Id.never; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.none = global::BLE.Client.Droid.Resource.Id.none; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.normal = global::BLE.Client.Droid.Resource.Id.normal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.notification_background = global::BLE.Client.Droid.Resource.Id.notification_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.notification_main_column = global::BLE.Client.Droid.Resource.Id.notification_main_column; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.notification_main_column_container = global::BLE.Client.Droid.Resource.Id.notification_main_column_container; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.outline = global::BLE.Client.Droid.Resource.Id.outline; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.parallax = global::BLE.Client.Droid.Resource.Id.parallax; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.parentPanel = global::BLE.Client.Droid.Resource.Id.parentPanel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.parent_matrix = global::BLE.Client.Droid.Resource.Id.parent_matrix; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.pin = global::BLE.Client.Droid.Resource.Id.pin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.progress_circular = global::BLE.Client.Droid.Resource.Id.progress_circular; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.progress_horizontal = global::BLE.Client.Droid.Resource.Id.progress_horizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.radio = global::BLE.Client.Droid.Resource.Id.radio; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.right = global::BLE.Client.Droid.Resource.Id.right; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.right_icon = global::BLE.Client.Droid.Resource.Id.right_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.right_side = global::BLE.Client.Droid.Resource.Id.right_side; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.save_image_matrix = global::BLE.Client.Droid.Resource.Id.save_image_matrix; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.save_non_transition_alpha = global::BLE.Client.Droid.Resource.Id.save_non_transition_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.save_scale_type = global::BLE.Client.Droid.Resource.Id.save_scale_type; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.screen = global::BLE.Client.Droid.Resource.Id.screen; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.scroll = global::BLE.Client.Droid.Resource.Id.scroll; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.scrollIndicatorDown = global::BLE.Client.Droid.Resource.Id.scrollIndicatorDown; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.scrollIndicatorUp = global::BLE.Client.Droid.Resource.Id.scrollIndicatorUp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.scrollView = global::BLE.Client.Droid.Resource.Id.scrollView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.scrollable = global::BLE.Client.Droid.Resource.Id.scrollable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_badge = global::BLE.Client.Droid.Resource.Id.search_badge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_bar = global::BLE.Client.Droid.Resource.Id.search_bar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_button = global::BLE.Client.Droid.Resource.Id.search_button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_close_btn = global::BLE.Client.Droid.Resource.Id.search_close_btn; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_edit_frame = global::BLE.Client.Droid.Resource.Id.search_edit_frame; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_go_btn = global::BLE.Client.Droid.Resource.Id.search_go_btn; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_mag_icon = global::BLE.Client.Droid.Resource.Id.search_mag_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_plate = global::BLE.Client.Droid.Resource.Id.search_plate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_src_text = global::BLE.Client.Droid.Resource.Id.search_src_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.search_voice_btn = global::BLE.Client.Droid.Resource.Id.search_voice_btn; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.select_dialog_listview = global::BLE.Client.Droid.Resource.Id.select_dialog_listview; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.selected = global::BLE.Client.Droid.Resource.Id.selected; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.shortcut = global::BLE.Client.Droid.Resource.Id.shortcut; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.showCustom = global::BLE.Client.Droid.Resource.Id.showCustom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.showHome = global::BLE.Client.Droid.Resource.Id.showHome; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.showTitle = global::BLE.Client.Droid.Resource.Id.showTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.smallLabel = global::BLE.Client.Droid.Resource.Id.smallLabel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.snackbar_action = global::BLE.Client.Droid.Resource.Id.snackbar_action; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.snackbar_text = global::BLE.Client.Droid.Resource.Id.snackbar_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.snap = global::BLE.Client.Droid.Resource.Id.snap; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.snapMargins = global::BLE.Client.Droid.Resource.Id.snapMargins; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.spacer = global::BLE.Client.Droid.Resource.Id.spacer; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.split_action_bar = global::BLE.Client.Droid.Resource.Id.split_action_bar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.src_atop = global::BLE.Client.Droid.Resource.Id.src_atop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.src_in = global::BLE.Client.Droid.Resource.Id.src_in; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.src_over = global::BLE.Client.Droid.Resource.Id.src_over; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.start = global::BLE.Client.Droid.Resource.Id.start; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.stretch = global::BLE.Client.Droid.Resource.Id.stretch; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.submenuarrow = global::BLE.Client.Droid.Resource.Id.submenuarrow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.submit_area = global::BLE.Client.Droid.Resource.Id.submit_area; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.tabMode = global::BLE.Client.Droid.Resource.Id.tabMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.tag_transition_group = global::BLE.Client.Droid.Resource.Id.tag_transition_group; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.tag_unhandled_key_event_manager = global::BLE.Client.Droid.Resource.Id.tag_unhandled_key_event_manager; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.tag_unhandled_key_listeners = global::BLE.Client.Droid.Resource.Id.tag_unhandled_key_listeners; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.text = global::BLE.Client.Droid.Resource.Id.text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.text2 = global::BLE.Client.Droid.Resource.Id.text2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.textSpacerNoButtons = global::BLE.Client.Droid.Resource.Id.textSpacerNoButtons; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.textSpacerNoTitle = global::BLE.Client.Droid.Resource.Id.textSpacerNoTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.textStart = global::BLE.Client.Droid.Resource.Id.textStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.text_input_password_toggle = global::BLE.Client.Droid.Resource.Id.text_input_password_toggle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.textinput_counter = global::BLE.Client.Droid.Resource.Id.textinput_counter; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.textinput_error = global::BLE.Client.Droid.Resource.Id.textinput_error; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.textinput_helper_text = global::BLE.Client.Droid.Resource.Id.textinput_helper_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.time = global::BLE.Client.Droid.Resource.Id.time; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.title = global::BLE.Client.Droid.Resource.Id.title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.titleDividerNoCustom = global::BLE.Client.Droid.Resource.Id.titleDividerNoCustom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.title_template = global::BLE.Client.Droid.Resource.Id.title_template; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.top = global::BLE.Client.Droid.Resource.Id.top; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.topPanel = global::BLE.Client.Droid.Resource.Id.topPanel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.touch_outside = global::BLE.Client.Droid.Resource.Id.touch_outside; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.transition_current_scene = global::BLE.Client.Droid.Resource.Id.transition_current_scene; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.transition_layout_save = global::BLE.Client.Droid.Resource.Id.transition_layout_save; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.transition_position = global::BLE.Client.Droid.Resource.Id.transition_position; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.transition_scene_layoutid_cache = global::BLE.Client.Droid.Resource.Id.transition_scene_layoutid_cache; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.transition_transform = global::BLE.Client.Droid.Resource.Id.transition_transform; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.uniform = global::BLE.Client.Droid.Resource.Id.uniform; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.unlabeled = global::BLE.Client.Droid.Resource.Id.unlabeled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.up = global::BLE.Client.Droid.Resource.Id.up; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.useLogo = global::BLE.Client.Droid.Resource.Id.useLogo; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.view_offset_helper = global::BLE.Client.Droid.Resource.Id.view_offset_helper; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.visible = global::BLE.Client.Droid.Resource.Id.visible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.withText = global::BLE.Client.Droid.Resource.Id.withText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Id.wrap_content = global::BLE.Client.Droid.Resource.Id.wrap_content; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.abc_config_activityDefaultDur = global::BLE.Client.Droid.Resource.Integer.abc_config_activityDefaultDur; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.abc_config_activityShortDur = global::BLE.Client.Droid.Resource.Integer.abc_config_activityShortDur; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.app_bar_elevation_anim_duration = global::BLE.Client.Droid.Resource.Integer.app_bar_elevation_anim_duration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.bottom_sheet_slide_duration = global::BLE.Client.Droid.Resource.Integer.bottom_sheet_slide_duration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.cancel_button_image_alpha = global::BLE.Client.Droid.Resource.Integer.cancel_button_image_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.config_tooltipAnimTime = global::BLE.Client.Droid.Resource.Integer.config_tooltipAnimTime; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.design_snackbar_text_max_lines = global::BLE.Client.Droid.Resource.Integer.design_snackbar_text_max_lines; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.design_tab_indicator_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.design_tab_indicator_anim_duration_ms; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.hide_password_duration = global::BLE.Client.Droid.Resource.Integer.hide_password_duration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.mtrl_btn_anim_delay_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_btn_anim_delay_ms; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.mtrl_btn_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_btn_anim_duration_ms; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.mtrl_chip_anim_duration = global::BLE.Client.Droid.Resource.Integer.mtrl_chip_anim_duration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.mtrl_tab_indicator_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_tab_indicator_anim_duration_ms; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.show_password_duration = global::BLE.Client.Droid.Resource.Integer.show_password_duration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Integer.status_bar_notification_info_maxnum = global::BLE.Client.Droid.Resource.Integer.status_bar_notification_info_maxnum; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Interpolator.mtrl_fast_out_linear_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_fast_out_linear_in; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Interpolator.mtrl_fast_out_slow_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_fast_out_slow_in; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Interpolator.mtrl_linear = global::BLE.Client.Droid.Resource.Interpolator.mtrl_linear; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Interpolator.mtrl_linear_out_slow_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_linear_out_slow_in; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_action_bar_title_item = global::BLE.Client.Droid.Resource.Layout.abc_action_bar_title_item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_action_bar_up_container = global::BLE.Client.Droid.Resource.Layout.abc_action_bar_up_container; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_action_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_action_menu_item_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_action_menu_layout = global::BLE.Client.Droid.Resource.Layout.abc_action_menu_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_action_mode_bar = global::BLE.Client.Droid.Resource.Layout.abc_action_mode_bar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_action_mode_close_item_material = global::BLE.Client.Droid.Resource.Layout.abc_action_mode_close_item_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_activity_chooser_view = global::BLE.Client.Droid.Resource.Layout.abc_activity_chooser_view; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_activity_chooser_view_list_item = global::BLE.Client.Droid.Resource.Layout.abc_activity_chooser_view_list_item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_alert_dialog_button_bar_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_button_bar_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_alert_dialog_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_alert_dialog_title_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_title_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_cascading_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_cascading_menu_item_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_dialog_title_material = global::BLE.Client.Droid.Resource.Layout.abc_dialog_title_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_expanded_menu_layout = global::BLE.Client.Droid.Resource.Layout.abc_expanded_menu_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_list_menu_item_checkbox = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_checkbox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_list_menu_item_icon = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_list_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_list_menu_item_radio = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_radio; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_popup_menu_header_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_popup_menu_header_item_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_popup_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_popup_menu_item_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_screen_content_include = global::BLE.Client.Droid.Resource.Layout.abc_screen_content_include; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_screen_simple = global::BLE.Client.Droid.Resource.Layout.abc_screen_simple; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_screen_simple_overlay_action_mode = global::BLE.Client.Droid.Resource.Layout.abc_screen_simple_overlay_action_mode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_screen_toolbar = global::BLE.Client.Droid.Resource.Layout.abc_screen_toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_search_dropdown_item_icons_2line = global::BLE.Client.Droid.Resource.Layout.abc_search_dropdown_item_icons_2line; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_search_view = global::BLE.Client.Droid.Resource.Layout.abc_search_view; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_select_dialog_material = global::BLE.Client.Droid.Resource.Layout.abc_select_dialog_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.abc_tooltip = global::BLE.Client.Droid.Resource.Layout.abc_tooltip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_bottom_navigation_item = global::BLE.Client.Droid.Resource.Layout.design_bottom_navigation_item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_bottom_sheet_dialog = global::BLE.Client.Droid.Resource.Layout.design_bottom_sheet_dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_layout_snackbar = global::BLE.Client.Droid.Resource.Layout.design_layout_snackbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_layout_snackbar_include = global::BLE.Client.Droid.Resource.Layout.design_layout_snackbar_include; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_layout_tab_icon = global::BLE.Client.Droid.Resource.Layout.design_layout_tab_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_layout_tab_text = global::BLE.Client.Droid.Resource.Layout.design_layout_tab_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_menu_item_action_area = global::BLE.Client.Droid.Resource.Layout.design_menu_item_action_area; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_navigation_item = global::BLE.Client.Droid.Resource.Layout.design_navigation_item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_navigation_item_header = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_header; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_navigation_item_separator = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_separator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_navigation_item_subheader = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_subheader; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_navigation_menu = global::BLE.Client.Droid.Resource.Layout.design_navigation_menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_navigation_menu_item = global::BLE.Client.Droid.Resource.Layout.design_navigation_menu_item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.design_text_input_password_icon = global::BLE.Client.Droid.Resource.Layout.design_text_input_password_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.mtrl_layout_snackbar = global::BLE.Client.Droid.Resource.Layout.mtrl_layout_snackbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.mtrl_layout_snackbar_include = global::BLE.Client.Droid.Resource.Layout.mtrl_layout_snackbar_include; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.notification_action = global::BLE.Client.Droid.Resource.Layout.notification_action; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.notification_action_tombstone = global::BLE.Client.Droid.Resource.Layout.notification_action_tombstone; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.notification_template_custom_big = global::BLE.Client.Droid.Resource.Layout.notification_template_custom_big; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.notification_template_icon_group = global::BLE.Client.Droid.Resource.Layout.notification_template_icon_group; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.notification_template_part_chronometer = global::BLE.Client.Droid.Resource.Layout.notification_template_part_chronometer; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.notification_template_part_time = global::BLE.Client.Droid.Resource.Layout.notification_template_part_time; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.select_dialog_item_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_item_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.select_dialog_multichoice_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_multichoice_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.select_dialog_singlechoice_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_singlechoice_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Layout.support_simple_spinner_dropdown_item = global::BLE.Client.Droid.Resource.Layout.support_simple_spinner_dropdown_item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_action_bar_home_description = global::BLE.Client.Droid.Resource.String.abc_action_bar_home_description; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_action_bar_up_description = global::BLE.Client.Droid.Resource.String.abc_action_bar_up_description; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_action_menu_overflow_description = global::BLE.Client.Droid.Resource.String.abc_action_menu_overflow_description; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_action_mode_done = global::BLE.Client.Droid.Resource.String.abc_action_mode_done; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_activity_chooser_view_see_all = global::BLE.Client.Droid.Resource.String.abc_activity_chooser_view_see_all; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_activitychooserview_choose_application = global::BLE.Client.Droid.Resource.String.abc_activitychooserview_choose_application; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_capital_off = global::BLE.Client.Droid.Resource.String.abc_capital_off; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_capital_on = global::BLE.Client.Droid.Resource.String.abc_capital_on; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_body_1_material = global::BLE.Client.Droid.Resource.String.abc_font_family_body_1_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_body_2_material = global::BLE.Client.Droid.Resource.String.abc_font_family_body_2_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_button_material = global::BLE.Client.Droid.Resource.String.abc_font_family_button_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_caption_material = global::BLE.Client.Droid.Resource.String.abc_font_family_caption_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_display_1_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_1_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_display_2_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_2_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_display_3_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_3_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_display_4_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_4_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_headline_material = global::BLE.Client.Droid.Resource.String.abc_font_family_headline_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_menu_material = global::BLE.Client.Droid.Resource.String.abc_font_family_menu_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_subhead_material = global::BLE.Client.Droid.Resource.String.abc_font_family_subhead_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_font_family_title_material = global::BLE.Client.Droid.Resource.String.abc_font_family_title_material; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_alt_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_alt_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_ctrl_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_ctrl_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_delete_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_delete_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_enter_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_enter_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_function_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_function_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_meta_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_meta_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_shift_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_shift_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_space_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_space_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_menu_sym_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_sym_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_prepend_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_prepend_shortcut_label; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_search_hint = global::BLE.Client.Droid.Resource.String.abc_search_hint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_searchview_description_clear = global::BLE.Client.Droid.Resource.String.abc_searchview_description_clear; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_searchview_description_query = global::BLE.Client.Droid.Resource.String.abc_searchview_description_query; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_searchview_description_search = global::BLE.Client.Droid.Resource.String.abc_searchview_description_search; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_searchview_description_submit = global::BLE.Client.Droid.Resource.String.abc_searchview_description_submit; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_searchview_description_voice = global::BLE.Client.Droid.Resource.String.abc_searchview_description_voice; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_shareactionprovider_share_with = global::BLE.Client.Droid.Resource.String.abc_shareactionprovider_share_with; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_shareactionprovider_share_with_application = global::BLE.Client.Droid.Resource.String.abc_shareactionprovider_share_with_application; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.abc_toolbar_collapse_description = global::BLE.Client.Droid.Resource.String.abc_toolbar_collapse_description; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.appbar_scrolling_view_behavior = global::BLE.Client.Droid.Resource.String.appbar_scrolling_view_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.bottom_sheet_behavior = global::BLE.Client.Droid.Resource.String.bottom_sheet_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.character_counter_content_description = global::BLE.Client.Droid.Resource.String.character_counter_content_description; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.character_counter_pattern = global::BLE.Client.Droid.Resource.String.character_counter_pattern; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.fab_scroll_shrink_grow_autohide_behavior = global::BLE.Client.Droid.Resource.String.fab_scroll_shrink_grow_autohide_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.fab_transformation_scrim_behavior = global::BLE.Client.Droid.Resource.String.fab_transformation_scrim_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.fab_transformation_sheet_behavior = global::BLE.Client.Droid.Resource.String.fab_transformation_sheet_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.hide_bottom_view_on_scroll_behavior = global::BLE.Client.Droid.Resource.String.hide_bottom_view_on_scroll_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.mtrl_chip_close_icon_content_description = global::BLE.Client.Droid.Resource.String.mtrl_chip_close_icon_content_description; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.password_toggle_content_description = global::BLE.Client.Droid.Resource.String.password_toggle_content_description; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.path_password_eye = global::BLE.Client.Droid.Resource.String.path_password_eye; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.path_password_eye_mask_strike_through = global::BLE.Client.Droid.Resource.String.path_password_eye_mask_strike_through; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.path_password_eye_mask_visible = global::BLE.Client.Droid.Resource.String.path_password_eye_mask_visible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.path_password_strike_through = global::BLE.Client.Droid.Resource.String.path_password_strike_through; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.search_menu_title = global::BLE.Client.Droid.Resource.String.search_menu_title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.status_bar_notification_info_overflow = global::BLE.Client.Droid.Resource.String.status_bar_notification_info_overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.String.view_scroll_translation_autohide_behavior = global::BLE.Client.Droid.Resource.String.view_scroll_translation_autohide_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.AlertDialog_AppCompat = global::BLE.Client.Droid.Resource.Style.AlertDialog_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.AlertDialog_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.AlertDialog_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Animation_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Animation_AppCompat_DropDownUp = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_DropDownUp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Animation_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_Tooltip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Animation_Design_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Animation_Design_BottomSheetDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_AlertDialog_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_AlertDialog_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_AlertDialog_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_AlertDialog_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Animation_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Animation_AppCompat_DropDownUp = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_DropDownUp; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Animation_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_Tooltip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_CardView = global::BLE.Client.Droid.Resource.Style.Base_CardView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_DialogWindowTitle_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_DialogWindowTitle_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_DialogWindowTitleBackground_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_DialogWindowTitleBackground_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Body1 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Body2 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Caption = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Caption; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Display1 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Display2 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Display3 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display3; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Display4 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display4; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Headline = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Headline; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Medium = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Menu = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_SearchResult = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Subhead = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Tooltip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_CompactMenu = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_CompactMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_CompactMenu = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_CompactMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V21_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V21_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V21_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V22_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V22_Theme_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V22_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V22_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V23_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V23_Theme_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V23_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V23_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V26_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V26_Theme_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V26_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V26_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V26_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_V26_Widget_AppCompat_Toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V28_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V28_Theme_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V28_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V28_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V7_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V7_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V7_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V7_Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_EditText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_V7_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_Toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActionMode = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActivityChooserView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Button_Borderless = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Button_Colored = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Button_Small = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ButtonBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_EditText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ImageButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ImageButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Light_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ListMenuView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListMenuView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListPopupWindow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ListView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView_DropDown; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ListView_Menu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView_Menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_PopupMenu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_PopupWindow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupWindow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ProgressBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_RatingBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_RatingBar_Small = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_SearchView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SearchView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_SeekBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_Design_TabLayout = global::BLE.Client.Droid.Resource.Style.Base_Widget_Design_TabLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_MaterialComponents_Chip = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_Chip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.CardView = global::BLE.Client.Droid.Resource.Style.CardView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.CardView_Dark = global::BLE.Client.Droid.Resource.Style.CardView_Dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.CardView_Light = global::BLE.Client.Droid.Resource.Style.CardView_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Light_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_V21_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_V21_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_V21_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_V21_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_V25_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_V25_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_V25_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_V25_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Platform_Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Platform_Widget_AppCompat_Spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat = global::BLE.Client.Droid.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Body1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Body1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Body2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Body2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Caption = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Caption; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Display1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Display2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Display3 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display3; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Display4 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display4; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Headline = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Headline; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Large; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Large_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Large_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Medium = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Medium; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Medium_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Medium_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Menu = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Small_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Small_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Subhead = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Subhead; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Title_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Tooltip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_Switch = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Switch; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Compat_Notification = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Compat_Notification_Info = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Info; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Compat_Notification_Time = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Time; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Compat_Notification_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Design_Counter = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Counter; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Design_Counter_Overflow = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Counter_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Design_Error = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Error; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Design_HelperText = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_HelperText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Design_Hint = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Hint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Design_Snackbar_Message = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Snackbar_Message; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Design_Tab = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Tab; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Body1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Body1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Body2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Body2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Caption = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Caption; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Chip = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Chip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Headline1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Headline2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Headline3 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline3; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Headline4 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline4; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Headline5 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline5; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Headline6 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline6; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Overline = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Overline; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Subtitle1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Subtitle2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_MaterialComponents_Tab = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Tab; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_CompactMenu = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_CompactMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_DayNight = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_DayNight_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_DayNight_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_NoActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_DarkActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_NoActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_AppCompat_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_NoActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_Design = global::BLE.Client.Droid.Resource.Style.Theme_Design; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_Design_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_Design_BottomSheetDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_Design_Light = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_Design_Light_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light_BottomSheetDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_Design_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light_NoActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_Design_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_Design_NoActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_BottomSheetDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_CompactMenu = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_CompactMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_Dark = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Light; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_Solid; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton_CloseMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActionMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActivityChooserView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_AutoCompleteTextView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Button_Borderless = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Borderless; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Borderless_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Button_Colored = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Button_Small = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ButtonBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ButtonBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_CompoundButton_Switch = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_Switch; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_DrawerArrowToggle = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_DrawerArrowToggle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_DropDownItem_Spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_EditText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ImageButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ImageButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActivityChooserView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ListPopupWindow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ListView_DropDown; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_PopupMenu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_SearchView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_SearchView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ListMenuView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListMenuView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListPopupWindow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ListView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView_DropDown; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ListView_Menu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView_Menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_PopupMenu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupMenu_Overflow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_PopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupWindow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ProgressBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ProgressBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_RatingBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_RatingBar_Indicator = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar_Indicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_RatingBar_Small = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar_Small; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_SearchView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SearchView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_SearchView_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SearchView_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_SeekBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SeekBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_SeekBar_Discrete = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SeekBar_Discrete; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Spinner_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Spinner_Underlined = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_Underlined; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_TextView_SpinnerItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Compat_NotificationActionContainer = global::BLE.Client.Droid.Resource.Style.Widget_Compat_NotificationActionContainer; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Compat_NotificationActionText = global::BLE.Client.Droid.Resource.Style.Widget_Compat_NotificationActionText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_AppBarLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_AppBarLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_BottomNavigationView = global::BLE.Client.Droid.Resource.Style.Widget_Design_BottomNavigationView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_BottomSheet_Modal = global::BLE.Client.Droid.Resource.Style.Widget_Design_BottomSheet_Modal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_CollapsingToolbar = global::BLE.Client.Droid.Resource.Style.Widget_Design_CollapsingToolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_FloatingActionButton = global::BLE.Client.Droid.Resource.Style.Widget_Design_FloatingActionButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_NavigationView = global::BLE.Client.Droid.Resource.Style.Widget_Design_NavigationView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_ScrimInsetsFrameLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_ScrimInsetsFrameLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_Snackbar = global::BLE.Client.Droid.Resource.Style.Widget_Design_Snackbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_TabLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_TabLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Design_TextInputLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_TextInputLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_BottomAppBar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_BottomNavigationView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_Icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_TextButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_CardView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_CardView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Chip_Action = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Action; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Chip_Choice = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Choice; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Chip_Entry = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Entry; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Chip_Filter = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Filter; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_ChipGroup = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_ChipGroup; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_FloatingActionButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_FloatingActionButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_NavigationView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_NavigationView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Snackbar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Snackbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TabLayout = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TabLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TabLayout_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TabLayout_Colored; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_MaterialComponents_Toolbar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Style.Widget_Support_CoordinatorLayout = global::BLE.Client.Droid.Resource.Style.Widget_Support_CoordinatorLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Xml.Empty = global::BLE.Client.Droid.Resource.Xml.Empty; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar = global::BLE.Client.Droid.Resource.Styleable.ActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_background = global::BLE.Client.Droid.Resource.Styleable.ActionBar_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_backgroundSplit = global::BLE.Client.Droid.Resource.Styleable.ActionBar_backgroundSplit; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_backgroundStacked = global::BLE.Client.Droid.Resource.Styleable.ActionBar_backgroundStacked; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_contentInsetEnd = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetEndWithActions; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_contentInsetLeft = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_contentInsetRight = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_contentInsetStart = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetStartWithNavigation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_customNavigationLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBar_customNavigationLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_displayOptions = global::BLE.Client.Droid.Resource.Styleable.ActionBar_displayOptions; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_divider = global::BLE.Client.Droid.Resource.Styleable.ActionBar_divider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_elevation = global::BLE.Client.Droid.Resource.Styleable.ActionBar_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_height = global::BLE.Client.Droid.Resource.Styleable.ActionBar_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_hideOnContentScroll = global::BLE.Client.Droid.Resource.Styleable.ActionBar_hideOnContentScroll; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_homeAsUpIndicator = global::BLE.Client.Droid.Resource.Styleable.ActionBar_homeAsUpIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_homeLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBar_homeLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_icon = global::BLE.Client.Droid.Resource.Styleable.ActionBar_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_indeterminateProgressStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_indeterminateProgressStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_itemPadding = global::BLE.Client.Droid.Resource.Styleable.ActionBar_itemPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_logo = global::BLE.Client.Droid.Resource.Styleable.ActionBar_logo; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_navigationMode = global::BLE.Client.Droid.Resource.Styleable.ActionBar_navigationMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_popupTheme = global::BLE.Client.Droid.Resource.Styleable.ActionBar_popupTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_progressBarPadding = global::BLE.Client.Droid.Resource.Styleable.ActionBar_progressBarPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_progressBarStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_progressBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_subtitle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_subtitleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_subtitleTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_title = global::BLE.Client.Droid.Resource.Styleable.ActionBar_title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBar_titleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_titleTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBarLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBarLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionBarLayout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.ActionBarLayout_android_layout_gravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMenuItemView = global::BLE.Client.Droid.Resource.Styleable.ActionMenuItemView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMenuItemView_android_minWidth = global::BLE.Client.Droid.Resource.Styleable.ActionMenuItemView_android_minWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMenuView = global::BLE.Client.Droid.Resource.Styleable.ActionMenuView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMode = global::BLE.Client.Droid.Resource.Styleable.ActionMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMode_background = global::BLE.Client.Droid.Resource.Styleable.ActionMode_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMode_backgroundSplit = global::BLE.Client.Droid.Resource.Styleable.ActionMode_backgroundSplit; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMode_closeItemLayout = global::BLE.Client.Droid.Resource.Styleable.ActionMode_closeItemLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMode_height = global::BLE.Client.Droid.Resource.Styleable.ActionMode_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMode_subtitleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionMode_subtitleTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActionMode_titleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionMode_titleTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActivityChooserView = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ActivityChooserView_initialActivityCount = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView_initialActivityCount; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog = global::BLE.Client.Droid.Resource.Styleable.AlertDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog_android_layout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_android_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog_buttonIconDimen = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_buttonIconDimen; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog_buttonPanelSideLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_buttonPanelSideLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog_listItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_listItemLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog_listLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_listLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog_multiChoiceItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_multiChoiceItemLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog_showTitle = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_showTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AlertDialog_singleChoiceItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_singleChoiceItemLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableCompat = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableItem = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableItem_android_id = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_id; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableTransition = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_android_background = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_elevation = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_expanded = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_expanded; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_liftOnScroll = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_liftOnScroll; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayoutStates = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayoutStates_state_collapsed = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayoutStates_state_collapsible = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayoutStates_state_liftable = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_liftable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayoutStates_state_lifted = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_lifted; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatImageView = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatImageView_android_src = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_android_src; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatImageView_srcCompat = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_srcCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatImageView_tint = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_tint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatImageView_tintMode = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_tintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatSeekBar = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatSeekBar_android_thumb = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_android_thumb; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatSeekBar_tickMark = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatSeekBar_tickMarkTint = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextHelper = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextHelper_android_drawableBottom = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextHelper_android_drawableEnd = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextHelper_android_drawableLeft = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextHelper_android_drawableRight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextHelper_android_drawableStart = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextHelper_android_drawableTop = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextHelper_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_textAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_android_textAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_autoSizePresetSizes = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizePresetSizes; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_autoSizeTextType = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeTextType; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_fontFamily = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_fontFamily; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_lineHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_lineHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTextView_textAllCaps = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_textAllCaps; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarDivider = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarDivider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarItemBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarItemBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarPopupTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarPopupTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarSplitStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarSplitStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarTabStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionDropDownStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionDropDownStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionMenuTextColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeCutDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCutDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeFindDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeFindDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModePasteDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModePasteDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeShareDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeShareDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeSplitBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeSplitBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_activityChooserViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_activityChooserViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_alertDialogStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_alertDialogTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_android_windowIsFloating = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_android_windowIsFloating; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_borderlessButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_borderlessButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_buttonBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_buttonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_buttonStyleSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonStyleSmall; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_checkboxStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_checkboxStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_checkedTextViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_checkedTextViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorAccent = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorAccent; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorBackgroundFloating = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorBackgroundFloating; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorButtonNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorButtonNormal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorControlActivated = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlActivated; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorControlHighlight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlHighlight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorControlNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlNormal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorError = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorError; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorPrimary = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorPrimary; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorPrimaryDark = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorPrimaryDark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_controlBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_controlBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_dialogCornerRadius = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogCornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_dialogPreferredPadding = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogPreferredPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_dialogTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_dividerHorizontal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dividerHorizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_dividerVertical = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dividerVertical; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_dropDownListViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dropDownListViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_editTextBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_editTextColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_editTextStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_homeAsUpIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_homeAsUpIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_imageButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_imageButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listDividerAlertDialog = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listDividerAlertDialog; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listMenuViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listMenuViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listPopupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPopupWindowStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listPreferredItemHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_panelBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_panelMenuListTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelMenuListTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_panelMenuListWidth = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelMenuListWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_popupMenuStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_popupMenuStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_popupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_popupWindowStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_radioButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_radioButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_ratingBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_searchViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_searchViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_seekBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_seekBarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_selectableItemBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_spinnerStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_spinnerStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_switchStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_switchStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textAppearanceListItem = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_textColorSearchUrl = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textColorSearchUrl; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_toolbarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_toolbarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_tooltipForegroundColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_tooltipForegroundColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_tooltipFrameBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_tooltipFrameBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_viewInflaterClass = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_viewInflaterClass; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowActionBar = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowActionBarOverlay = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionBarOverlay; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowActionModeOverlay = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionModeOverlay; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowMinWidthMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMajor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowMinWidthMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMinor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.AppCompatTheme_windowNoTitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowNoTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomAppBar = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomAppBar_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_backgroundTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomAppBar_fabAlignmentMode = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabAlignmentMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomAppBar_fabCradleMargin = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleMargin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomAppBar_hideOnScroll = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_hideOnScroll; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_elevation = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_itemBackground = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_itemIconSize = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemIconSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_itemIconTint = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_itemTextColor = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_labelVisibilityMode = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_labelVisibilityMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomNavigationView_menu = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomSheetBehavior_Layout = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ButtonBarLayout = global::BLE.Client.Droid.Resource.Styleable.ButtonBarLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ButtonBarLayout_allowStacking = global::BLE.Client.Droid.Resource.Styleable.ButtonBarLayout_allowStacking; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView = global::BLE.Client.Droid.Resource.Styleable.CardView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_android_minHeight = global::BLE.Client.Droid.Resource.Styleable.CardView_android_minHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_android_minWidth = global::BLE.Client.Droid.Resource.Styleable.CardView_android_minWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_cardBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.CardView_cardBackgroundColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_cardCornerRadius = global::BLE.Client.Droid.Resource.Styleable.CardView_cardCornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_cardElevation = global::BLE.Client.Droid.Resource.Styleable.CardView_cardElevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_cardMaxElevation = global::BLE.Client.Droid.Resource.Styleable.CardView_cardMaxElevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_cardPreventCornerOverlap = global::BLE.Client.Droid.Resource.Styleable.CardView_cardPreventCornerOverlap; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_cardUseCompatPadding = global::BLE.Client.Droid.Resource.Styleable.CardView_cardUseCompatPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_contentPadding = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_contentPaddingBottom = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_contentPaddingLeft = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_contentPaddingRight = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CardView_contentPaddingTop = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip = global::BLE.Client.Droid.Resource.Styleable.Chip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_android_checkable = global::BLE.Client.Droid.Resource.Styleable.Chip_android_checkable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_android_ellipsize = global::BLE.Client.Droid.Resource.Styleable.Chip_android_ellipsize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.Chip_android_maxWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_android_text = global::BLE.Client.Droid.Resource.Styleable.Chip_android_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.Chip_android_textAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_checkedIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_checkedIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIconEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_checkedIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIconVisible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.Chip_chipBackgroundColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipCornerRadius = global::BLE.Client.Droid.Resource.Styleable.Chip_chipCornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_chipEndPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipIconSize = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipIconTint = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconVisible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipMinHeight = global::BLE.Client.Droid.Resource.Styleable.Chip_chipMinHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStartPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipStrokeColor = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStrokeColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_chipStrokeWidth = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStrokeWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_closeIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_closeIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_closeIconEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconEndPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_closeIconSize = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_closeIconStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconStartPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_closeIconTint = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_closeIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconVisible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_hideMotionSpec = global::BLE.Client.Droid.Resource.Styleable.Chip_hideMotionSpec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_iconEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_iconEndPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_iconStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_iconStartPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_rippleColor = global::BLE.Client.Droid.Resource.Styleable.Chip_rippleColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_showMotionSpec = global::BLE.Client.Droid.Resource.Styleable.Chip_showMotionSpec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_textEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_textEndPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Chip_textStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_textStartPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ChipGroup = global::BLE.Client.Droid.Resource.Styleable.ChipGroup; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ChipGroup_checkedChip = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_checkedChip; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ChipGroup_chipSpacing = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ChipGroup_chipSpacingHorizontal = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacingHorizontal; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ChipGroup_chipSpacingVertical = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacingVertical; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ChipGroup_singleLine = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_singleLine; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ChipGroup_singleSelection = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_singleSelection; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_contentScrim = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_contentScrim; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_title = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_titleEnabled = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_titleEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_toolbarId = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_toolbarId; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ColorStateListItem = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ColorStateListItem_alpha = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ColorStateListItem_android_alpha = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_android_alpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ColorStateListItem_android_color = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_android_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CompoundButton = global::BLE.Client.Droid.Resource.Styleable.CompoundButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CompoundButton_android_button = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_android_button; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CompoundButton_buttonTint = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_buttonTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CompoundButton_buttonTintMode = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_buttonTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_keylines = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_keylines; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DesignTheme = global::BLE.Client.Droid.Resource.Styleable.DesignTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DesignTheme_bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Styleable.DesignTheme_bottomSheetDialogTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DesignTheme_bottomSheetStyle = global::BLE.Client.Droid.Resource.Styleable.DesignTheme_bottomSheetStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle_arrowHeadLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_arrowHeadLength; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle_arrowShaftLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_arrowShaftLength; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle_barLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_barLength; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle_color = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle_drawableSize = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_drawableSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle_gapBetweenBars = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_gapBetweenBars; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle_spinBars = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_spinBars; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.DrawerArrowToggle_thickness = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_thickness; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_backgroundTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_backgroundTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_borderWidth = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_borderWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_elevation = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_fabCustomSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_fabCustomSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_fabSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_fabSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_hideMotionSpec = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_hideMotionSpec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_maxImageSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_maxImageSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_pressedTranslationZ = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_pressedTranslationZ; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_rippleColor = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_rippleColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_showMotionSpec = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_showMotionSpec; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_useCompatPadding = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_useCompatPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_Behavior_Layout = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FlowLayout = global::BLE.Client.Droid.Resource.Styleable.FlowLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FlowLayout_itemSpacing = global::BLE.Client.Droid.Resource.Styleable.FlowLayout_itemSpacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FlowLayout_lineSpacing = global::BLE.Client.Droid.Resource.Styleable.FlowLayout_lineSpacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamily = global::BLE.Client.Droid.Resource.Styleable.FontFamily; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamily_fontProviderAuthority = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderAuthority; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamily_fontProviderCerts = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderCerts; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamily_fontProviderPackage = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderPackage; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamily_fontProviderQuery = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderQuery; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_android_font = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_font; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_android_fontStyle = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_android_fontWeight = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_font = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_font; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_fontStyle = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_fontWeight = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontWeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.FontFamilyFont_ttcIndex = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_ttcIndex; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ForegroundLinearLayout = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ForegroundLinearLayout_android_foreground = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_android_foreground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_centerColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_centerX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerX; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_centerY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerY; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_endColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_endX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endX; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_endY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endY; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_gradientRadius = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_gradientRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_startColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_startX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startX; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_startY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startY; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_tileMode = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_tileMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColor_android_type = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_type; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColorItem = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColorItem_android_color = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem_android_color; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.GradientColorItem_android_offset = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem_android_offset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_android_baselineAligned = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAligned; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_android_gravity = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_gravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_android_orientation = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_orientation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_android_weightSum = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_weightSum; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_divider = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_divider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_dividerPadding = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_dividerPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_showDividers = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_showDividers; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_Layout = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ListPopupWindow = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton = global::BLE.Client.Droid.Resource.Styleable.MaterialButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_android_insetBottom = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_android_insetLeft = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_android_insetRight = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_android_insetTop = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_backgroundTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_backgroundTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_cornerRadius = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_cornerRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_icon = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_iconGravity = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_iconPadding = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_iconSize = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_iconTint = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_iconTintMode = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_rippleColor = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_rippleColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_strokeColor = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_strokeColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialButton_strokeWidth = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_strokeWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialCardView = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialCardView_strokeColor = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView_strokeColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialCardView_strokeWidth = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView_strokeWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_chipStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_colorAccent = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorAccent; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_colorPrimary = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimary; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_colorSecondary = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorSecondary; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_editTextStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_editTextStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_scrimBackground = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_scrimBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_tabStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_tabStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MaterialComponentsTheme_textInputStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textInputStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuGroup = global::BLE.Client.Droid.Resource.Styleable.MenuGroup; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuGroup_android_checkableBehavior = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_checkableBehavior; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuGroup_android_enabled = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_enabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuGroup_android_id = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_id; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuGroup_android_menuCategory = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_menuCategory; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuGroup_android_orderInCategory = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_orderInCategory; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuGroup_android_visible = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_visible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem = global::BLE.Client.Droid.Resource.Styleable.MenuItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_actionLayout = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_actionProviderClass = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionProviderClass; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_actionViewClass = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionViewClass; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_alphabeticModifiers = global::BLE.Client.Droid.Resource.Styleable.MenuItem_alphabeticModifiers; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_alphabeticShortcut = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_alphabeticShortcut; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_checkable = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_checkable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_checked = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_checked; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_enabled = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_enabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_icon = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_id = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_id; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_menuCategory = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_menuCategory; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_numericShortcut = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_numericShortcut; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_onClick = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_onClick; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_orderInCategory = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_orderInCategory; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_title = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_titleCondensed = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_titleCondensed; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_android_visible = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_visible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_contentDescription = global::BLE.Client.Droid.Resource.Styleable.MenuItem_contentDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_iconTint = global::BLE.Client.Droid.Resource.Styleable.MenuItem_iconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_iconTintMode = global::BLE.Client.Droid.Resource.Styleable.MenuItem_iconTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_numericModifiers = global::BLE.Client.Droid.Resource.Styleable.MenuItem_numericModifiers; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_showAsAction = global::BLE.Client.Droid.Resource.Styleable.MenuItem_showAsAction; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuItem_tooltipText = global::BLE.Client.Droid.Resource.Styleable.MenuItem_tooltipText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView = global::BLE.Client.Droid.Resource.Styleable.MenuView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_android_headerBackground = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_headerBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_android_horizontalDivider = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_horizontalDivider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_android_itemBackground = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_android_itemIconDisabledAlpha = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemIconDisabledAlpha; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_android_itemTextAppearance = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_android_verticalDivider = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_verticalDivider; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_android_windowAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_windowAnimationStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_preserveIconSpacing = global::BLE.Client.Droid.Resource.Styleable.MenuView_preserveIconSpacing; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MenuView_subMenuArrow = global::BLE.Client.Droid.Resource.Styleable.MenuView_subMenuArrow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxBinding = global::BLE.Client.Droid.Resource.Styleable.MvxBinding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxBinding_MvxBind = global::BLE.Client.Droid.Resource.Styleable.MvxBinding_MvxBind; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxBinding_MvxLang = global::BLE.Client.Droid.Resource.Styleable.MvxBinding_MvxLang; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxControl = global::BLE.Client.Droid.Resource.Styleable.MvxControl; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxControl_MvxTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxControl_MvxTemplate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxExpandableListView = global::BLE.Client.Droid.Resource.Styleable.MvxExpandableListView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxExpandableListView_MvxGroupItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxExpandableListView_MvxGroupItemTemplate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxListView = global::BLE.Client.Droid.Resource.Styleable.MvxListView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxListView_MvxDropDownItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxListView_MvxDropDownItemTemplate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.MvxListView_MvxItemTemplate = global::BLE.Client.Droid.Resource.Styleable.MvxListView_MvxItemTemplate; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView = global::BLE.Client.Droid.Resource.Styleable.NavigationView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_android_background = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_android_fitsSystemWindows = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_fitsSystemWindows; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_maxWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_elevation = global::BLE.Client.Droid.Resource.Styleable.NavigationView_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_headerLayout = global::BLE.Client.Droid.Resource.Styleable.NavigationView_headerLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_itemBackground = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_itemHorizontalPadding = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemHorizontalPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_itemIconPadding = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemIconPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_itemIconTint = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_itemTextAppearance = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_itemTextColor = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.NavigationView_menu = global::BLE.Client.Droid.Resource.Styleable.NavigationView_menu; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.PopupWindow = global::BLE.Client.Droid.Resource.Styleable.PopupWindow; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.PopupWindow_android_popupAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_android_popupAnimationStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.PopupWindow_android_popupBackground = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_android_popupBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.PopupWindow_overlapAnchor = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_overlapAnchor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.PopupWindowBackgroundState = global::BLE.Client.Droid.Resource.Styleable.PopupWindowBackgroundState; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor = global::BLE.Client.Droid.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecycleListView = global::BLE.Client.Droid.Resource.Styleable.RecycleListView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecycleListView_paddingBottomNoButtons = global::BLE.Client.Droid.Resource.Styleable.RecycleListView_paddingBottomNoButtons; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecycleListView_paddingTopNoTitle = global::BLE.Client.Droid.Resource.Styleable.RecycleListView_paddingTopNoTitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView = global::BLE.Client.Droid.Resource.Styleable.RecyclerView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_android_descendantFocusability = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_android_descendantFocusability; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_android_orientation = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_android_orientation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_fastScrollEnabled = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_layoutManager = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_layoutManager; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_reverseLayout = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_reverseLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_spanCount = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_spanCount; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.RecyclerView_stackFromEnd = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_stackFromEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ScrimInsetsFrameLayout = global::BLE.Client.Droid.Resource.Styleable.ScrimInsetsFrameLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground = global::BLE.Client.Droid.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ScrollingViewBehavior_Layout = global::BLE.Client.Droid.Resource.Styleable.ScrollingViewBehavior_Layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop = global::BLE.Client.Droid.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView = global::BLE.Client.Droid.Resource.Styleable.SearchView; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_android_focusable = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_focusable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_android_imeOptions = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_imeOptions; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_android_inputType = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_inputType; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_maxWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_closeIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_closeIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_commitIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_commitIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_defaultQueryHint = global::BLE.Client.Droid.Resource.Styleable.SearchView_defaultQueryHint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_goIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_goIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_iconifiedByDefault = global::BLE.Client.Droid.Resource.Styleable.SearchView_iconifiedByDefault; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_layout = global::BLE.Client.Droid.Resource.Styleable.SearchView_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_queryBackground = global::BLE.Client.Droid.Resource.Styleable.SearchView_queryBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_queryHint = global::BLE.Client.Droid.Resource.Styleable.SearchView_queryHint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_searchHintIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_searchHintIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_searchIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_searchIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_submitBackground = global::BLE.Client.Droid.Resource.Styleable.SearchView_submitBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_suggestionRowLayout = global::BLE.Client.Droid.Resource.Styleable.SearchView_suggestionRowLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SearchView_voiceIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_voiceIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Snackbar = global::BLE.Client.Droid.Resource.Styleable.Snackbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Snackbar_snackbarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.Snackbar_snackbarButtonStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Snackbar_snackbarStyle = global::BLE.Client.Droid.Resource.Styleable.Snackbar_snackbarStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SnackbarLayout = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SnackbarLayout_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_android_maxWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SnackbarLayout_elevation = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_elevation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SnackbarLayout_maxActionInlineWidth = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_maxActionInlineWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Spinner = global::BLE.Client.Droid.Resource.Styleable.Spinner; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Spinner_android_dropDownWidth = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_dropDownWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Spinner_android_entries = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_entries; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Spinner_android_popupBackground = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_popupBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Spinner_android_prompt = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_prompt; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Spinner_popupTheme = global::BLE.Client.Droid.Resource.Styleable.Spinner_popupTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawable = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawable_android_constantSize = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_constantSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawable_android_dither = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_dither; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawable_android_enterFadeDuration = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_enterFadeDuration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawable_android_exitFadeDuration = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_exitFadeDuration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawable_android_variablePadding = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_variablePadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawable_android_visible = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_visible; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawableItem = global::BLE.Client.Droid.Resource.Styleable.StateListDrawableItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.StateListDrawableItem_android_drawable = global::BLE.Client.Droid.Resource.Styleable.StateListDrawableItem_android_drawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_android_textOff = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_textOff; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_android_textOn = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_textOn; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_android_thumb = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_thumb; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_showText = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_showText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_splitTrack = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_splitTrack; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_switchMinWidth = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchMinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_switchPadding = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_switchTextAppearance = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_thumbTextPadding = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTextPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_thumbTint = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_thumbTintMode = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_track = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_track; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_trackTint = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_trackTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.SwitchCompat_trackTintMode = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_trackTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabItem = global::BLE.Client.Droid.Resource.Styleable.TabItem; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabItem_android_icon = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_icon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabItem_android_layout = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_layout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabItem_android_text = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_text; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout = global::BLE.Client.Droid.Resource.Styleable.TabLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabBackground = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabBackground; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabContentStart = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabContentStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabGravity = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabIconTint = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIconTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabIconTintMode = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIconTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabIndicator = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicator; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabIndicatorColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabIndicatorFullWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorFullWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabIndicatorGravity = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabIndicatorHeight = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabInlineLabel = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabInlineLabel; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabMaxWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMaxWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabMinWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMinWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabMode = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabPadding = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPadding; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabPaddingBottom = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabPaddingEnd = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabPaddingStart = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabPaddingTop = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabRippleColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabRippleColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabSelectedTextColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabSelectedTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabTextColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TabLayout_tabUnboundedRipple = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabUnboundedRipple; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_fontFamily = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_fontFamily; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_shadowColor = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_shadowDx = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowDx; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_shadowDy = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowDy; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_shadowRadius = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowRadius; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_textColor = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_textColorHint = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColorHint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_textColorLink = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColorLink; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_textSize = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textSize; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_textStyle = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textStyle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_android_typeface = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_typeface; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_fontFamily = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_fontFamily; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextAppearance_textAllCaps = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_textAllCaps; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_android_hint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_android_hint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_android_textColorHint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_android_textColorHint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxBackgroundColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxBackgroundMode = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxBackgroundMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxStrokeColor = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxStrokeColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_boxStrokeWidth = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxStrokeWidth; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_counterEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_counterMaxLength = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterMaxLength; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_counterTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_errorEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_errorEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_errorTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_errorTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_helperText = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperText; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_helperTextEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperTextEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_helperTextTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperTextTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_hintAnimationEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintAnimationEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_hintEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_hintTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_passwordToggleContentDescription = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleContentDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_passwordToggleDrawable = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleDrawable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_passwordToggleEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleEnabled; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_passwordToggleTint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.TextInputLayout_passwordToggleTintMode = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ThemeEnforcement = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ThemeEnforcement_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_android_textAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ThemeEnforcement_enforceTextAppearance = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_enforceTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar = global::BLE.Client.Droid.Resource.Styleable.Toolbar; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_android_gravity = global::BLE.Client.Droid.Resource.Styleable.Toolbar_android_gravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_android_minHeight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_android_minHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_buttonGravity = global::BLE.Client.Droid.Resource.Styleable.Toolbar_buttonGravity; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_collapseContentDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_collapseContentDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_collapseIcon = global::BLE.Client.Droid.Resource.Styleable.Toolbar_collapseIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_contentInsetEnd = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetEndWithActions; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_contentInsetLeft = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetLeft; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_contentInsetRight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetRight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_contentInsetStart = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetStartWithNavigation; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_logo = global::BLE.Client.Droid.Resource.Styleable.Toolbar_logo; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_logoDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_logoDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_maxButtonHeight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_maxButtonHeight; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_navigationContentDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_navigationContentDescription; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_navigationIcon = global::BLE.Client.Droid.Resource.Styleable.Toolbar_navigationIcon; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_popupTheme = global::BLE.Client.Droid.Resource.Styleable.Toolbar_popupTheme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_subtitle = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitle; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_subtitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitleTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_subtitleTextColor = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitleTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_title = global::BLE.Client.Droid.Resource.Styleable.Toolbar_title; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_titleMargin = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMargin; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_titleMarginBottom = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginBottom; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_titleMarginEnd = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_titleMarginStart = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_titleMarginTop = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginTop; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_titleMargins = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMargins; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_titleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleTextAppearance; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.Toolbar_titleTextColor = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleTextColor; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.View = global::BLE.Client.Droid.Resource.Styleable.View; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.View_android_focusable = global::BLE.Client.Droid.Resource.Styleable.View_android_focusable; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.View_android_theme = global::BLE.Client.Droid.Resource.Styleable.View_android_theme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.View_paddingEnd = global::BLE.Client.Droid.Resource.Styleable.View_paddingEnd; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.View_paddingStart = global::BLE.Client.Droid.Resource.Styleable.View_paddingStart; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.View_theme = global::BLE.Client.Droid.Resource.Styleable.View_theme; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ViewBackgroundHelper = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ViewBackgroundHelper_android_background = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_android_background; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ViewBackgroundHelper_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTint; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ViewStubCompat = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ViewStubCompat_android_id = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_id; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ViewStubCompat_android_inflatedId = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_inflatedId; - global::MvvmCross.Droid.Support.V7.AppCompat.Resource.Styleable.ViewStubCompat_android_layout = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_layout; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_fade_in = global::BLE.Client.Droid.Resource.Animation.abc_fade_in; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_fade_out = global::BLE.Client.Droid.Resource.Animation.abc_fade_out; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_grow_fade_in_from_bottom = global::BLE.Client.Droid.Resource.Animation.abc_grow_fade_in_from_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_popup_enter = global::BLE.Client.Droid.Resource.Animation.abc_popup_enter; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_popup_exit = global::BLE.Client.Droid.Resource.Animation.abc_popup_exit; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_shrink_fade_out_from_bottom = global::BLE.Client.Droid.Resource.Animation.abc_shrink_fade_out_from_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_in_bottom = global::BLE.Client.Droid.Resource.Animation.abc_slide_in_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_in_top = global::BLE.Client.Droid.Resource.Animation.abc_slide_in_top; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_out_bottom = global::BLE.Client.Droid.Resource.Animation.abc_slide_out_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_out_top = global::BLE.Client.Droid.Resource.Animation.abc_slide_out_top; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_tooltip_enter = global::BLE.Client.Droid.Resource.Animation.abc_tooltip_enter; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_tooltip_exit = global::BLE.Client.Droid.Resource.Animation.abc_tooltip_exit; - global::Xamarin.Forms.Platform.Android.Resource.Animation.design_bottom_sheet_slide_in = global::BLE.Client.Droid.Resource.Animation.design_bottom_sheet_slide_in; - global::Xamarin.Forms.Platform.Android.Resource.Animation.design_bottom_sheet_slide_out = global::BLE.Client.Droid.Resource.Animation.design_bottom_sheet_slide_out; - global::Xamarin.Forms.Platform.Android.Resource.Animation.design_snackbar_in = global::BLE.Client.Droid.Resource.Animation.design_snackbar_in; - global::Xamarin.Forms.Platform.Android.Resource.Animation.design_snackbar_out = global::BLE.Client.Droid.Resource.Animation.design_snackbar_out; - global::Xamarin.Forms.Platform.Android.Resource.Animation.EnterFromLeft = global::BLE.Client.Droid.Resource.Animation.EnterFromLeft; - global::Xamarin.Forms.Platform.Android.Resource.Animation.EnterFromRight = global::BLE.Client.Droid.Resource.Animation.EnterFromRight; - global::Xamarin.Forms.Platform.Android.Resource.Animation.ExitToLeft = global::BLE.Client.Droid.Resource.Animation.ExitToLeft; - global::Xamarin.Forms.Platform.Android.Resource.Animation.ExitToRight = global::BLE.Client.Droid.Resource.Animation.ExitToRight; - global::Xamarin.Forms.Platform.Android.Resource.Animator.design_appbar_state_list_animator = global::BLE.Client.Droid.Resource.Animator.design_appbar_state_list_animator; - global::Xamarin.Forms.Platform.Android.Resource.Animator.design_fab_hide_motion_spec = global::BLE.Client.Droid.Resource.Animator.design_fab_hide_motion_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.design_fab_show_motion_spec = global::BLE.Client.Droid.Resource.Animator.design_fab_show_motion_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_btn_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_btn_state_list_anim; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_btn_unelevated_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_btn_unelevated_state_list_anim; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_chip_state_list_anim = global::BLE.Client.Droid.Resource.Animator.mtrl_chip_state_list_anim; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_hide_motion_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_hide_motion_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_show_motion_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_show_motion_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec = global::BLE.Client.Droid.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarDivider = global::BLE.Client.Droid.Resource.Attribute.actionBarDivider; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarItemBackground = global::BLE.Client.Droid.Resource.Attribute.actionBarItemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarPopupTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarPopupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSize = global::BLE.Client.Droid.Resource.Attribute.actionBarSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSplitStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarSplitStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabBarStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabTextStyle = global::BLE.Client.Droid.Resource.Attribute.actionBarTabTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarWidgetTheme = global::BLE.Client.Droid.Resource.Attribute.actionBarWidgetTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionDropDownStyle = global::BLE.Client.Droid.Resource.Attribute.actionDropDownStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionLayout = global::BLE.Client.Droid.Resource.Attribute.actionLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionMenuTextAppearance = global::BLE.Client.Droid.Resource.Attribute.actionMenuTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionMenuTextColor = global::BLE.Client.Droid.Resource.Attribute.actionMenuTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeBackground = global::BLE.Client.Droid.Resource.Attribute.actionModeBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCloseButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionModeCloseButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCloseDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCloseDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCopyDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCopyDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCutDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeCutDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeFindDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeFindDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModePasteDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModePasteDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModePopupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.actionModePopupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeSelectAllDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeSelectAllDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeShareDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeShareDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeSplitBackground = global::BLE.Client.Droid.Resource.Attribute.actionModeSplitBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeStyle = global::BLE.Client.Droid.Resource.Attribute.actionModeStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeWebSearchDrawable = global::BLE.Client.Droid.Resource.Attribute.actionModeWebSearchDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionOverflowButtonStyle = global::BLE.Client.Droid.Resource.Attribute.actionOverflowButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionOverflowMenuStyle = global::BLE.Client.Droid.Resource.Attribute.actionOverflowMenuStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionProviderClass = global::BLE.Client.Droid.Resource.Attribute.actionProviderClass; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionViewClass = global::BLE.Client.Droid.Resource.Attribute.actionViewClass; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.activityChooserViewStyle = global::BLE.Client.Droid.Resource.Attribute.activityChooserViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogButtonGroupStyle = global::BLE.Client.Droid.Resource.Attribute.alertDialogButtonGroupStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogCenterButtons = global::BLE.Client.Droid.Resource.Attribute.alertDialogCenterButtons; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogStyle = global::BLE.Client.Droid.Resource.Attribute.alertDialogStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogTheme = global::BLE.Client.Droid.Resource.Attribute.alertDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.allowStacking = global::BLE.Client.Droid.Resource.Attribute.allowStacking; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alpha = global::BLE.Client.Droid.Resource.Attribute.alpha; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alphabeticModifiers = global::BLE.Client.Droid.Resource.Attribute.alphabeticModifiers; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.arrowHeadLength = global::BLE.Client.Droid.Resource.Attribute.arrowHeadLength; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.arrowShaftLength = global::BLE.Client.Droid.Resource.Attribute.arrowShaftLength; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoCompleteTextViewStyle = global::BLE.Client.Droid.Resource.Attribute.autoCompleteTextViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeMaxTextSize = global::BLE.Client.Droid.Resource.Attribute.autoSizeMaxTextSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeMinTextSize = global::BLE.Client.Droid.Resource.Attribute.autoSizeMinTextSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizePresetSizes = global::BLE.Client.Droid.Resource.Attribute.autoSizePresetSizes; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeStepGranularity = global::BLE.Client.Droid.Resource.Attribute.autoSizeStepGranularity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeTextType = global::BLE.Client.Droid.Resource.Attribute.autoSizeTextType; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.background = global::BLE.Client.Droid.Resource.Attribute.background; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundSplit = global::BLE.Client.Droid.Resource.Attribute.backgroundSplit; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundStacked = global::BLE.Client.Droid.Resource.Attribute.backgroundStacked; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundTint = global::BLE.Client.Droid.Resource.Attribute.backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundTintMode = global::BLE.Client.Droid.Resource.Attribute.backgroundTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.barLength = global::BLE.Client.Droid.Resource.Attribute.barLength; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_autoHide = global::BLE.Client.Droid.Resource.Attribute.behavior_autoHide; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_fitToContents = global::BLE.Client.Droid.Resource.Attribute.behavior_fitToContents; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_hideable = global::BLE.Client.Droid.Resource.Attribute.behavior_hideable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_overlapTop = global::BLE.Client.Droid.Resource.Attribute.behavior_overlapTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_peekHeight = global::BLE.Client.Droid.Resource.Attribute.behavior_peekHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_skipCollapsed = global::BLE.Client.Droid.Resource.Attribute.behavior_skipCollapsed; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.borderWidth = global::BLE.Client.Droid.Resource.Attribute.borderWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.borderlessButtonStyle = global::BLE.Client.Droid.Resource.Attribute.borderlessButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomAppBarStyle = global::BLE.Client.Droid.Resource.Attribute.bottomAppBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomNavigationStyle = global::BLE.Client.Droid.Resource.Attribute.bottomNavigationStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Attribute.bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomSheetStyle = global::BLE.Client.Droid.Resource.Attribute.bottomSheetStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.boxBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxBackgroundMode = global::BLE.Client.Droid.Resource.Attribute.boxBackgroundMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCollapsedPaddingTop = global::BLE.Client.Droid.Resource.Attribute.boxCollapsedPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusBottomEnd = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusBottomEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusBottomStart = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusBottomStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusTopEnd = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusTopEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusTopStart = global::BLE.Client.Droid.Resource.Attribute.boxCornerRadiusTopStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxStrokeColor = global::BLE.Client.Droid.Resource.Attribute.boxStrokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxStrokeWidth = global::BLE.Client.Droid.Resource.Attribute.boxStrokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarNegativeButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarNegativeButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarNeutralButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarNeutralButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarPositiveButtonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarPositiveButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarStyle = global::BLE.Client.Droid.Resource.Attribute.buttonBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonGravity = global::BLE.Client.Droid.Resource.Attribute.buttonGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonIconDimen = global::BLE.Client.Droid.Resource.Attribute.buttonIconDimen; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonPanelSideLayout = global::BLE.Client.Droid.Resource.Attribute.buttonPanelSideLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonStyle = global::BLE.Client.Droid.Resource.Attribute.buttonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonStyleSmall = global::BLE.Client.Droid.Resource.Attribute.buttonStyleSmall; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonTint = global::BLE.Client.Droid.Resource.Attribute.buttonTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonTintMode = global::BLE.Client.Droid.Resource.Attribute.buttonTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.cardBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardCornerRadius = global::BLE.Client.Droid.Resource.Attribute.cardCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardElevation = global::BLE.Client.Droid.Resource.Attribute.cardElevation; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardMaxElevation = global::BLE.Client.Droid.Resource.Attribute.cardMaxElevation; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardPreventCornerOverlap = global::BLE.Client.Droid.Resource.Attribute.cardPreventCornerOverlap; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardUseCompatPadding = global::BLE.Client.Droid.Resource.Attribute.cardUseCompatPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardViewStyle = global::BLE.Client.Droid.Resource.Attribute.cardViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkboxStyle = global::BLE.Client.Droid.Resource.Attribute.checkboxStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedChip = global::BLE.Client.Droid.Resource.Attribute.checkedChip; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIcon = global::BLE.Client.Droid.Resource.Attribute.checkedIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIconEnabled = global::BLE.Client.Droid.Resource.Attribute.checkedIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIconVisible = global::BLE.Client.Droid.Resource.Attribute.checkedIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedTextViewStyle = global::BLE.Client.Droid.Resource.Attribute.checkedTextViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipBackgroundColor = global::BLE.Client.Droid.Resource.Attribute.chipBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipCornerRadius = global::BLE.Client.Droid.Resource.Attribute.chipCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipEndPadding = global::BLE.Client.Droid.Resource.Attribute.chipEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipGroupStyle = global::BLE.Client.Droid.Resource.Attribute.chipGroupStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIcon = global::BLE.Client.Droid.Resource.Attribute.chipIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconEnabled = global::BLE.Client.Droid.Resource.Attribute.chipIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconSize = global::BLE.Client.Droid.Resource.Attribute.chipIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconTint = global::BLE.Client.Droid.Resource.Attribute.chipIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconVisible = global::BLE.Client.Droid.Resource.Attribute.chipIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipMinHeight = global::BLE.Client.Droid.Resource.Attribute.chipMinHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacing = global::BLE.Client.Droid.Resource.Attribute.chipSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacingHorizontal = global::BLE.Client.Droid.Resource.Attribute.chipSpacingHorizontal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacingVertical = global::BLE.Client.Droid.Resource.Attribute.chipSpacingVertical; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStandaloneStyle = global::BLE.Client.Droid.Resource.Attribute.chipStandaloneStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStartPadding = global::BLE.Client.Droid.Resource.Attribute.chipStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStrokeColor = global::BLE.Client.Droid.Resource.Attribute.chipStrokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStrokeWidth = global::BLE.Client.Droid.Resource.Attribute.chipStrokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStyle = global::BLE.Client.Droid.Resource.Attribute.chipStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIcon = global::BLE.Client.Droid.Resource.Attribute.closeIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconEnabled = global::BLE.Client.Droid.Resource.Attribute.closeIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconEndPadding = global::BLE.Client.Droid.Resource.Attribute.closeIconEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconSize = global::BLE.Client.Droid.Resource.Attribute.closeIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconStartPadding = global::BLE.Client.Droid.Resource.Attribute.closeIconStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconTint = global::BLE.Client.Droid.Resource.Attribute.closeIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconVisible = global::BLE.Client.Droid.Resource.Attribute.closeIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeItemLayout = global::BLE.Client.Droid.Resource.Attribute.closeItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapseContentDescription = global::BLE.Client.Droid.Resource.Attribute.collapseContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapseIcon = global::BLE.Client.Droid.Resource.Attribute.collapseIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapsedTitleGravity = global::BLE.Client.Droid.Resource.Attribute.collapsedTitleGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapsedTitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.collapsedTitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.color = global::BLE.Client.Droid.Resource.Attribute.color; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorAccent = global::BLE.Client.Droid.Resource.Attribute.colorAccent; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorBackgroundFloating = global::BLE.Client.Droid.Resource.Attribute.colorBackgroundFloating; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorButtonNormal = global::BLE.Client.Droid.Resource.Attribute.colorButtonNormal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlActivated = global::BLE.Client.Droid.Resource.Attribute.colorControlActivated; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlHighlight = global::BLE.Client.Droid.Resource.Attribute.colorControlHighlight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlNormal = global::BLE.Client.Droid.Resource.Attribute.colorControlNormal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorError = global::BLE.Client.Droid.Resource.Attribute.colorError; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorPrimary = global::BLE.Client.Droid.Resource.Attribute.colorPrimary; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorPrimaryDark = global::BLE.Client.Droid.Resource.Attribute.colorPrimaryDark; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorSecondary = global::BLE.Client.Droid.Resource.Attribute.colorSecondary; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorSwitchThumbNormal = global::BLE.Client.Droid.Resource.Attribute.colorSwitchThumbNormal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.commitIcon = global::BLE.Client.Droid.Resource.Attribute.commitIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentDescription = global::BLE.Client.Droid.Resource.Attribute.contentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetEnd = global::BLE.Client.Droid.Resource.Attribute.contentInsetEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Attribute.contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetLeft = global::BLE.Client.Droid.Resource.Attribute.contentInsetLeft; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetRight = global::BLE.Client.Droid.Resource.Attribute.contentInsetRight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetStart = global::BLE.Client.Droid.Resource.Attribute.contentInsetStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Attribute.contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPadding = global::BLE.Client.Droid.Resource.Attribute.contentPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingBottom = global::BLE.Client.Droid.Resource.Attribute.contentPaddingBottom; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingLeft = global::BLE.Client.Droid.Resource.Attribute.contentPaddingLeft; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingRight = global::BLE.Client.Droid.Resource.Attribute.contentPaddingRight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingTop = global::BLE.Client.Droid.Resource.Attribute.contentPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentScrim = global::BLE.Client.Droid.Resource.Attribute.contentScrim; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.controlBackground = global::BLE.Client.Droid.Resource.Attribute.controlBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.coordinatorLayoutStyle = global::BLE.Client.Droid.Resource.Attribute.coordinatorLayoutStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cornerRadius = global::BLE.Client.Droid.Resource.Attribute.cornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterEnabled = global::BLE.Client.Droid.Resource.Attribute.counterEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterMaxLength = global::BLE.Client.Droid.Resource.Attribute.counterMaxLength; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterOverflowTextAppearance = global::BLE.Client.Droid.Resource.Attribute.counterOverflowTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterTextAppearance = global::BLE.Client.Droid.Resource.Attribute.counterTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.customNavigationLayout = global::BLE.Client.Droid.Resource.Attribute.customNavigationLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.defaultQueryHint = global::BLE.Client.Droid.Resource.Attribute.defaultQueryHint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogCornerRadius = global::BLE.Client.Droid.Resource.Attribute.dialogCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogPreferredPadding = global::BLE.Client.Droid.Resource.Attribute.dialogPreferredPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogTheme = global::BLE.Client.Droid.Resource.Attribute.dialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.displayOptions = global::BLE.Client.Droid.Resource.Attribute.displayOptions; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.divider = global::BLE.Client.Droid.Resource.Attribute.divider; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerHorizontal = global::BLE.Client.Droid.Resource.Attribute.dividerHorizontal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerPadding = global::BLE.Client.Droid.Resource.Attribute.dividerPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerVertical = global::BLE.Client.Droid.Resource.Attribute.dividerVertical; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.drawableSize = global::BLE.Client.Droid.Resource.Attribute.drawableSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.drawerArrowStyle = global::BLE.Client.Droid.Resource.Attribute.drawerArrowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dropDownListViewStyle = global::BLE.Client.Droid.Resource.Attribute.dropDownListViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dropdownListPreferredItemHeight = global::BLE.Client.Droid.Resource.Attribute.dropdownListPreferredItemHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextBackground = global::BLE.Client.Droid.Resource.Attribute.editTextBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextColor = global::BLE.Client.Droid.Resource.Attribute.editTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextStyle = global::BLE.Client.Droid.Resource.Attribute.editTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.elevation = global::BLE.Client.Droid.Resource.Attribute.elevation; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.enforceMaterialTheme = global::BLE.Client.Droid.Resource.Attribute.enforceMaterialTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.enforceTextAppearance = global::BLE.Client.Droid.Resource.Attribute.enforceTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.errorEnabled = global::BLE.Client.Droid.Resource.Attribute.errorEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.errorTextAppearance = global::BLE.Client.Droid.Resource.Attribute.errorTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandActivityOverflowButtonDrawable = global::BLE.Client.Droid.Resource.Attribute.expandActivityOverflowButtonDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expanded = global::BLE.Client.Droid.Resource.Attribute.expanded; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleGravity = global::BLE.Client.Droid.Resource.Attribute.expandedTitleGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMargin = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginBottom = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginBottom; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginEnd = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginStart = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginTop = global::BLE.Client.Droid.Resource.Attribute.expandedTitleMarginTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.expandedTitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabAlignmentMode = global::BLE.Client.Droid.Resource.Attribute.fabAlignmentMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleMargin = global::BLE.Client.Droid.Resource.Attribute.fabCradleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleRoundedCornerRadius = global::BLE.Client.Droid.Resource.Attribute.fabCradleRoundedCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleVerticalOffset = global::BLE.Client.Droid.Resource.Attribute.fabCradleVerticalOffset; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCustomSize = global::BLE.Client.Droid.Resource.Attribute.fabCustomSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabSize = global::BLE.Client.Droid.Resource.Attribute.fabSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollEnabled = global::BLE.Client.Droid.Resource.Attribute.fastScrollEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollHorizontalThumbDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollHorizontalThumbDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollHorizontalTrackDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollHorizontalTrackDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollVerticalThumbDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollVerticalThumbDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollVerticalTrackDrawable = global::BLE.Client.Droid.Resource.Attribute.fastScrollVerticalTrackDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.firstBaselineToTopHeight = global::BLE.Client.Droid.Resource.Attribute.firstBaselineToTopHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.floatingActionButtonStyle = global::BLE.Client.Droid.Resource.Attribute.floatingActionButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.font = global::BLE.Client.Droid.Resource.Attribute.font; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontFamily = global::BLE.Client.Droid.Resource.Attribute.fontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderAuthority = global::BLE.Client.Droid.Resource.Attribute.fontProviderAuthority; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderCerts = global::BLE.Client.Droid.Resource.Attribute.fontProviderCerts; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderFetchStrategy = global::BLE.Client.Droid.Resource.Attribute.fontProviderFetchStrategy; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderFetchTimeout = global::BLE.Client.Droid.Resource.Attribute.fontProviderFetchTimeout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderPackage = global::BLE.Client.Droid.Resource.Attribute.fontProviderPackage; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderQuery = global::BLE.Client.Droid.Resource.Attribute.fontProviderQuery; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontStyle = global::BLE.Client.Droid.Resource.Attribute.fontStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontVariationSettings = global::BLE.Client.Droid.Resource.Attribute.fontVariationSettings; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontWeight = global::BLE.Client.Droid.Resource.Attribute.fontWeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.foregroundInsidePadding = global::BLE.Client.Droid.Resource.Attribute.foregroundInsidePadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.gapBetweenBars = global::BLE.Client.Droid.Resource.Attribute.gapBetweenBars; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.goIcon = global::BLE.Client.Droid.Resource.Attribute.goIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.headerLayout = global::BLE.Client.Droid.Resource.Attribute.headerLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.height = global::BLE.Client.Droid.Resource.Attribute.height; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperText = global::BLE.Client.Droid.Resource.Attribute.helperText; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperTextEnabled = global::BLE.Client.Droid.Resource.Attribute.helperTextEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperTextTextAppearance = global::BLE.Client.Droid.Resource.Attribute.helperTextTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideMotionSpec = global::BLE.Client.Droid.Resource.Attribute.hideMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideOnContentScroll = global::BLE.Client.Droid.Resource.Attribute.hideOnContentScroll; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideOnScroll = global::BLE.Client.Droid.Resource.Attribute.hideOnScroll; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintAnimationEnabled = global::BLE.Client.Droid.Resource.Attribute.hintAnimationEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintEnabled = global::BLE.Client.Droid.Resource.Attribute.hintEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintTextAppearance = global::BLE.Client.Droid.Resource.Attribute.hintTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.homeAsUpIndicator = global::BLE.Client.Droid.Resource.Attribute.homeAsUpIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.homeLayout = global::BLE.Client.Droid.Resource.Attribute.homeLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hoveredFocusedTranslationZ = global::BLE.Client.Droid.Resource.Attribute.hoveredFocusedTranslationZ; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.icon = global::BLE.Client.Droid.Resource.Attribute.icon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconEndPadding = global::BLE.Client.Droid.Resource.Attribute.iconEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconGravity = global::BLE.Client.Droid.Resource.Attribute.iconGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconPadding = global::BLE.Client.Droid.Resource.Attribute.iconPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconSize = global::BLE.Client.Droid.Resource.Attribute.iconSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconStartPadding = global::BLE.Client.Droid.Resource.Attribute.iconStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconTint = global::BLE.Client.Droid.Resource.Attribute.iconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconTintMode = global::BLE.Client.Droid.Resource.Attribute.iconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconifiedByDefault = global::BLE.Client.Droid.Resource.Attribute.iconifiedByDefault; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.imageButtonStyle = global::BLE.Client.Droid.Resource.Attribute.imageButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.indeterminateProgressStyle = global::BLE.Client.Droid.Resource.Attribute.indeterminateProgressStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.initialActivityCount = global::BLE.Client.Droid.Resource.Attribute.initialActivityCount; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.insetForeground = global::BLE.Client.Droid.Resource.Attribute.insetForeground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.isLightTheme = global::BLE.Client.Droid.Resource.Attribute.isLightTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemBackground = global::BLE.Client.Droid.Resource.Attribute.itemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemHorizontalPadding = global::BLE.Client.Droid.Resource.Attribute.itemHorizontalPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemHorizontalTranslationEnabled = global::BLE.Client.Droid.Resource.Attribute.itemHorizontalTranslationEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconPadding = global::BLE.Client.Droid.Resource.Attribute.itemIconPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconSize = global::BLE.Client.Droid.Resource.Attribute.itemIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconTint = global::BLE.Client.Droid.Resource.Attribute.itemIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemPadding = global::BLE.Client.Droid.Resource.Attribute.itemPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemSpacing = global::BLE.Client.Droid.Resource.Attribute.itemSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearance = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearanceActive = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearanceActive; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearanceInactive = global::BLE.Client.Droid.Resource.Attribute.itemTextAppearanceInactive; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextColor = global::BLE.Client.Droid.Resource.Attribute.itemTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.keylines = global::BLE.Client.Droid.Resource.Attribute.keylines; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.labelVisibilityMode = global::BLE.Client.Droid.Resource.Attribute.labelVisibilityMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.lastBaselineToBottomHeight = global::BLE.Client.Droid.Resource.Attribute.lastBaselineToBottomHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout = global::BLE.Client.Droid.Resource.Attribute.layout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layoutManager = global::BLE.Client.Droid.Resource.Attribute.layoutManager; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_anchor = global::BLE.Client.Droid.Resource.Attribute.layout_anchor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_anchorGravity = global::BLE.Client.Droid.Resource.Attribute.layout_anchorGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_behavior = global::BLE.Client.Droid.Resource.Attribute.layout_behavior; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_collapseMode = global::BLE.Client.Droid.Resource.Attribute.layout_collapseMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_collapseParallaxMultiplier = global::BLE.Client.Droid.Resource.Attribute.layout_collapseParallaxMultiplier; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_dodgeInsetEdges = global::BLE.Client.Droid.Resource.Attribute.layout_dodgeInsetEdges; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_insetEdge = global::BLE.Client.Droid.Resource.Attribute.layout_insetEdge; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_keyline = global::BLE.Client.Droid.Resource.Attribute.layout_keyline; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_scrollFlags = global::BLE.Client.Droid.Resource.Attribute.layout_scrollFlags; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_scrollInterpolator = global::BLE.Client.Droid.Resource.Attribute.layout_scrollInterpolator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.liftOnScroll = global::BLE.Client.Droid.Resource.Attribute.liftOnScroll; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.lineHeight = global::BLE.Client.Droid.Resource.Attribute.lineHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.lineSpacing = global::BLE.Client.Droid.Resource.Attribute.lineSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listChoiceBackgroundIndicator = global::BLE.Client.Droid.Resource.Attribute.listChoiceBackgroundIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listDividerAlertDialog = global::BLE.Client.Droid.Resource.Attribute.listDividerAlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listItemLayout = global::BLE.Client.Droid.Resource.Attribute.listItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listLayout = global::BLE.Client.Droid.Resource.Attribute.listLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listMenuViewStyle = global::BLE.Client.Droid.Resource.Attribute.listMenuViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPopupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.listPopupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeight = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeightLarge = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeightLarge; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeightSmall = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemHeightSmall; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemPaddingLeft = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemPaddingLeft; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemPaddingRight = global::BLE.Client.Droid.Resource.Attribute.listPreferredItemPaddingRight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.logo = global::BLE.Client.Droid.Resource.Attribute.logo; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.logoDescription = global::BLE.Client.Droid.Resource.Attribute.logoDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.materialButtonStyle = global::BLE.Client.Droid.Resource.Attribute.materialButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.materialCardViewStyle = global::BLE.Client.Droid.Resource.Attribute.materialCardViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxActionInlineWidth = global::BLE.Client.Droid.Resource.Attribute.maxActionInlineWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxButtonHeight = global::BLE.Client.Droid.Resource.Attribute.maxButtonHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxImageSize = global::BLE.Client.Droid.Resource.Attribute.maxImageSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.measureWithLargestChild = global::BLE.Client.Droid.Resource.Attribute.measureWithLargestChild; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.menu = global::BLE.Client.Droid.Resource.Attribute.menu; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.multiChoiceItemLayout = global::BLE.Client.Droid.Resource.Attribute.multiChoiceItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationContentDescription = global::BLE.Client.Droid.Resource.Attribute.navigationContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationIcon = global::BLE.Client.Droid.Resource.Attribute.navigationIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationMode = global::BLE.Client.Droid.Resource.Attribute.navigationMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationViewStyle = global::BLE.Client.Droid.Resource.Attribute.navigationViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.numericModifiers = global::BLE.Client.Droid.Resource.Attribute.numericModifiers; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.overlapAnchor = global::BLE.Client.Droid.Resource.Attribute.overlapAnchor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingBottomNoButtons = global::BLE.Client.Droid.Resource.Attribute.paddingBottomNoButtons; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingEnd = global::BLE.Client.Droid.Resource.Attribute.paddingEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingStart = global::BLE.Client.Droid.Resource.Attribute.paddingStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingTopNoTitle = global::BLE.Client.Droid.Resource.Attribute.paddingTopNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelBackground = global::BLE.Client.Droid.Resource.Attribute.panelBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelMenuListTheme = global::BLE.Client.Droid.Resource.Attribute.panelMenuListTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelMenuListWidth = global::BLE.Client.Droid.Resource.Attribute.panelMenuListWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleContentDescription = global::BLE.Client.Droid.Resource.Attribute.passwordToggleContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleDrawable = global::BLE.Client.Droid.Resource.Attribute.passwordToggleDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleEnabled = global::BLE.Client.Droid.Resource.Attribute.passwordToggleEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleTint = global::BLE.Client.Droid.Resource.Attribute.passwordToggleTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleTintMode = global::BLE.Client.Droid.Resource.Attribute.passwordToggleTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupMenuStyle = global::BLE.Client.Droid.Resource.Attribute.popupMenuStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupTheme = global::BLE.Client.Droid.Resource.Attribute.popupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupWindowStyle = global::BLE.Client.Droid.Resource.Attribute.popupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.preserveIconSpacing = global::BLE.Client.Droid.Resource.Attribute.preserveIconSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.pressedTranslationZ = global::BLE.Client.Droid.Resource.Attribute.pressedTranslationZ; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.progressBarPadding = global::BLE.Client.Droid.Resource.Attribute.progressBarPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.progressBarStyle = global::BLE.Client.Droid.Resource.Attribute.progressBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.queryBackground = global::BLE.Client.Droid.Resource.Attribute.queryBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.queryHint = global::BLE.Client.Droid.Resource.Attribute.queryHint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.radioButtonStyle = global::BLE.Client.Droid.Resource.Attribute.radioButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyle = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyleIndicator = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyleIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyleSmall = global::BLE.Client.Droid.Resource.Attribute.ratingBarStyleSmall; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.reverseLayout = global::BLE.Client.Droid.Resource.Attribute.reverseLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.rippleColor = global::BLE.Client.Droid.Resource.Attribute.rippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimAnimationDuration = global::BLE.Client.Droid.Resource.Attribute.scrimAnimationDuration; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimBackground = global::BLE.Client.Droid.Resource.Attribute.scrimBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimVisibleHeightTrigger = global::BLE.Client.Droid.Resource.Attribute.scrimVisibleHeightTrigger; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchHintIcon = global::BLE.Client.Droid.Resource.Attribute.searchHintIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchIcon = global::BLE.Client.Droid.Resource.Attribute.searchIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchViewStyle = global::BLE.Client.Droid.Resource.Attribute.searchViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.seekBarStyle = global::BLE.Client.Droid.Resource.Attribute.seekBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.selectableItemBackground = global::BLE.Client.Droid.Resource.Attribute.selectableItemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.selectableItemBackgroundBorderless = global::BLE.Client.Droid.Resource.Attribute.selectableItemBackgroundBorderless; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showAsAction = global::BLE.Client.Droid.Resource.Attribute.showAsAction; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showDividers = global::BLE.Client.Droid.Resource.Attribute.showDividers; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showMotionSpec = global::BLE.Client.Droid.Resource.Attribute.showMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showText = global::BLE.Client.Droid.Resource.Attribute.showText; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showTitle = global::BLE.Client.Droid.Resource.Attribute.showTitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleChoiceItemLayout = global::BLE.Client.Droid.Resource.Attribute.singleChoiceItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleLine = global::BLE.Client.Droid.Resource.Attribute.singleLine; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleSelection = global::BLE.Client.Droid.Resource.Attribute.singleSelection; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.snackbarButtonStyle = global::BLE.Client.Droid.Resource.Attribute.snackbarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.snackbarStyle = global::BLE.Client.Droid.Resource.Attribute.snackbarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.spanCount = global::BLE.Client.Droid.Resource.Attribute.spanCount; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinBars = global::BLE.Client.Droid.Resource.Attribute.spinBars; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinnerDropDownItemStyle = global::BLE.Client.Droid.Resource.Attribute.spinnerDropDownItemStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinnerStyle = global::BLE.Client.Droid.Resource.Attribute.spinnerStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.splitTrack = global::BLE.Client.Droid.Resource.Attribute.splitTrack; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.srcCompat = global::BLE.Client.Droid.Resource.Attribute.srcCompat; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.stackFromEnd = global::BLE.Client.Droid.Resource.Attribute.stackFromEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_above_anchor = global::BLE.Client.Droid.Resource.Attribute.state_above_anchor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_collapsed = global::BLE.Client.Droid.Resource.Attribute.state_collapsed; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_collapsible = global::BLE.Client.Droid.Resource.Attribute.state_collapsible; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_liftable = global::BLE.Client.Droid.Resource.Attribute.state_liftable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_lifted = global::BLE.Client.Droid.Resource.Attribute.state_lifted; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.statusBarBackground = global::BLE.Client.Droid.Resource.Attribute.statusBarBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.statusBarScrim = global::BLE.Client.Droid.Resource.Attribute.statusBarScrim; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.strokeColor = global::BLE.Client.Droid.Resource.Attribute.strokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.strokeWidth = global::BLE.Client.Droid.Resource.Attribute.strokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subMenuArrow = global::BLE.Client.Droid.Resource.Attribute.subMenuArrow; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.submitBackground = global::BLE.Client.Droid.Resource.Attribute.submitBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitle = global::BLE.Client.Droid.Resource.Attribute.subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.subtitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextColor = global::BLE.Client.Droid.Resource.Attribute.subtitleTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextStyle = global::BLE.Client.Droid.Resource.Attribute.subtitleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.suggestionRowLayout = global::BLE.Client.Droid.Resource.Attribute.suggestionRowLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchMinWidth = global::BLE.Client.Droid.Resource.Attribute.switchMinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchPadding = global::BLE.Client.Droid.Resource.Attribute.switchPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchStyle = global::BLE.Client.Droid.Resource.Attribute.switchStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchTextAppearance = global::BLE.Client.Droid.Resource.Attribute.switchTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabBackground = global::BLE.Client.Droid.Resource.Attribute.tabBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabContentStart = global::BLE.Client.Droid.Resource.Attribute.tabContentStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabGravity = global::BLE.Client.Droid.Resource.Attribute.tabGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIconTint = global::BLE.Client.Droid.Resource.Attribute.tabIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIconTintMode = global::BLE.Client.Droid.Resource.Attribute.tabIconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicator = global::BLE.Client.Droid.Resource.Attribute.tabIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorAnimationDuration = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorAnimationDuration; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorColor = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorFullWidth = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorFullWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorGravity = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorHeight = global::BLE.Client.Droid.Resource.Attribute.tabIndicatorHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabInlineLabel = global::BLE.Client.Droid.Resource.Attribute.tabInlineLabel; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMaxWidth = global::BLE.Client.Droid.Resource.Attribute.tabMaxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMinWidth = global::BLE.Client.Droid.Resource.Attribute.tabMinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMode = global::BLE.Client.Droid.Resource.Attribute.tabMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPadding = global::BLE.Client.Droid.Resource.Attribute.tabPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingBottom = global::BLE.Client.Droid.Resource.Attribute.tabPaddingBottom; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingEnd = global::BLE.Client.Droid.Resource.Attribute.tabPaddingEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingStart = global::BLE.Client.Droid.Resource.Attribute.tabPaddingStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingTop = global::BLE.Client.Droid.Resource.Attribute.tabPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabRippleColor = global::BLE.Client.Droid.Resource.Attribute.tabRippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabSelectedTextColor = global::BLE.Client.Droid.Resource.Attribute.tabSelectedTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabStyle = global::BLE.Client.Droid.Resource.Attribute.tabStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabTextAppearance = global::BLE.Client.Droid.Resource.Attribute.tabTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabTextColor = global::BLE.Client.Droid.Resource.Attribute.tabTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabUnboundedRipple = global::BLE.Client.Droid.Resource.Attribute.tabUnboundedRipple; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAllCaps = global::BLE.Client.Droid.Resource.Attribute.textAllCaps; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceBody1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceBody1; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceBody2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceBody2; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceButton = global::BLE.Client.Droid.Resource.Attribute.textAppearanceButton; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceCaption = global::BLE.Client.Droid.Resource.Attribute.textAppearanceCaption; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline1; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline2; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline3 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline3; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline4 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline4; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline5 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline5; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline6 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceHeadline6; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceLargePopupMenu = global::BLE.Client.Droid.Resource.Attribute.textAppearanceLargePopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItem = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItem; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItemSecondary = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItemSecondary; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItemSmall = global::BLE.Client.Droid.Resource.Attribute.textAppearanceListItemSmall; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceOverline = global::BLE.Client.Droid.Resource.Attribute.textAppearanceOverline; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearancePopupMenuHeader = global::BLE.Client.Droid.Resource.Attribute.textAppearancePopupMenuHeader; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSearchResultSubtitle = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSearchResultSubtitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSearchResultTitle = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSearchResultTitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSmallPopupMenu = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSmallPopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSubtitle1 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSubtitle1; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSubtitle2 = global::BLE.Client.Droid.Resource.Attribute.textAppearanceSubtitle2; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textColorAlertDialogListItem = global::BLE.Client.Droid.Resource.Attribute.textColorAlertDialogListItem; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textColorSearchUrl = global::BLE.Client.Droid.Resource.Attribute.textColorSearchUrl; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textEndPadding = global::BLE.Client.Droid.Resource.Attribute.textEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textInputStyle = global::BLE.Client.Droid.Resource.Attribute.textInputStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textStartPadding = global::BLE.Client.Droid.Resource.Attribute.textStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.theme = global::BLE.Client.Droid.Resource.Attribute.theme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.thickness = global::BLE.Client.Droid.Resource.Attribute.thickness; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTextPadding = global::BLE.Client.Droid.Resource.Attribute.thumbTextPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTint = global::BLE.Client.Droid.Resource.Attribute.thumbTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTintMode = global::BLE.Client.Droid.Resource.Attribute.thumbTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMark = global::BLE.Client.Droid.Resource.Attribute.tickMark; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMarkTint = global::BLE.Client.Droid.Resource.Attribute.tickMarkTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMarkTintMode = global::BLE.Client.Droid.Resource.Attribute.tickMarkTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tint = global::BLE.Client.Droid.Resource.Attribute.tint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tintMode = global::BLE.Client.Droid.Resource.Attribute.tintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.title = global::BLE.Client.Droid.Resource.Attribute.title; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleEnabled = global::BLE.Client.Droid.Resource.Attribute.titleEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMargin = global::BLE.Client.Droid.Resource.Attribute.titleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginBottom = global::BLE.Client.Droid.Resource.Attribute.titleMarginBottom; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginEnd = global::BLE.Client.Droid.Resource.Attribute.titleMarginEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginStart = global::BLE.Client.Droid.Resource.Attribute.titleMarginStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginTop = global::BLE.Client.Droid.Resource.Attribute.titleMarginTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMargins = global::BLE.Client.Droid.Resource.Attribute.titleMargins; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextAppearance = global::BLE.Client.Droid.Resource.Attribute.titleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextColor = global::BLE.Client.Droid.Resource.Attribute.titleTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextStyle = global::BLE.Client.Droid.Resource.Attribute.titleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarId = global::BLE.Client.Droid.Resource.Attribute.toolbarId; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarNavigationButtonStyle = global::BLE.Client.Droid.Resource.Attribute.toolbarNavigationButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarStyle = global::BLE.Client.Droid.Resource.Attribute.toolbarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipForegroundColor = global::BLE.Client.Droid.Resource.Attribute.tooltipForegroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipFrameBackground = global::BLE.Client.Droid.Resource.Attribute.tooltipFrameBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipText = global::BLE.Client.Droid.Resource.Attribute.tooltipText; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.track = global::BLE.Client.Droid.Resource.Attribute.track; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.trackTint = global::BLE.Client.Droid.Resource.Attribute.trackTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.trackTintMode = global::BLE.Client.Droid.Resource.Attribute.trackTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.ttcIndex = global::BLE.Client.Droid.Resource.Attribute.ttcIndex; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.useCompatPadding = global::BLE.Client.Droid.Resource.Attribute.useCompatPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.viewInflaterClass = global::BLE.Client.Droid.Resource.Attribute.viewInflaterClass; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.voiceIcon = global::BLE.Client.Droid.Resource.Attribute.voiceIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionBar = global::BLE.Client.Droid.Resource.Attribute.windowActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionBarOverlay = global::BLE.Client.Droid.Resource.Attribute.windowActionBarOverlay; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionModeOverlay = global::BLE.Client.Droid.Resource.Attribute.windowActionModeOverlay; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedHeightMajor = global::BLE.Client.Droid.Resource.Attribute.windowFixedHeightMajor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedHeightMinor = global::BLE.Client.Droid.Resource.Attribute.windowFixedHeightMinor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedWidthMajor = global::BLE.Client.Droid.Resource.Attribute.windowFixedWidthMajor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedWidthMinor = global::BLE.Client.Droid.Resource.Attribute.windowFixedWidthMinor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowMinWidthMajor = global::BLE.Client.Droid.Resource.Attribute.windowMinWidthMajor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowMinWidthMinor = global::BLE.Client.Droid.Resource.Attribute.windowMinWidthMinor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowNoTitle = global::BLE.Client.Droid.Resource.Attribute.windowNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_action_bar_embed_tabs = global::BLE.Client.Droid.Resource.Boolean.abc_action_bar_embed_tabs; - global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_allow_stacked_button_bar = global::BLE.Client.Droid.Resource.Boolean.abc_allow_stacked_button_bar; - global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_config_actionMenuItemAllCaps = global::BLE.Client.Droid.Resource.Boolean.abc_config_actionMenuItemAllCaps; - global::Xamarin.Forms.Platform.Android.Resource.Boolean.mtrl_btn_textappearance_all_caps = global::BLE.Client.Droid.Resource.Boolean.mtrl_btn_textappearance_all_caps; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_background_cache_hint_selector_material_dark = global::BLE.Client.Droid.Resource.Color.abc_background_cache_hint_selector_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_background_cache_hint_selector_material_light = global::BLE.Client.Droid.Resource.Color.abc_background_cache_hint_selector_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_btn_colored_borderless_text_material = global::BLE.Client.Droid.Resource.Color.abc_btn_colored_borderless_text_material; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_btn_colored_text_material = global::BLE.Client.Droid.Resource.Color.abc_btn_colored_text_material; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_color_highlight_material = global::BLE.Client.Droid.Resource.Color.abc_color_highlight_material; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_hint_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.abc_hint_foreground_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_hint_foreground_material_light = global::BLE.Client.Droid.Resource.Color.abc_hint_foreground_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_input_method_navigation_guard = global::BLE.Client.Droid.Resource.Color.abc_input_method_navigation_guard; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_disable_only_material_dark = global::BLE.Client.Droid.Resource.Color.abc_primary_text_disable_only_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_disable_only_material_light = global::BLE.Client.Droid.Resource.Color.abc_primary_text_disable_only_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_material_dark = global::BLE.Client.Droid.Resource.Color.abc_primary_text_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_material_light = global::BLE.Client.Droid.Resource.Color.abc_primary_text_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text = global::BLE.Client.Droid.Resource.Color.abc_search_url_text; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_normal = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_normal; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_pressed = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_selected = global::BLE.Client.Droid.Resource.Color.abc_search_url_text_selected; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_secondary_text_material_dark = global::BLE.Client.Droid.Resource.Color.abc_secondary_text_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_secondary_text_material_light = global::BLE.Client.Droid.Resource.Color.abc_secondary_text_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_btn_checkable = global::BLE.Client.Droid.Resource.Color.abc_tint_btn_checkable; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_default = global::BLE.Client.Droid.Resource.Color.abc_tint_default; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_edittext = global::BLE.Client.Droid.Resource.Color.abc_tint_edittext; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_seek_thumb = global::BLE.Client.Droid.Resource.Color.abc_tint_seek_thumb; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_spinner = global::BLE.Client.Droid.Resource.Color.abc_tint_spinner; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_switch_track = global::BLE.Client.Droid.Resource.Color.abc_tint_switch_track; - global::Xamarin.Forms.Platform.Android.Resource.Color.accent_material_dark = global::BLE.Client.Droid.Resource.Color.accent_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.accent_material_light = global::BLE.Client.Droid.Resource.Color.accent_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.background_floating_material_dark = global::BLE.Client.Droid.Resource.Color.background_floating_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.background_floating_material_light = global::BLE.Client.Droid.Resource.Color.background_floating_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.background_material_dark = global::BLE.Client.Droid.Resource.Color.background_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.background_material_light = global::BLE.Client.Droid.Resource.Color.background_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_disabled_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_inverse_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_inverse_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_inverse_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_inverse_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.bright_foreground_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_material_light = global::BLE.Client.Droid.Resource.Color.bright_foreground_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.button_material_dark = global::BLE.Client.Droid.Resource.Color.button_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.button_material_light = global::BLE.Client.Droid.Resource.Color.button_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_dark_background = global::BLE.Client.Droid.Resource.Color.cardview_dark_background; - global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_light_background = global::BLE.Client.Droid.Resource.Color.cardview_light_background; - global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_shadow_end_color = global::BLE.Client.Droid.Resource.Color.cardview_shadow_end_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_shadow_start_color = global::BLE.Client.Droid.Resource.Color.cardview_shadow_start_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_bottom_navigation_shadow_color = global::BLE.Client.Droid.Resource.Color.design_bottom_navigation_shadow_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_default_color_primary = global::BLE.Client.Droid.Resource.Color.design_default_color_primary; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_default_color_primary_dark = global::BLE.Client.Droid.Resource.Color.design_default_color_primary_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_error = global::BLE.Client.Droid.Resource.Color.design_error; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_end_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_end_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_mid_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_mid_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_start_color = global::BLE.Client.Droid.Resource.Color.design_fab_shadow_start_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_end_inner_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_end_inner_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_end_outer_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_end_outer_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_top_inner_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_top_inner_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_top_outer_color = global::BLE.Client.Droid.Resource.Color.design_fab_stroke_top_outer_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_snackbar_background_color = global::BLE.Client.Droid.Resource.Color.design_snackbar_background_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_tint_password_toggle = global::BLE.Client.Droid.Resource.Color.design_tint_password_toggle; - global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.dim_foreground_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_disabled_material_light = global::BLE.Client.Droid.Resource.Color.dim_foreground_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_material_dark = global::BLE.Client.Droid.Resource.Color.dim_foreground_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_material_light = global::BLE.Client.Droid.Resource.Color.dim_foreground_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.error_color_material_dark = global::BLE.Client.Droid.Resource.Color.error_color_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.error_color_material_light = global::BLE.Client.Droid.Resource.Color.error_color_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.foreground_material_dark = global::BLE.Client.Droid.Resource.Color.foreground_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.foreground_material_light = global::BLE.Client.Droid.Resource.Color.foreground_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.highlighted_text_material_dark = global::BLE.Client.Droid.Resource.Color.highlighted_text_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.highlighted_text_material_light = global::BLE.Client.Droid.Resource.Color.highlighted_text_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_800 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_800; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_900 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_900; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_950 = global::BLE.Client.Droid.Resource.Color.material_blue_grey_950; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_deep_teal_200 = global::BLE.Client.Droid.Resource.Color.material_deep_teal_200; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_deep_teal_500 = global::BLE.Client.Droid.Resource.Color.material_deep_teal_500; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_100 = global::BLE.Client.Droid.Resource.Color.material_grey_100; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_300 = global::BLE.Client.Droid.Resource.Color.material_grey_300; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_50 = global::BLE.Client.Droid.Resource.Color.material_grey_50; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_600 = global::BLE.Client.Droid.Resource.Color.material_grey_600; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_800 = global::BLE.Client.Droid.Resource.Color.material_grey_800; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_850 = global::BLE.Client.Droid.Resource.Color.material_grey_850; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_900 = global::BLE.Client.Droid.Resource.Color.material_grey_900; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_bottom_nav_colored_item_tint = global::BLE.Client.Droid.Resource.Color.mtrl_bottom_nav_colored_item_tint; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_bottom_nav_item_tint = global::BLE.Client.Droid.Resource.Color.mtrl_bottom_nav_item_tint; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_bg_color_disabled = global::BLE.Client.Droid.Resource.Color.mtrl_btn_bg_color_disabled; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_bg_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_bg_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_stroke_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_stroke_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_btn_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_btn_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_color_disabled = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_color_disabled; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_btn_text_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_transparent_bg_color = global::BLE.Client.Droid.Resource.Color.mtrl_btn_transparent_bg_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_background_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_background_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_close_icon_tint = global::BLE.Client.Droid.Resource.Color.mtrl_chip_close_icon_tint; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_text_color = global::BLE.Client.Droid.Resource.Color.mtrl_chip_text_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_fab_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_fab_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_scrim_color = global::BLE.Client.Droid.Resource.Color.mtrl_scrim_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_colored_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_colored_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_icon_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_icon_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_icon_color_selector_colored = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_icon_color_selector_colored; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_legacy_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_legacy_text_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_ripple_color = global::BLE.Client.Droid.Resource.Color.mtrl_tabs_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_text_btn_text_color_selector = global::BLE.Client.Droid.Resource.Color.mtrl_text_btn_text_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_default_box_stroke_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_default_box_stroke_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_disabled_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_disabled_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_filled_box_default_background_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_filled_box_default_background_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_hovered_box_stroke_color = global::BLE.Client.Droid.Resource.Color.mtrl_textinput_hovered_box_stroke_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.notification_action_color_filter = global::BLE.Client.Droid.Resource.Color.notification_action_color_filter; - global::Xamarin.Forms.Platform.Android.Resource.Color.notification_icon_bg_color = global::BLE.Client.Droid.Resource.Color.notification_icon_bg_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.notification_material_background_media_default_color = global::BLE.Client.Droid.Resource.Color.notification_material_background_media_default_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_dark_material_dark = global::BLE.Client.Droid.Resource.Color.primary_dark_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_dark_material_light = global::BLE.Client.Droid.Resource.Color.primary_dark_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_material_dark = global::BLE.Client.Droid.Resource.Color.primary_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_material_light = global::BLE.Client.Droid.Resource.Color.primary_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_default_material_dark = global::BLE.Client.Droid.Resource.Color.primary_text_default_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_default_material_light = global::BLE.Client.Droid.Resource.Color.primary_text_default_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.primary_text_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_disabled_material_light = global::BLE.Client.Droid.Resource.Color.primary_text_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.ripple_material_dark = global::BLE.Client.Droid.Resource.Color.ripple_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.ripple_material_light = global::BLE.Client.Droid.Resource.Color.ripple_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_default_material_dark = global::BLE.Client.Droid.Resource.Color.secondary_text_default_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_default_material_light = global::BLE.Client.Droid.Resource.Color.secondary_text_default_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.secondary_text_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_disabled_material_light = global::BLE.Client.Droid.Resource.Color.secondary_text_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_disabled_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_disabled_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_normal_material_dark = global::BLE.Client.Droid.Resource.Color.switch_thumb_normal_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_normal_material_light = global::BLE.Client.Droid.Resource.Color.switch_thumb_normal_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.tooltip_background_dark = global::BLE.Client.Droid.Resource.Color.tooltip_background_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.tooltip_background_light = global::BLE.Client.Droid.Resource.Color.tooltip_background_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_content_inset_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_content_inset_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_content_inset_with_nav = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_content_inset_with_nav; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_padding_end_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_padding_end_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_default_padding_start_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_elevation_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_elevation_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_icon_vertical_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_icon_vertical_padding_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_overflow_padding_end_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_overflow_padding_end_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_overflow_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_overflow_padding_start_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_stacked_max_height = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_stacked_max_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_stacked_tab_max_width = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_stacked_tab_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_subtitle_top_margin_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_bar_subtitle_top_margin_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_width_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_width_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_width_overflow_material = global::BLE.Client.Droid.Resource.Dimension.abc_action_button_min_width_overflow_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_alert_dialog_button_bar_height = global::BLE.Client.Droid.Resource.Dimension.abc_alert_dialog_button_bar_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_alert_dialog_button_dimen = global::BLE.Client.Droid.Resource.Dimension.abc_alert_dialog_button_dimen; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_inset_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_inset_vertical_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_inset_vertical_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_padding_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_padding_vertical_material = global::BLE.Client.Droid.Resource.Dimension.abc_button_padding_vertical_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_cascading_menus_min_smallest_width = global::BLE.Client.Droid.Resource.Dimension.abc_cascading_menus_min_smallest_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_config_prefDialogWidth = global::BLE.Client.Droid.Resource.Dimension.abc_config_prefDialogWidth; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_corner_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_corner_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_inset_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_inset_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_control_padding_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_corner_radius_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_corner_radius_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_height_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_height_major; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_height_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_height_minor; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_width_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_width_major; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_width_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_fixed_width_minor; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_list_padding_top_no_title = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_list_padding_top_no_title; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_min_width_major = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_min_width_major; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_min_width_minor = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_min_width_minor; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_padding_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_padding_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_padding_top_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_padding_top_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_title_divider_material = global::BLE.Client.Droid.Resource.Dimension.abc_dialog_title_divider_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_disabled_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.abc_disabled_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_disabled_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.abc_disabled_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_icon_width = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_icon_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_text_padding_left = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_text_padding_left; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_text_padding_right = global::BLE.Client.Droid.Resource.Dimension.abc_dropdownitem_text_padding_right; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_bottom_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_bottom_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_top_material = global::BLE.Client.Droid.Resource.Dimension.abc_edit_text_inset_top_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_floating_window_z = global::BLE.Client.Droid.Resource.Dimension.abc_floating_window_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_list_item_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.abc_list_item_padding_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_panel_menu_list_width = global::BLE.Client.Droid.Resource.Dimension.abc_panel_menu_list_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_progress_bar_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_progress_bar_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_search_view_preferred_height = global::BLE.Client.Droid.Resource.Dimension.abc_search_view_preferred_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_search_view_preferred_width = global::BLE.Client.Droid.Resource.Dimension.abc_search_view_preferred_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_seekbar_track_background_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_seekbar_track_background_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_seekbar_track_progress_height_material = global::BLE.Client.Droid.Resource.Dimension.abc_seekbar_track_progress_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_select_dialog_padding_start_material = global::BLE.Client.Droid.Resource.Dimension.abc_select_dialog_padding_start_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_switch_padding = global::BLE.Client.Droid.Resource.Dimension.abc_switch_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_body_1_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_body_1_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_body_2_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_body_2_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_button_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_button_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_caption_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_caption_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_1_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_1_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_2_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_2_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_3_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_3_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_4_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_display_4_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_headline_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_headline_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_large_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_large_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_medium_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_medium_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_menu_header_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_menu_header_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_menu_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_menu_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_small_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_small_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_subhead_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_subhead_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_subtitle_material_toolbar = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_subtitle_material_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_title_material = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_title_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_title_material_toolbar = global::BLE.Client.Droid.Resource.Dimension.abc_text_size_title_material_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_compat_inset_shadow = global::BLE.Client.Droid.Resource.Dimension.cardview_compat_inset_shadow; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_default_elevation = global::BLE.Client.Droid.Resource.Dimension.cardview_default_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_default_radius = global::BLE.Client.Droid.Resource.Dimension.cardview_default_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_inset_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_inset_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_inset_vertical_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_inset_vertical_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_padding_horizontal_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_padding_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_padding_vertical_material = global::BLE.Client.Droid.Resource.Dimension.compat_button_padding_vertical_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_control_corner_material = global::BLE.Client.Droid.Resource.Dimension.compat_control_corner_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_notification_large_icon_max_height = global::BLE.Client.Droid.Resource.Dimension.compat_notification_large_icon_max_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_notification_large_icon_max_width = global::BLE.Client.Droid.Resource.Dimension.compat_notification_large_icon_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_appbar_elevation = global::BLE.Client.Droid.Resource.Dimension.design_appbar_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_item_max_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_item_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_item_min_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_item_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_text_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_active_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_height = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_icon_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_icon_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_item_max_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_item_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_item_min_width = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_item_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_margin = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_shadow_height = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_shadow_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_text_size = global::BLE.Client.Droid.Resource.Dimension.design_bottom_navigation_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_sheet_modal_elevation = global::BLE.Client.Droid.Resource.Dimension.design_bottom_sheet_modal_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_sheet_peek_height_min = global::BLE.Client.Droid.Resource.Dimension.design_bottom_sheet_peek_height_min; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_border_width = global::BLE.Client.Droid.Resource.Dimension.design_fab_border_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_elevation = global::BLE.Client.Droid.Resource.Dimension.design_fab_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_image_size = global::BLE.Client.Droid.Resource.Dimension.design_fab_image_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_size_mini = global::BLE.Client.Droid.Resource.Dimension.design_fab_size_mini; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_size_normal = global::BLE.Client.Droid.Resource.Dimension.design_fab_size_normal; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_translation_z_hovered_focused = global::BLE.Client.Droid.Resource.Dimension.design_fab_translation_z_hovered_focused; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_translation_z_pressed = global::BLE.Client.Droid.Resource.Dimension.design_fab_translation_z_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.design_navigation_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_icon_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_icon_size = global::BLE.Client.Droid.Resource.Dimension.design_navigation_icon_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_item_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_item_horizontal_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_item_icon_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_item_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_max_width = global::BLE.Client.Droid.Resource.Dimension.design_navigation_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_padding_bottom = global::BLE.Client.Droid.Resource.Dimension.design_navigation_padding_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_separator_vertical_padding = global::BLE.Client.Droid.Resource.Dimension.design_navigation_separator_vertical_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_action_inline_max_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_action_inline_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_background_corner_radius = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_background_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_elevation = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_extra_spacing_horizontal = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_extra_spacing_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_max_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_min_width = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_horizontal = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_vertical = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_vertical; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_vertical_2lines = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_padding_vertical_2lines; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_text_size = global::BLE.Client.Droid.Resource.Dimension.design_snackbar_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_max_width = global::BLE.Client.Droid.Resource.Dimension.design_tab_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_scrollable_min_width = global::BLE.Client.Droid.Resource.Dimension.design_tab_scrollable_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_text_size = global::BLE.Client.Droid.Resource.Dimension.design_tab_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_text_size_2line = global::BLE.Client.Droid.Resource.Dimension.design_tab_text_size_2line; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_textinput_caption_translate_y = global::BLE.Client.Droid.Resource.Dimension.design_textinput_caption_translate_y; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.disabled_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.disabled_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.disabled_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.disabled_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_default_thickness = global::BLE.Client.Droid.Resource.Dimension.fastscroll_default_thickness; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_margin = global::BLE.Client.Droid.Resource.Dimension.fastscroll_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_minimum_range = global::BLE.Client.Droid.Resource.Dimension.fastscroll_minimum_range; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_colored = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_colored; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.highlight_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.hint_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.hint_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_pressed_alpha_material_dark = global::BLE.Client.Droid.Resource.Dimension.hint_pressed_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_pressed_alpha_material_light = global::BLE.Client.Droid.Resource.Dimension.hint_pressed_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_swipe_escape_velocity = global::BLE.Client.Droid.Resource.Dimension.item_touch_helper_swipe_escape_velocity; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_height = global::BLE.Client.Droid.Resource.Dimension.mtrl_bottomappbar_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_dialog_btn_min_width = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_dialog_btn_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_disabled_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_disabled_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_disabled_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_disabled_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_focused_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_focused_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_hovered_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_hovered_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_icon_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_icon_btn_padding_left; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_inset = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_inset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_letter_spacing = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_letter_spacing; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_bottom = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_left; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_right = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_right; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_top = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_padding_top; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_pressed_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_pressed_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_stroke_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_stroke_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_padding_left = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_left; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_padding_right = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_right; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_btn_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_card_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_card_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_card_spacing = global::BLE.Client.Droid.Resource.Dimension.mtrl_card_spacing; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_chip_pressed_translation_z = global::BLE.Client.Droid.Resource.Dimension.mtrl_chip_pressed_translation_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_chip_text_size = global::BLE.Client.Droid.Resource.Dimension.mtrl_chip_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_translation_z_hovered_focused = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_translation_z_hovered_focused; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_translation_z_pressed = global::BLE.Client.Droid.Resource.Dimension.mtrl_fab_translation_z_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_elevation = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_item_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_item_horizontal_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_item_icon_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_navigation_item_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_snackbar_background_corner_radius = global::BLE.Client.Droid.Resource.Dimension.mtrl_snackbar_background_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_snackbar_margin = global::BLE.Client.Droid.Resource.Dimension.mtrl_snackbar_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_bottom_offset = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_bottom_offset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_corner_radius_medium = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_medium; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_corner_radius_small = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_small; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_label_cutout_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_label_cutout_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_padding_end = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_padding_end; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_stroke_width_default = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_default; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_stroke_width_focused = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_focused; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding = global::BLE.Client.Droid.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_toolbar_default_height = global::BLE.Client.Droid.Resource.Dimension.mtrl_toolbar_default_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_action_icon_size = global::BLE.Client.Droid.Resource.Dimension.notification_action_icon_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_action_text_size = global::BLE.Client.Droid.Resource.Dimension.notification_action_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_big_circle_margin = global::BLE.Client.Droid.Resource.Dimension.notification_big_circle_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_content_margin_start = global::BLE.Client.Droid.Resource.Dimension.notification_content_margin_start; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_large_icon_height = global::BLE.Client.Droid.Resource.Dimension.notification_large_icon_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_large_icon_width = global::BLE.Client.Droid.Resource.Dimension.notification_large_icon_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_main_column_padding_top = global::BLE.Client.Droid.Resource.Dimension.notification_main_column_padding_top; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_media_narrow_margin = global::BLE.Client.Droid.Resource.Dimension.notification_media_narrow_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_right_icon_size = global::BLE.Client.Droid.Resource.Dimension.notification_right_icon_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_right_side_padding_top = global::BLE.Client.Droid.Resource.Dimension.notification_right_side_padding_top; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_small_icon_background_padding = global::BLE.Client.Droid.Resource.Dimension.notification_small_icon_background_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_small_icon_size_as_large = global::BLE.Client.Droid.Resource.Dimension.notification_small_icon_size_as_large; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_subtext_size = global::BLE.Client.Droid.Resource.Dimension.notification_subtext_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_top_pad = global::BLE.Client.Droid.Resource.Dimension.notification_top_pad; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_top_pad_large_text = global::BLE.Client.Droid.Resource.Dimension.notification_top_pad_large_text; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_corner_radius = global::BLE.Client.Droid.Resource.Dimension.subtitle_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_outline_width = global::BLE.Client.Droid.Resource.Dimension.subtitle_outline_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_shadow_offset = global::BLE.Client.Droid.Resource.Dimension.subtitle_shadow_offset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_shadow_radius = global::BLE.Client.Droid.Resource.Dimension.subtitle_shadow_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_corner_radius = global::BLE.Client.Droid.Resource.Dimension.tooltip_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_horizontal_padding = global::BLE.Client.Droid.Resource.Dimension.tooltip_horizontal_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_margin = global::BLE.Client.Droid.Resource.Dimension.tooltip_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_precise_anchor_extra_offset = global::BLE.Client.Droid.Resource.Dimension.tooltip_precise_anchor_extra_offset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_precise_anchor_threshold = global::BLE.Client.Droid.Resource.Dimension.tooltip_precise_anchor_threshold; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_vertical_padding = global::BLE.Client.Droid.Resource.Dimension.tooltip_vertical_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_y_offset_non_touch = global::BLE.Client.Droid.Resource.Dimension.tooltip_y_offset_non_touch; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_y_offset_touch = global::BLE.Client.Droid.Resource.Dimension.tooltip_y_offset_touch; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ab_share_pack_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ab_share_pack_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_action_bar_item_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_action_bar_item_background_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_borderless_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_borderless_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_to_on_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_000; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_to_on_mtrl_015 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_015; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_colored_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_colored_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_default_mtrl_shape = global::BLE.Client.Droid.Resource.Drawable.abc_btn_default_mtrl_shape; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_material = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_to_on_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_000; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_to_on_mtrl_015 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_015; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012 = global::BLE.Client.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_internal_bg = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_internal_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_top_material = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_top_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_top_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_cab_background_top_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_control_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_control_background_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_dialog_material_background = global::BLE.Client.Droid.Resource.Drawable.abc_dialog_material_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_edit_text_material = global::BLE.Client.Droid.Resource.Drawable.abc_edit_text_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_ab_back_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_ab_back_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_clear_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_clear_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_go_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_go_search_api_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_overflow_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_overflow_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_share_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_ic_menu_share_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_search_api_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_16dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_16dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_36dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_36dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_48dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_black_48dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_16dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_16dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_36dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_36dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_48dp = global::BLE.Client.Droid.Resource.Drawable.abc_ic_star_half_black_48dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_voice_search_api_material = global::BLE.Client.Droid.Resource.Drawable.abc_ic_voice_search_api_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_item_background_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_item_background_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_item_background_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_item_background_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_divider_material = global::BLE.Client.Droid.Resource.Drawable.abc_list_divider_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_divider_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_list_divider_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_focused_holo = global::BLE.Client.Droid.Resource.Drawable.abc_list_focused_holo; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_longpressed_holo = global::BLE.Client.Droid.Resource.Drawable.abc_list_longpressed_holo; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_pressed_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_pressed_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_pressed_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_pressed_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_background_transition_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_background_transition_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_disabled_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_disabled_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_disabled_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_disabled_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_holo_dark = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_holo_light = global::BLE.Client.Droid.Resource.Drawable.abc_list_selector_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult = global::BLE.Client.Droid.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_popup_background_mtrl_mult = global::BLE.Client.Droid.Resource.Drawable.abc_popup_background_mtrl_mult; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_indicator_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_indicator_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_small_material = global::BLE.Client.Droid.Resource.Drawable.abc_ratingbar_small_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000 = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005 = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_primary_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_primary_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_track_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_scrubber_track_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_thumb_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_thumb_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_tick_mark_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_tick_mark_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_track_material = global::BLE.Client.Droid.Resource.Drawable.abc_seekbar_track_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_spinner_mtrl_am_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_spinner_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_spinner_textfield_background_material = global::BLE.Client.Droid.Resource.Drawable.abc_spinner_textfield_background_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_switch_thumb_material = global::BLE.Client.Droid.Resource.Drawable.abc_switch_thumb_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_switch_track_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_switch_track_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_tab_indicator_material = global::BLE.Client.Droid.Resource.Drawable.abc_tab_indicator_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_tab_indicator_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_tab_indicator_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_cursor_material = global::BLE.Client.Droid.Resource.Drawable.abc_text_cursor_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_left_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_left_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_middle_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_right_mtrl_dark = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_right_mtrl_light = global::BLE.Client.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_activated_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_activated_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_default_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_default_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_default_mtrl_alpha = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_default_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_material = global::BLE.Client.Droid.Resource.Drawable.abc_textfield_search_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_vector_test = global::BLE.Client.Droid.Resource.Drawable.abc_vector_test; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_hide_password = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_hide_password_1 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_1; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_hide_password_2 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_2; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_hide_password_3 = global::BLE.Client.Droid.Resource.Drawable.avd_hide_password_3; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_show_password = global::BLE.Client.Droid.Resource.Drawable.avd_show_password; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_show_password_1 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_1; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_show_password_2 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_2; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_show_password_3 = global::BLE.Client.Droid.Resource.Drawable.avd_show_password_3; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_bottom_navigation_item_background = global::BLE.Client.Droid.Resource.Drawable.design_bottom_navigation_item_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_fab_background = global::BLE.Client.Droid.Resource.Drawable.design_fab_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_ic_visibility = global::BLE.Client.Droid.Resource.Drawable.design_ic_visibility; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_ic_visibility_off = global::BLE.Client.Droid.Resource.Drawable.design_ic_visibility_off; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_password_eye = global::BLE.Client.Droid.Resource.Drawable.design_password_eye; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_snackbar_background = global::BLE.Client.Droid.Resource.Drawable.design_snackbar_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_checked_black = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_checked_black; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_checked_circle = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_checked_circle; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_close_circle = global::BLE.Client.Droid.Resource.Drawable.ic_mtrl_chip_close_circle; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.mtrl_snackbar_background = global::BLE.Client.Droid.Resource.Drawable.mtrl_snackbar_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.mtrl_tabs_default_indicator = global::BLE.Client.Droid.Resource.Drawable.mtrl_tabs_default_indicator; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.navigation_empty_icon = global::BLE.Client.Droid.Resource.Drawable.navigation_empty_icon; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_action_background = global::BLE.Client.Droid.Resource.Drawable.notification_action_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg = global::BLE.Client.Droid.Resource.Drawable.notification_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low_normal = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low_normal; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low_pressed = global::BLE.Client.Droid.Resource.Drawable.notification_bg_low_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_normal = global::BLE.Client.Droid.Resource.Drawable.notification_bg_normal; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_normal_pressed = global::BLE.Client.Droid.Resource.Drawable.notification_bg_normal_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_icon_background = global::BLE.Client.Droid.Resource.Drawable.notification_icon_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_template_icon_bg = global::BLE.Client.Droid.Resource.Drawable.notification_template_icon_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_template_icon_low_bg = global::BLE.Client.Droid.Resource.Drawable.notification_template_icon_low_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_tile_bg = global::BLE.Client.Droid.Resource.Drawable.notification_tile_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notify_panel_notification_icon_bg = global::BLE.Client.Droid.Resource.Drawable.notify_panel_notification_icon_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.tooltip_frame_dark = global::BLE.Client.Droid.Resource.Drawable.tooltip_frame_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.tooltip_frame_light = global::BLE.Client.Droid.Resource.Drawable.tooltip_frame_light; - global::Xamarin.Forms.Platform.Android.Resource.Id.ALT = global::BLE.Client.Droid.Resource.Id.ALT; - global::Xamarin.Forms.Platform.Android.Resource.Id.CTRL = global::BLE.Client.Droid.Resource.Id.CTRL; - global::Xamarin.Forms.Platform.Android.Resource.Id.FUNCTION = global::BLE.Client.Droid.Resource.Id.FUNCTION; - global::Xamarin.Forms.Platform.Android.Resource.Id.META = global::BLE.Client.Droid.Resource.Id.META; - global::Xamarin.Forms.Platform.Android.Resource.Id.SHIFT = global::BLE.Client.Droid.Resource.Id.SHIFT; - global::Xamarin.Forms.Platform.Android.Resource.Id.SYM = global::BLE.Client.Droid.Resource.Id.SYM; - global::Xamarin.Forms.Platform.Android.Resource.Id.action0 = global::BLE.Client.Droid.Resource.Id.action0; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar = global::BLE.Client.Droid.Resource.Id.action_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_activity_content = global::BLE.Client.Droid.Resource.Id.action_bar_activity_content; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_container = global::BLE.Client.Droid.Resource.Id.action_bar_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_root = global::BLE.Client.Droid.Resource.Id.action_bar_root; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_spinner = global::BLE.Client.Droid.Resource.Id.action_bar_spinner; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_subtitle = global::BLE.Client.Droid.Resource.Id.action_bar_subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_title = global::BLE.Client.Droid.Resource.Id.action_bar_title; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_container = global::BLE.Client.Droid.Resource.Id.action_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_context_bar = global::BLE.Client.Droid.Resource.Id.action_context_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_divider = global::BLE.Client.Droid.Resource.Id.action_divider; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_image = global::BLE.Client.Droid.Resource.Id.action_image; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_menu_divider = global::BLE.Client.Droid.Resource.Id.action_menu_divider; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_menu_presenter = global::BLE.Client.Droid.Resource.Id.action_menu_presenter; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_bar = global::BLE.Client.Droid.Resource.Id.action_mode_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_bar_stub = global::BLE.Client.Droid.Resource.Id.action_mode_bar_stub; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_close_button = global::BLE.Client.Droid.Resource.Id.action_mode_close_button; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_text = global::BLE.Client.Droid.Resource.Id.action_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.actions = global::BLE.Client.Droid.Resource.Id.actions; - global::Xamarin.Forms.Platform.Android.Resource.Id.activity_chooser_view_content = global::BLE.Client.Droid.Resource.Id.activity_chooser_view_content; - global::Xamarin.Forms.Platform.Android.Resource.Id.add = global::BLE.Client.Droid.Resource.Id.add; - global::Xamarin.Forms.Platform.Android.Resource.Id.alertTitle = global::BLE.Client.Droid.Resource.Id.alertTitle; - global::Xamarin.Forms.Platform.Android.Resource.Id.all = global::BLE.Client.Droid.Resource.Id.all; - global::Xamarin.Forms.Platform.Android.Resource.Id.always = global::BLE.Client.Droid.Resource.Id.always; - global::Xamarin.Forms.Platform.Android.Resource.Id.async = global::BLE.Client.Droid.Resource.Id.async; - global::Xamarin.Forms.Platform.Android.Resource.Id.auto = global::BLE.Client.Droid.Resource.Id.auto; - global::Xamarin.Forms.Platform.Android.Resource.Id.beginning = global::BLE.Client.Droid.Resource.Id.beginning; - global::Xamarin.Forms.Platform.Android.Resource.Id.blocking = global::BLE.Client.Droid.Resource.Id.blocking; - global::Xamarin.Forms.Platform.Android.Resource.Id.bottom = global::BLE.Client.Droid.Resource.Id.bottom; - global::Xamarin.Forms.Platform.Android.Resource.Id.bottomtab_navarea = global::BLE.Client.Droid.Resource.Id.bottomtab_navarea; - global::Xamarin.Forms.Platform.Android.Resource.Id.bottomtab_tabbar = global::BLE.Client.Droid.Resource.Id.bottomtab_tabbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.buttonPanel = global::BLE.Client.Droid.Resource.Id.buttonPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.cancel_action = global::BLE.Client.Droid.Resource.Id.cancel_action; - global::Xamarin.Forms.Platform.Android.Resource.Id.center = global::BLE.Client.Droid.Resource.Id.center; - global::Xamarin.Forms.Platform.Android.Resource.Id.center_horizontal = global::BLE.Client.Droid.Resource.Id.center_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Id.center_vertical = global::BLE.Client.Droid.Resource.Id.center_vertical; - global::Xamarin.Forms.Platform.Android.Resource.Id.checkbox = global::BLE.Client.Droid.Resource.Id.checkbox; - global::Xamarin.Forms.Platform.Android.Resource.Id.chronometer = global::BLE.Client.Droid.Resource.Id.chronometer; - global::Xamarin.Forms.Platform.Android.Resource.Id.clip_horizontal = global::BLE.Client.Droid.Resource.Id.clip_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Id.clip_vertical = global::BLE.Client.Droid.Resource.Id.clip_vertical; - global::Xamarin.Forms.Platform.Android.Resource.Id.collapseActionView = global::BLE.Client.Droid.Resource.Id.collapseActionView; - global::Xamarin.Forms.Platform.Android.Resource.Id.container = global::BLE.Client.Droid.Resource.Id.container; - global::Xamarin.Forms.Platform.Android.Resource.Id.content = global::BLE.Client.Droid.Resource.Id.content; - global::Xamarin.Forms.Platform.Android.Resource.Id.contentPanel = global::BLE.Client.Droid.Resource.Id.contentPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.coordinator = global::BLE.Client.Droid.Resource.Id.coordinator; - global::Xamarin.Forms.Platform.Android.Resource.Id.custom = global::BLE.Client.Droid.Resource.Id.custom; - global::Xamarin.Forms.Platform.Android.Resource.Id.customPanel = global::BLE.Client.Droid.Resource.Id.customPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.decor_content_parent = global::BLE.Client.Droid.Resource.Id.decor_content_parent; - global::Xamarin.Forms.Platform.Android.Resource.Id.default_activity_button = global::BLE.Client.Droid.Resource.Id.default_activity_button; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_bottom_sheet = global::BLE.Client.Droid.Resource.Id.design_bottom_sheet; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_action_area = global::BLE.Client.Droid.Resource.Id.design_menu_item_action_area; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_action_area_stub = global::BLE.Client.Droid.Resource.Id.design_menu_item_action_area_stub; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_text = global::BLE.Client.Droid.Resource.Id.design_menu_item_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_navigation_view = global::BLE.Client.Droid.Resource.Id.design_navigation_view; - global::Xamarin.Forms.Platform.Android.Resource.Id.disableHome = global::BLE.Client.Droid.Resource.Id.disableHome; - global::Xamarin.Forms.Platform.Android.Resource.Id.edit_query = global::BLE.Client.Droid.Resource.Id.edit_query; - global::Xamarin.Forms.Platform.Android.Resource.Id.end = global::BLE.Client.Droid.Resource.Id.end; - global::Xamarin.Forms.Platform.Android.Resource.Id.end_padder = global::BLE.Client.Droid.Resource.Id.end_padder; - global::Xamarin.Forms.Platform.Android.Resource.Id.enterAlways = global::BLE.Client.Droid.Resource.Id.enterAlways; - global::Xamarin.Forms.Platform.Android.Resource.Id.enterAlwaysCollapsed = global::BLE.Client.Droid.Resource.Id.enterAlwaysCollapsed; - global::Xamarin.Forms.Platform.Android.Resource.Id.exitUntilCollapsed = global::BLE.Client.Droid.Resource.Id.exitUntilCollapsed; - global::Xamarin.Forms.Platform.Android.Resource.Id.expand_activities_button = global::BLE.Client.Droid.Resource.Id.expand_activities_button; - global::Xamarin.Forms.Platform.Android.Resource.Id.expanded_menu = global::BLE.Client.Droid.Resource.Id.expanded_menu; - global::Xamarin.Forms.Platform.Android.Resource.Id.fill = global::BLE.Client.Droid.Resource.Id.fill; - global::Xamarin.Forms.Platform.Android.Resource.Id.fill_horizontal = global::BLE.Client.Droid.Resource.Id.fill_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Id.fill_vertical = global::BLE.Client.Droid.Resource.Id.fill_vertical; - global::Xamarin.Forms.Platform.Android.Resource.Id.filled = global::BLE.Client.Droid.Resource.Id.filled; - global::Xamarin.Forms.Platform.Android.Resource.Id.@fixed = global::BLE.Client.Droid.Resource.Id.@fixed; - global::Xamarin.Forms.Platform.Android.Resource.Id.flyoutcontent_appbar = global::BLE.Client.Droid.Resource.Id.flyoutcontent_appbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.flyoutcontent_recycler = global::BLE.Client.Droid.Resource.Id.flyoutcontent_recycler; - global::Xamarin.Forms.Platform.Android.Resource.Id.forever = global::BLE.Client.Droid.Resource.Id.forever; - global::Xamarin.Forms.Platform.Android.Resource.Id.ghost_view = global::BLE.Client.Droid.Resource.Id.ghost_view; - global::Xamarin.Forms.Platform.Android.Resource.Id.group_divider = global::BLE.Client.Droid.Resource.Id.group_divider; - global::Xamarin.Forms.Platform.Android.Resource.Id.home = global::BLE.Client.Droid.Resource.Id.home; - global::Xamarin.Forms.Platform.Android.Resource.Id.homeAsUp = global::BLE.Client.Droid.Resource.Id.homeAsUp; - global::Xamarin.Forms.Platform.Android.Resource.Id.icon = global::BLE.Client.Droid.Resource.Id.icon; - global::Xamarin.Forms.Platform.Android.Resource.Id.icon_group = global::BLE.Client.Droid.Resource.Id.icon_group; - global::Xamarin.Forms.Platform.Android.Resource.Id.ifRoom = global::BLE.Client.Droid.Resource.Id.ifRoom; - global::Xamarin.Forms.Platform.Android.Resource.Id.image = global::BLE.Client.Droid.Resource.Id.image; - global::Xamarin.Forms.Platform.Android.Resource.Id.info = global::BLE.Client.Droid.Resource.Id.info; - global::Xamarin.Forms.Platform.Android.Resource.Id.italic = global::BLE.Client.Droid.Resource.Id.italic; - global::Xamarin.Forms.Platform.Android.Resource.Id.item_touch_helper_previous_elevation = global::BLE.Client.Droid.Resource.Id.item_touch_helper_previous_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Id.labeled = global::BLE.Client.Droid.Resource.Id.labeled; - global::Xamarin.Forms.Platform.Android.Resource.Id.largeLabel = global::BLE.Client.Droid.Resource.Id.largeLabel; - global::Xamarin.Forms.Platform.Android.Resource.Id.left = global::BLE.Client.Droid.Resource.Id.left; - global::Xamarin.Forms.Platform.Android.Resource.Id.line1 = global::BLE.Client.Droid.Resource.Id.line1; - global::Xamarin.Forms.Platform.Android.Resource.Id.line3 = global::BLE.Client.Droid.Resource.Id.line3; - global::Xamarin.Forms.Platform.Android.Resource.Id.listMode = global::BLE.Client.Droid.Resource.Id.listMode; - global::Xamarin.Forms.Platform.Android.Resource.Id.list_item = global::BLE.Client.Droid.Resource.Id.list_item; - global::Xamarin.Forms.Platform.Android.Resource.Id.main_appbar = global::BLE.Client.Droid.Resource.Id.main_appbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.main_tablayout = global::BLE.Client.Droid.Resource.Id.main_tablayout; - global::Xamarin.Forms.Platform.Android.Resource.Id.main_toolbar = global::BLE.Client.Droid.Resource.Id.main_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.main_viewpager = global::BLE.Client.Droid.Resource.Id.main_viewpager; - global::Xamarin.Forms.Platform.Android.Resource.Id.masked = global::BLE.Client.Droid.Resource.Id.masked; - global::Xamarin.Forms.Platform.Android.Resource.Id.media_actions = global::BLE.Client.Droid.Resource.Id.media_actions; - global::Xamarin.Forms.Platform.Android.Resource.Id.message = global::BLE.Client.Droid.Resource.Id.message; - global::Xamarin.Forms.Platform.Android.Resource.Id.middle = global::BLE.Client.Droid.Resource.Id.middle; - global::Xamarin.Forms.Platform.Android.Resource.Id.mini = global::BLE.Client.Droid.Resource.Id.mini; - global::Xamarin.Forms.Platform.Android.Resource.Id.mtrl_child_content_container = global::BLE.Client.Droid.Resource.Id.mtrl_child_content_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.mtrl_internal_children_alpha_tag = global::BLE.Client.Droid.Resource.Id.mtrl_internal_children_alpha_tag; - global::Xamarin.Forms.Platform.Android.Resource.Id.multiply = global::BLE.Client.Droid.Resource.Id.multiply; - global::Xamarin.Forms.Platform.Android.Resource.Id.navigation_header_container = global::BLE.Client.Droid.Resource.Id.navigation_header_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.never = global::BLE.Client.Droid.Resource.Id.never; - global::Xamarin.Forms.Platform.Android.Resource.Id.none = global::BLE.Client.Droid.Resource.Id.none; - global::Xamarin.Forms.Platform.Android.Resource.Id.normal = global::BLE.Client.Droid.Resource.Id.normal; - global::Xamarin.Forms.Platform.Android.Resource.Id.notification_background = global::BLE.Client.Droid.Resource.Id.notification_background; - global::Xamarin.Forms.Platform.Android.Resource.Id.notification_main_column = global::BLE.Client.Droid.Resource.Id.notification_main_column; - global::Xamarin.Forms.Platform.Android.Resource.Id.notification_main_column_container = global::BLE.Client.Droid.Resource.Id.notification_main_column_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.outline = global::BLE.Client.Droid.Resource.Id.outline; - global::Xamarin.Forms.Platform.Android.Resource.Id.parallax = global::BLE.Client.Droid.Resource.Id.parallax; - global::Xamarin.Forms.Platform.Android.Resource.Id.parentPanel = global::BLE.Client.Droid.Resource.Id.parentPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.parent_matrix = global::BLE.Client.Droid.Resource.Id.parent_matrix; - global::Xamarin.Forms.Platform.Android.Resource.Id.pin = global::BLE.Client.Droid.Resource.Id.pin; - global::Xamarin.Forms.Platform.Android.Resource.Id.progress_circular = global::BLE.Client.Droid.Resource.Id.progress_circular; - global::Xamarin.Forms.Platform.Android.Resource.Id.progress_horizontal = global::BLE.Client.Droid.Resource.Id.progress_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Id.radio = global::BLE.Client.Droid.Resource.Id.radio; - global::Xamarin.Forms.Platform.Android.Resource.Id.right = global::BLE.Client.Droid.Resource.Id.right; - global::Xamarin.Forms.Platform.Android.Resource.Id.right_icon = global::BLE.Client.Droid.Resource.Id.right_icon; - global::Xamarin.Forms.Platform.Android.Resource.Id.right_side = global::BLE.Client.Droid.Resource.Id.right_side; - global::Xamarin.Forms.Platform.Android.Resource.Id.save_image_matrix = global::BLE.Client.Droid.Resource.Id.save_image_matrix; - global::Xamarin.Forms.Platform.Android.Resource.Id.save_non_transition_alpha = global::BLE.Client.Droid.Resource.Id.save_non_transition_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Id.save_scale_type = global::BLE.Client.Droid.Resource.Id.save_scale_type; - global::Xamarin.Forms.Platform.Android.Resource.Id.screen = global::BLE.Client.Droid.Resource.Id.screen; - global::Xamarin.Forms.Platform.Android.Resource.Id.scroll = global::BLE.Client.Droid.Resource.Id.scroll; - global::Xamarin.Forms.Platform.Android.Resource.Id.scrollIndicatorDown = global::BLE.Client.Droid.Resource.Id.scrollIndicatorDown; - global::Xamarin.Forms.Platform.Android.Resource.Id.scrollIndicatorUp = global::BLE.Client.Droid.Resource.Id.scrollIndicatorUp; - global::Xamarin.Forms.Platform.Android.Resource.Id.scrollView = global::BLE.Client.Droid.Resource.Id.scrollView; - global::Xamarin.Forms.Platform.Android.Resource.Id.scrollable = global::BLE.Client.Droid.Resource.Id.scrollable; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_badge = global::BLE.Client.Droid.Resource.Id.search_badge; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_bar = global::BLE.Client.Droid.Resource.Id.search_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_button = global::BLE.Client.Droid.Resource.Id.search_button; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_close_btn = global::BLE.Client.Droid.Resource.Id.search_close_btn; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_edit_frame = global::BLE.Client.Droid.Resource.Id.search_edit_frame; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_go_btn = global::BLE.Client.Droid.Resource.Id.search_go_btn; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_mag_icon = global::BLE.Client.Droid.Resource.Id.search_mag_icon; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_plate = global::BLE.Client.Droid.Resource.Id.search_plate; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_src_text = global::BLE.Client.Droid.Resource.Id.search_src_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_voice_btn = global::BLE.Client.Droid.Resource.Id.search_voice_btn; - global::Xamarin.Forms.Platform.Android.Resource.Id.select_dialog_listview = global::BLE.Client.Droid.Resource.Id.select_dialog_listview; - global::Xamarin.Forms.Platform.Android.Resource.Id.selected = global::BLE.Client.Droid.Resource.Id.selected; - global::Xamarin.Forms.Platform.Android.Resource.Id.shellcontent_appbar = global::BLE.Client.Droid.Resource.Id.shellcontent_appbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.shellcontent_toolbar = global::BLE.Client.Droid.Resource.Id.shellcontent_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.shortcut = global::BLE.Client.Droid.Resource.Id.shortcut; - global::Xamarin.Forms.Platform.Android.Resource.Id.showCustom = global::BLE.Client.Droid.Resource.Id.showCustom; - global::Xamarin.Forms.Platform.Android.Resource.Id.showHome = global::BLE.Client.Droid.Resource.Id.showHome; - global::Xamarin.Forms.Platform.Android.Resource.Id.showTitle = global::BLE.Client.Droid.Resource.Id.showTitle; - global::Xamarin.Forms.Platform.Android.Resource.Id.smallLabel = global::BLE.Client.Droid.Resource.Id.smallLabel; - global::Xamarin.Forms.Platform.Android.Resource.Id.snackbar_action = global::BLE.Client.Droid.Resource.Id.snackbar_action; - global::Xamarin.Forms.Platform.Android.Resource.Id.snackbar_text = global::BLE.Client.Droid.Resource.Id.snackbar_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.snap = global::BLE.Client.Droid.Resource.Id.snap; - global::Xamarin.Forms.Platform.Android.Resource.Id.snapMargins = global::BLE.Client.Droid.Resource.Id.snapMargins; - global::Xamarin.Forms.Platform.Android.Resource.Id.spacer = global::BLE.Client.Droid.Resource.Id.spacer; - global::Xamarin.Forms.Platform.Android.Resource.Id.split_action_bar = global::BLE.Client.Droid.Resource.Id.split_action_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.src_atop = global::BLE.Client.Droid.Resource.Id.src_atop; - global::Xamarin.Forms.Platform.Android.Resource.Id.src_in = global::BLE.Client.Droid.Resource.Id.src_in; - global::Xamarin.Forms.Platform.Android.Resource.Id.src_over = global::BLE.Client.Droid.Resource.Id.src_over; - global::Xamarin.Forms.Platform.Android.Resource.Id.start = global::BLE.Client.Droid.Resource.Id.start; - global::Xamarin.Forms.Platform.Android.Resource.Id.status_bar_latest_event_content = global::BLE.Client.Droid.Resource.Id.status_bar_latest_event_content; - global::Xamarin.Forms.Platform.Android.Resource.Id.stretch = global::BLE.Client.Droid.Resource.Id.stretch; - global::Xamarin.Forms.Platform.Android.Resource.Id.submenuarrow = global::BLE.Client.Droid.Resource.Id.submenuarrow; - global::Xamarin.Forms.Platform.Android.Resource.Id.submit_area = global::BLE.Client.Droid.Resource.Id.submit_area; - global::Xamarin.Forms.Platform.Android.Resource.Id.tabMode = global::BLE.Client.Droid.Resource.Id.tabMode; - global::Xamarin.Forms.Platform.Android.Resource.Id.tag_transition_group = global::BLE.Client.Droid.Resource.Id.tag_transition_group; - global::Xamarin.Forms.Platform.Android.Resource.Id.tag_unhandled_key_event_manager = global::BLE.Client.Droid.Resource.Id.tag_unhandled_key_event_manager; - global::Xamarin.Forms.Platform.Android.Resource.Id.tag_unhandled_key_listeners = global::BLE.Client.Droid.Resource.Id.tag_unhandled_key_listeners; - global::Xamarin.Forms.Platform.Android.Resource.Id.text = global::BLE.Client.Droid.Resource.Id.text; - global::Xamarin.Forms.Platform.Android.Resource.Id.text2 = global::BLE.Client.Droid.Resource.Id.text2; - global::Xamarin.Forms.Platform.Android.Resource.Id.textSpacerNoButtons = global::BLE.Client.Droid.Resource.Id.textSpacerNoButtons; - global::Xamarin.Forms.Platform.Android.Resource.Id.textSpacerNoTitle = global::BLE.Client.Droid.Resource.Id.textSpacerNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Id.textStart = global::BLE.Client.Droid.Resource.Id.textStart; - global::Xamarin.Forms.Platform.Android.Resource.Id.text_input_password_toggle = global::BLE.Client.Droid.Resource.Id.text_input_password_toggle; - global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_counter = global::BLE.Client.Droid.Resource.Id.textinput_counter; - global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_error = global::BLE.Client.Droid.Resource.Id.textinput_error; - global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_helper_text = global::BLE.Client.Droid.Resource.Id.textinput_helper_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.time = global::BLE.Client.Droid.Resource.Id.time; - global::Xamarin.Forms.Platform.Android.Resource.Id.title = global::BLE.Client.Droid.Resource.Id.title; - global::Xamarin.Forms.Platform.Android.Resource.Id.titleDividerNoCustom = global::BLE.Client.Droid.Resource.Id.titleDividerNoCustom; - global::Xamarin.Forms.Platform.Android.Resource.Id.title_template = global::BLE.Client.Droid.Resource.Id.title_template; - global::Xamarin.Forms.Platform.Android.Resource.Id.top = global::BLE.Client.Droid.Resource.Id.top; - global::Xamarin.Forms.Platform.Android.Resource.Id.topPanel = global::BLE.Client.Droid.Resource.Id.topPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.touch_outside = global::BLE.Client.Droid.Resource.Id.touch_outside; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_current_scene = global::BLE.Client.Droid.Resource.Id.transition_current_scene; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_layout_save = global::BLE.Client.Droid.Resource.Id.transition_layout_save; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_position = global::BLE.Client.Droid.Resource.Id.transition_position; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_scene_layoutid_cache = global::BLE.Client.Droid.Resource.Id.transition_scene_layoutid_cache; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_transform = global::BLE.Client.Droid.Resource.Id.transition_transform; - global::Xamarin.Forms.Platform.Android.Resource.Id.uniform = global::BLE.Client.Droid.Resource.Id.uniform; - global::Xamarin.Forms.Platform.Android.Resource.Id.unlabeled = global::BLE.Client.Droid.Resource.Id.unlabeled; - global::Xamarin.Forms.Platform.Android.Resource.Id.up = global::BLE.Client.Droid.Resource.Id.up; - global::Xamarin.Forms.Platform.Android.Resource.Id.useLogo = global::BLE.Client.Droid.Resource.Id.useLogo; - global::Xamarin.Forms.Platform.Android.Resource.Id.view_offset_helper = global::BLE.Client.Droid.Resource.Id.view_offset_helper; - global::Xamarin.Forms.Platform.Android.Resource.Id.visible = global::BLE.Client.Droid.Resource.Id.visible; - global::Xamarin.Forms.Platform.Android.Resource.Id.withText = global::BLE.Client.Droid.Resource.Id.withText; - global::Xamarin.Forms.Platform.Android.Resource.Id.wrap_content = global::BLE.Client.Droid.Resource.Id.wrap_content; - global::Xamarin.Forms.Platform.Android.Resource.Integer.abc_config_activityDefaultDur = global::BLE.Client.Droid.Resource.Integer.abc_config_activityDefaultDur; - global::Xamarin.Forms.Platform.Android.Resource.Integer.abc_config_activityShortDur = global::BLE.Client.Droid.Resource.Integer.abc_config_activityShortDur; - global::Xamarin.Forms.Platform.Android.Resource.Integer.app_bar_elevation_anim_duration = global::BLE.Client.Droid.Resource.Integer.app_bar_elevation_anim_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.bottom_sheet_slide_duration = global::BLE.Client.Droid.Resource.Integer.bottom_sheet_slide_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.cancel_button_image_alpha = global::BLE.Client.Droid.Resource.Integer.cancel_button_image_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Integer.config_tooltipAnimTime = global::BLE.Client.Droid.Resource.Integer.config_tooltipAnimTime; - global::Xamarin.Forms.Platform.Android.Resource.Integer.design_snackbar_text_max_lines = global::BLE.Client.Droid.Resource.Integer.design_snackbar_text_max_lines; - global::Xamarin.Forms.Platform.Android.Resource.Integer.design_tab_indicator_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.design_tab_indicator_anim_duration_ms; - global::Xamarin.Forms.Platform.Android.Resource.Integer.hide_password_duration = global::BLE.Client.Droid.Resource.Integer.hide_password_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_btn_anim_delay_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_btn_anim_delay_ms; - global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_btn_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_btn_anim_duration_ms; - global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_chip_anim_duration = global::BLE.Client.Droid.Resource.Integer.mtrl_chip_anim_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_tab_indicator_anim_duration_ms = global::BLE.Client.Droid.Resource.Integer.mtrl_tab_indicator_anim_duration_ms; - global::Xamarin.Forms.Platform.Android.Resource.Integer.show_password_duration = global::BLE.Client.Droid.Resource.Integer.show_password_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.status_bar_notification_info_maxnum = global::BLE.Client.Droid.Resource.Integer.status_bar_notification_info_maxnum; - global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_fast_out_linear_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_fast_out_linear_in; - global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_fast_out_slow_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_fast_out_slow_in; - global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_linear = global::BLE.Client.Droid.Resource.Interpolator.mtrl_linear; - global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_linear_out_slow_in = global::BLE.Client.Droid.Resource.Interpolator.mtrl_linear_out_slow_in; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_bar_title_item = global::BLE.Client.Droid.Resource.Layout.abc_action_bar_title_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_bar_up_container = global::BLE.Client.Droid.Resource.Layout.abc_action_bar_up_container; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_action_menu_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_menu_layout = global::BLE.Client.Droid.Resource.Layout.abc_action_menu_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_mode_bar = global::BLE.Client.Droid.Resource.Layout.abc_action_mode_bar; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_mode_close_item_material = global::BLE.Client.Droid.Resource.Layout.abc_action_mode_close_item_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_activity_chooser_view = global::BLE.Client.Droid.Resource.Layout.abc_activity_chooser_view; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_activity_chooser_view_list_item = global::BLE.Client.Droid.Resource.Layout.abc_activity_chooser_view_list_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_button_bar_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_button_bar_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_title_material = global::BLE.Client.Droid.Resource.Layout.abc_alert_dialog_title_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_cascading_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_cascading_menu_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_dialog_title_material = global::BLE.Client.Droid.Resource.Layout.abc_dialog_title_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_expanded_menu_layout = global::BLE.Client.Droid.Resource.Layout.abc_expanded_menu_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_checkbox = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_checkbox; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_icon = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_icon; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_radio = global::BLE.Client.Droid.Resource.Layout.abc_list_menu_item_radio; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_popup_menu_header_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_popup_menu_header_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_popup_menu_item_layout = global::BLE.Client.Droid.Resource.Layout.abc_popup_menu_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_content_include = global::BLE.Client.Droid.Resource.Layout.abc_screen_content_include; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_simple = global::BLE.Client.Droid.Resource.Layout.abc_screen_simple; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_simple_overlay_action_mode = global::BLE.Client.Droid.Resource.Layout.abc_screen_simple_overlay_action_mode; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_toolbar = global::BLE.Client.Droid.Resource.Layout.abc_screen_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_search_dropdown_item_icons_2line = global::BLE.Client.Droid.Resource.Layout.abc_search_dropdown_item_icons_2line; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_search_view = global::BLE.Client.Droid.Resource.Layout.abc_search_view; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_select_dialog_material = global::BLE.Client.Droid.Resource.Layout.abc_select_dialog_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_tooltip = global::BLE.Client.Droid.Resource.Layout.abc_tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Layout.BottomTabLayout = global::BLE.Client.Droid.Resource.Layout.BottomTabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_bottom_navigation_item = global::BLE.Client.Droid.Resource.Layout.design_bottom_navigation_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_bottom_sheet_dialog = global::BLE.Client.Droid.Resource.Layout.design_bottom_sheet_dialog; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_snackbar = global::BLE.Client.Droid.Resource.Layout.design_layout_snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_snackbar_include = global::BLE.Client.Droid.Resource.Layout.design_layout_snackbar_include; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_tab_icon = global::BLE.Client.Droid.Resource.Layout.design_layout_tab_icon; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_tab_text = global::BLE.Client.Droid.Resource.Layout.design_layout_tab_text; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_menu_item_action_area = global::BLE.Client.Droid.Resource.Layout.design_menu_item_action_area; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item = global::BLE.Client.Droid.Resource.Layout.design_navigation_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_header = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_header; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_separator = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_separator; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_subheader = global::BLE.Client.Droid.Resource.Layout.design_navigation_item_subheader; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_menu = global::BLE.Client.Droid.Resource.Layout.design_navigation_menu; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_menu_item = global::BLE.Client.Droid.Resource.Layout.design_navigation_menu_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_text_input_password_icon = global::BLE.Client.Droid.Resource.Layout.design_text_input_password_icon; - global::Xamarin.Forms.Platform.Android.Resource.Layout.FlyoutContent = global::BLE.Client.Droid.Resource.Layout.FlyoutContent; - global::Xamarin.Forms.Platform.Android.Resource.Layout.mtrl_layout_snackbar = global::BLE.Client.Droid.Resource.Layout.mtrl_layout_snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Layout.mtrl_layout_snackbar_include = global::BLE.Client.Droid.Resource.Layout.mtrl_layout_snackbar_include; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_action = global::BLE.Client.Droid.Resource.Layout.notification_action; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_action_tombstone = global::BLE.Client.Droid.Resource.Layout.notification_action_tombstone; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_media_action = global::BLE.Client.Droid.Resource.Layout.notification_media_action; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_media_cancel_action = global::BLE.Client.Droid.Resource.Layout.notification_media_cancel_action; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media = global::BLE.Client.Droid.Resource.Layout.notification_template_big_media; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_custom = global::BLE.Client.Droid.Resource.Layout.notification_template_big_media_custom; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_narrow = global::BLE.Client.Droid.Resource.Layout.notification_template_big_media_narrow; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_narrow_custom = global::BLE.Client.Droid.Resource.Layout.notification_template_big_media_narrow_custom; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_custom_big = global::BLE.Client.Droid.Resource.Layout.notification_template_custom_big; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_icon_group = global::BLE.Client.Droid.Resource.Layout.notification_template_icon_group; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_lines_media = global::BLE.Client.Droid.Resource.Layout.notification_template_lines_media; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_media = global::BLE.Client.Droid.Resource.Layout.notification_template_media; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_media_custom = global::BLE.Client.Droid.Resource.Layout.notification_template_media_custom; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_part_chronometer = global::BLE.Client.Droid.Resource.Layout.notification_template_part_chronometer; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_part_time = global::BLE.Client.Droid.Resource.Layout.notification_template_part_time; - global::Xamarin.Forms.Platform.Android.Resource.Layout.RootLayout = global::BLE.Client.Droid.Resource.Layout.RootLayout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_item_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_item_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_multichoice_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_multichoice_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_singlechoice_material = global::BLE.Client.Droid.Resource.Layout.select_dialog_singlechoice_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.ShellContent = global::BLE.Client.Droid.Resource.Layout.ShellContent; - global::Xamarin.Forms.Platform.Android.Resource.Layout.support_simple_spinner_dropdown_item = global::BLE.Client.Droid.Resource.Layout.support_simple_spinner_dropdown_item; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_bar_home_description = global::BLE.Client.Droid.Resource.String.abc_action_bar_home_description; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_bar_up_description = global::BLE.Client.Droid.Resource.String.abc_action_bar_up_description; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_menu_overflow_description = global::BLE.Client.Droid.Resource.String.abc_action_menu_overflow_description; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_mode_done = global::BLE.Client.Droid.Resource.String.abc_action_mode_done; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_activity_chooser_view_see_all = global::BLE.Client.Droid.Resource.String.abc_activity_chooser_view_see_all; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_activitychooserview_choose_application = global::BLE.Client.Droid.Resource.String.abc_activitychooserview_choose_application; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_capital_off = global::BLE.Client.Droid.Resource.String.abc_capital_off; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_capital_on = global::BLE.Client.Droid.Resource.String.abc_capital_on; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_body_1_material = global::BLE.Client.Droid.Resource.String.abc_font_family_body_1_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_body_2_material = global::BLE.Client.Droid.Resource.String.abc_font_family_body_2_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_button_material = global::BLE.Client.Droid.Resource.String.abc_font_family_button_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_caption_material = global::BLE.Client.Droid.Resource.String.abc_font_family_caption_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_1_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_1_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_2_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_2_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_3_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_3_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_4_material = global::BLE.Client.Droid.Resource.String.abc_font_family_display_4_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_headline_material = global::BLE.Client.Droid.Resource.String.abc_font_family_headline_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_menu_material = global::BLE.Client.Droid.Resource.String.abc_font_family_menu_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_subhead_material = global::BLE.Client.Droid.Resource.String.abc_font_family_subhead_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_title_material = global::BLE.Client.Droid.Resource.String.abc_font_family_title_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_alt_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_alt_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_ctrl_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_ctrl_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_delete_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_delete_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_enter_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_enter_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_function_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_function_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_meta_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_meta_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_shift_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_shift_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_space_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_space_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_sym_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_menu_sym_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_prepend_shortcut_label = global::BLE.Client.Droid.Resource.String.abc_prepend_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_search_hint = global::BLE.Client.Droid.Resource.String.abc_search_hint; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_clear = global::BLE.Client.Droid.Resource.String.abc_searchview_description_clear; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_query = global::BLE.Client.Droid.Resource.String.abc_searchview_description_query; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_search = global::BLE.Client.Droid.Resource.String.abc_searchview_description_search; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_submit = global::BLE.Client.Droid.Resource.String.abc_searchview_description_submit; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_voice = global::BLE.Client.Droid.Resource.String.abc_searchview_description_voice; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_shareactionprovider_share_with = global::BLE.Client.Droid.Resource.String.abc_shareactionprovider_share_with; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_shareactionprovider_share_with_application = global::BLE.Client.Droid.Resource.String.abc_shareactionprovider_share_with_application; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_toolbar_collapse_description = global::BLE.Client.Droid.Resource.String.abc_toolbar_collapse_description; - global::Xamarin.Forms.Platform.Android.Resource.String.appbar_scrolling_view_behavior = global::BLE.Client.Droid.Resource.String.appbar_scrolling_view_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.bottom_sheet_behavior = global::BLE.Client.Droid.Resource.String.bottom_sheet_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.character_counter_content_description = global::BLE.Client.Droid.Resource.String.character_counter_content_description; - global::Xamarin.Forms.Platform.Android.Resource.String.character_counter_pattern = global::BLE.Client.Droid.Resource.String.character_counter_pattern; - global::Xamarin.Forms.Platform.Android.Resource.String.fab_transformation_scrim_behavior = global::BLE.Client.Droid.Resource.String.fab_transformation_scrim_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.fab_transformation_sheet_behavior = global::BLE.Client.Droid.Resource.String.fab_transformation_sheet_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.hide_bottom_view_on_scroll_behavior = global::BLE.Client.Droid.Resource.String.hide_bottom_view_on_scroll_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.mtrl_chip_close_icon_content_description = global::BLE.Client.Droid.Resource.String.mtrl_chip_close_icon_content_description; - global::Xamarin.Forms.Platform.Android.Resource.String.password_toggle_content_description = global::BLE.Client.Droid.Resource.String.password_toggle_content_description; - global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye = global::BLE.Client.Droid.Resource.String.path_password_eye; - global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye_mask_strike_through = global::BLE.Client.Droid.Resource.String.path_password_eye_mask_strike_through; - global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye_mask_visible = global::BLE.Client.Droid.Resource.String.path_password_eye_mask_visible; - global::Xamarin.Forms.Platform.Android.Resource.String.path_password_strike_through = global::BLE.Client.Droid.Resource.String.path_password_strike_through; - global::Xamarin.Forms.Platform.Android.Resource.String.search_menu_title = global::BLE.Client.Droid.Resource.String.search_menu_title; - global::Xamarin.Forms.Platform.Android.Resource.String.status_bar_notification_info_overflow = global::BLE.Client.Droid.Resource.String.status_bar_notification_info_overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.AlertDialog_AppCompat = global::BLE.Client.Droid.Resource.Style.AlertDialog_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.AlertDialog_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.AlertDialog_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_DropDownUp = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_DropDownUp; - global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Animation_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_Design_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Animation_Design_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_AlertDialog_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_AlertDialog_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_AlertDialog_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_AlertDialog_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_DropDownUp = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_DropDownUp; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Base_Animation_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_CardView = global::BLE.Client.Droid.Resource.Style.Base_CardView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_DialogWindowTitle_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_DialogWindowTitle_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_DialogWindowTitleBackground_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_DialogWindowTitleBackground_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Body1 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body1; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Body2 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body2; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Caption = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Caption; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display1 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display1; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display2 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display2; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display3 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display3; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display4 = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display4; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Headline = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Headline; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Medium = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Menu = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Subhead = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title = global::BLE.Client.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_CompactMenu = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_CompactMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_CompactMenu = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_CompactMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V22_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V22_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V22_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V22_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V23_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V23_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V23_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V23_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V26_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V26_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_V26_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V28_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V28_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V28_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V28_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_V7_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionMode = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActionMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ActivityChooserView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Borderless = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Colored = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Small = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Button_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ButtonBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ImageButton = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ImageButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListMenuView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListMenuView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListPopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView_Menu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ListView_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupMenu = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupWindow = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_PopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ProgressBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar_Small = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SearchView = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SearchView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SeekBar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation = global::BLE.Client.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_Design_TabLayout = global::BLE.Client.Droid.Resource.Style.Base_Widget_Design_TabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_Chip = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_Chip; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout = global::BLE.Client.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.CardView = global::BLE.Client.Droid.Resource.Style.CardView; - global::Xamarin.Forms.Platform.Android.Resource.Style.CardView_Dark = global::BLE.Client.Droid.Resource.Style.CardView_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.CardView_Light = global::BLE.Client.Droid.Resource.Style.CardView_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Platform_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V21_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_V21_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V21_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_V21_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V25_AppCompat = global::BLE.Client.Droid.Resource.Style.Platform_V25_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V25_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Platform_V25_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Platform_Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat = global::BLE.Client.Droid.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon = global::BLE.Client.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Body1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Body1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Body2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Body2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Caption = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Caption; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display3 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display3; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display4 = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Display4; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Headline = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Headline; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Large_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Large_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Medium = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Medium; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Medium_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Medium_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Menu = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_SearchResult_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Small_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Small_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Subhead = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Subhead; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Tooltip = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Switch = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Switch; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Info = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Info; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Info_Media = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Info_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Line2_Media = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Media = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Time = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Time; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Time_Media = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Time_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Title_Media = global::BLE.Client.Droid.Resource.Style.TextAppearance_Compat_Notification_Title_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Counter = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Counter; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Counter_Overflow = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Counter_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Error = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Error; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_HelperText = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_HelperText; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Hint = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Hint; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Snackbar_Message = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Snackbar_Message; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Tab = global::BLE.Client.Droid.Resource.Style.TextAppearance_Design_Tab; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Body1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Body1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Body2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Body2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Button = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Caption = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Caption; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Chip = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Chip; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline3 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline3; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline4 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline4; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline5 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline5; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline6 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline6; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Overline = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Overline; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Subtitle1 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Subtitle2 = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Tab = global::BLE.Client.Droid.Resource.Style.TextAppearance_MaterialComponents_Tab; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title = global::BLE.Client.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_CompactMenu = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_CompactMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DayNight_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_Light_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_AppCompat_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design = global::BLE.Client.Droid.Resource.Style.Theme_Design; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_Design_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_Design_Light_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_Design_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_CompactMenu = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_CompactMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_NoActionBar = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge = global::BLE.Client.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dark = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dialog = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Light = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dark = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dialog = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Light = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_Solid; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActionMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ActivityChooserView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Borderless = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Borderless; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Borderless_Colored = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Colored = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Small = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Button_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ButtonBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ButtonBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_Switch = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_CompoundButton_Switch; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_DrawerArrowToggle = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_DrawerArrowToggle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_EditText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ImageButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ImageButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActivityChooserView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ActivityChooserView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ListPopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_ListView_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_PopupMenu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_SearchView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_SearchView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListMenuView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListMenuView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListPopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListPopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView_Menu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ListView_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupMenu = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupMenu_Overflow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupWindow = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_PopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ProgressBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ProgressBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar_Indicator = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar_Indicator; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar_Small = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_RatingBar_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SearchView = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SearchView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SearchView_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SearchView_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SeekBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SeekBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SeekBar_Discrete = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_SeekBar_Discrete; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_DropDown = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_Underlined = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Spinner_Underlined; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_TextView_SpinnerItem = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Toolbar = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation = global::BLE.Client.Droid.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Compat_NotificationActionContainer = global::BLE.Client.Droid.Resource.Style.Widget_Compat_NotificationActionContainer; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Compat_NotificationActionText = global::BLE.Client.Droid.Resource.Style.Widget_Compat_NotificationActionText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_AppBarLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_AppBarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_BottomNavigationView = global::BLE.Client.Droid.Resource.Style.Widget_Design_BottomNavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_BottomSheet_Modal = global::BLE.Client.Droid.Resource.Style.Widget_Design_BottomSheet_Modal; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_CollapsingToolbar = global::BLE.Client.Droid.Resource.Style.Widget_Design_CollapsingToolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_FloatingActionButton = global::BLE.Client.Droid.Resource.Style.Widget_Design_FloatingActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_NavigationView = global::BLE.Client.Droid.Resource.Style.Widget_Design_NavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_ScrimInsetsFrameLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_ScrimInsetsFrameLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_Snackbar = global::BLE.Client.Droid.Resource.Style.Widget_Design_Snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_TabLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_TabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_TextInputLayout = global::BLE.Client.Droid.Resource.Style.Widget_Design_TextInputLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomAppBar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomNavigationView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_CardView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_CardView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Action = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Action; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Choice = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Choice; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Entry = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Entry; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Filter = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Chip_Filter; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_ChipGroup = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_ChipGroup; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_FloatingActionButton = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_FloatingActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_NavigationView = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_NavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Snackbar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TabLayout = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TabLayout_Colored = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TabLayout_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Toolbar = global::BLE.Client.Droid.Resource.Style.Widget_MaterialComponents_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Support_CoordinatorLayout = global::BLE.Client.Droid.Resource.Style.Widget_Support_CoordinatorLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.collectionViewStyle = global::BLE.Client.Droid.Resource.Style.collectionViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar = global::BLE.Client.Droid.Resource.Styleable.ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_background = global::BLE.Client.Droid.Resource.Styleable.ActionBar_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_backgroundSplit = global::BLE.Client.Droid.Resource.Styleable.ActionBar_backgroundSplit; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_backgroundStacked = global::BLE.Client.Droid.Resource.Styleable.ActionBar_backgroundStacked; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetEnd = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetLeft = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetRight = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetStart = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Styleable.ActionBar_contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_customNavigationLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBar_customNavigationLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_displayOptions = global::BLE.Client.Droid.Resource.Styleable.ActionBar_displayOptions; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_divider = global::BLE.Client.Droid.Resource.Styleable.ActionBar_divider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_elevation = global::BLE.Client.Droid.Resource.Styleable.ActionBar_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_height = global::BLE.Client.Droid.Resource.Styleable.ActionBar_height; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_hideOnContentScroll = global::BLE.Client.Droid.Resource.Styleable.ActionBar_hideOnContentScroll; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_homeAsUpIndicator = global::BLE.Client.Droid.Resource.Styleable.ActionBar_homeAsUpIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_homeLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBar_homeLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_icon = global::BLE.Client.Droid.Resource.Styleable.ActionBar_icon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_indeterminateProgressStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_indeterminateProgressStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_itemPadding = global::BLE.Client.Droid.Resource.Styleable.ActionBar_itemPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_logo = global::BLE.Client.Droid.Resource.Styleable.ActionBar_logo; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_navigationMode = global::BLE.Client.Droid.Resource.Styleable.ActionBar_navigationMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_popupTheme = global::BLE.Client.Droid.Resource.Styleable.ActionBar_popupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_progressBarPadding = global::BLE.Client.Droid.Resource.Styleable.ActionBar_progressBarPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_progressBarStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_progressBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_subtitle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_subtitleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_subtitleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_title = global::BLE.Client.Droid.Resource.Styleable.ActionBar_title; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_titleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionBar_titleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBarLayout = global::BLE.Client.Droid.Resource.Styleable.ActionBarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBarLayout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.ActionBarLayout_android_layout_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuItemView = global::BLE.Client.Droid.Resource.Styleable.ActionMenuItemView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuItemView_android_minWidth = global::BLE.Client.Droid.Resource.Styleable.ActionMenuItemView_android_minWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuView = global::BLE.Client.Droid.Resource.Styleable.ActionMenuView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode = global::BLE.Client.Droid.Resource.Styleable.ActionMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_background = global::BLE.Client.Droid.Resource.Styleable.ActionMode_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_backgroundSplit = global::BLE.Client.Droid.Resource.Styleable.ActionMode_backgroundSplit; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_closeItemLayout = global::BLE.Client.Droid.Resource.Styleable.ActionMode_closeItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_height = global::BLE.Client.Droid.Resource.Styleable.ActionMode_height; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_subtitleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionMode_subtitleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_titleTextStyle = global::BLE.Client.Droid.Resource.Styleable.ActionMode_titleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView_initialActivityCount = global::BLE.Client.Droid.Resource.Styleable.ActivityChooserView_initialActivityCount; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog = global::BLE.Client.Droid.Resource.Styleable.AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_android_layout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_android_layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_buttonIconDimen = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_buttonIconDimen; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_buttonPanelSideLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_buttonPanelSideLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_listItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_listItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_listLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_listLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_multiChoiceItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_multiChoiceItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_showTitle = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_showTitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_singleChoiceItemLayout = global::BLE.Client.Droid.Resource.Styleable.AlertDialog_singleChoiceItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem_android_id = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_id; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId = global::BLE.Client.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_background = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_elevation = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_expanded = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_expanded; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_liftOnScroll = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_liftOnScroll; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_collapsed = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsed; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_collapsible = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_liftable = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_liftable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_lifted = global::BLE.Client.Droid.Resource.Styleable.AppBarLayoutStates_state_lifted; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator = global::BLE.Client.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_android_src = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_android_src; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_srcCompat = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_srcCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_tint = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_tint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_tintMode = global::BLE.Client.Droid.Resource.Styleable.AppCompatImageView_tintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_android_thumb = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_android_thumb; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMark = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMark; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMarkTint = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode = global::BLE.Client.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableBottom = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableEnd = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableLeft = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableRight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableStart = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableTop = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextHelper_android_textAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_android_textAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizePresetSizes = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizePresetSizes; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeTextType = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_autoSizeTextType; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_fontFamily = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_fontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_lineHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_lineHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_textAllCaps = global::BLE.Client.Droid.Resource.Styleable.AppCompatTextView_textAllCaps; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarDivider = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarDivider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarItemBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarItemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarPopupTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarPopupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarSize = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarSplitStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarSplitStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionDropDownStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionDropDownStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionMenuTextColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCutDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeCutDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeFindDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeFindDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModePasteDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModePasteDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeShareDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeShareDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeSplitBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeSplitBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_activityChooserViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_activityChooserViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_alertDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_android_windowIsFloating = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_android_windowIsFloating; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_borderlessButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_borderlessButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonStyleSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_buttonStyleSmall; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_checkboxStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_checkboxStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_checkedTextViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_checkedTextViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorAccent = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorAccent; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorBackgroundFloating = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorBackgroundFloating; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorButtonNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorButtonNormal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlActivated = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlActivated; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlHighlight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlHighlight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorControlNormal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorError = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorError; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorPrimary = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorPrimary; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorPrimaryDark = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorPrimaryDark; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_controlBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_controlBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogCornerRadius = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogPreferredPadding = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogPreferredPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dividerHorizontal = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dividerHorizontal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dividerVertical = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dividerVertical; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dropDownListViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dropDownListViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_editTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_homeAsUpIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_homeAsUpIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_imageButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_imageButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listDividerAlertDialog = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listDividerAlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listMenuViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listMenuViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPopupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPopupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelMenuListTheme = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelMenuListTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelMenuListWidth = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_panelMenuListWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_popupMenuStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_popupMenuStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_popupWindowStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_popupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_radioButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_radioButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_searchViewStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_searchViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_seekBarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_seekBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_selectableItemBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_spinnerStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_spinnerStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_switchStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_switchStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItem = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textColorSearchUrl = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_textColorSearchUrl; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_toolbarStyle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_toolbarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_tooltipForegroundColor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_tooltipForegroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_tooltipFrameBackground = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_tooltipFrameBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_viewInflaterClass = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_viewInflaterClass; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionBar = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionBarOverlay = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionBarOverlay; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionModeOverlay = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowActionModeOverlay; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowMinWidthMajor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMajor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowMinWidthMinor = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMinor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowNoTitle = global::BLE.Client.Droid.Resource.Styleable.AppCompatTheme_windowNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabAlignmentMode = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabAlignmentMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleMargin = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_hideOnScroll = global::BLE.Client.Droid.Resource.Styleable.BottomAppBar_hideOnScroll; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_elevation = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemBackground = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemIconSize = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemIconTint = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextColor = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_itemTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_labelVisibilityMode = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_labelVisibilityMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_menu = global::BLE.Client.Droid.Resource.Styleable.BottomNavigationView_menu; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed = global::BLE.Client.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ButtonBarLayout = global::BLE.Client.Droid.Resource.Styleable.ButtonBarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ButtonBarLayout_allowStacking = global::BLE.Client.Droid.Resource.Styleable.ButtonBarLayout_allowStacking; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView = global::BLE.Client.Droid.Resource.Styleable.CardView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_android_minHeight = global::BLE.Client.Droid.Resource.Styleable.CardView_android_minHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_android_minWidth = global::BLE.Client.Droid.Resource.Styleable.CardView_android_minWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.CardView_cardBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardCornerRadius = global::BLE.Client.Droid.Resource.Styleable.CardView_cardCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardElevation = global::BLE.Client.Droid.Resource.Styleable.CardView_cardElevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardMaxElevation = global::BLE.Client.Droid.Resource.Styleable.CardView_cardMaxElevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardPreventCornerOverlap = global::BLE.Client.Droid.Resource.Styleable.CardView_cardPreventCornerOverlap; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardUseCompatPadding = global::BLE.Client.Droid.Resource.Styleable.CardView_cardUseCompatPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPadding = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingBottom = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingLeft = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingRight = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingTop = global::BLE.Client.Droid.Resource.Styleable.CardView_contentPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip = global::BLE.Client.Droid.Resource.Styleable.Chip; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_checkable = global::BLE.Client.Droid.Resource.Styleable.Chip_android_checkable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_ellipsize = global::BLE.Client.Droid.Resource.Styleable.Chip_android_ellipsize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.Chip_android_maxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_text = global::BLE.Client.Droid.Resource.Styleable.Chip_android_text; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.Chip_android_textAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_checkedIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.Chip_chipBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipCornerRadius = global::BLE.Client.Droid.Resource.Styleable.Chip_chipCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_chipEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconSize = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconTint = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_chipIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipMinHeight = global::BLE.Client.Droid.Resource.Styleable.Chip_chipMinHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStrokeColor = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStrokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStrokeWidth = global::BLE.Client.Droid.Resource.Styleable.Chip_chipStrokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIcon = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconEnabled = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconSize = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconTint = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconVisible = global::BLE.Client.Droid.Resource.Styleable.Chip_closeIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_hideMotionSpec = global::BLE.Client.Droid.Resource.Styleable.Chip_hideMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_iconEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_iconEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_iconStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_iconStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_rippleColor = global::BLE.Client.Droid.Resource.Styleable.Chip_rippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_showMotionSpec = global::BLE.Client.Droid.Resource.Styleable.Chip_showMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_textEndPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_textEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_textStartPadding = global::BLE.Client.Droid.Resource.Styleable.Chip_textStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup = global::BLE.Client.Droid.Resource.Styleable.ChipGroup; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_checkedChip = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_checkedChip; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacing = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacingHorizontal = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacingHorizontal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacingVertical = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_chipSpacingVertical; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_singleLine = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_singleLine; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_singleSelection = global::BLE.Client.Droid.Resource.Styleable.ChipGroup_singleSelection; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_contentScrim = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_contentScrim; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_title = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_title; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_titleEnabled = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_titleEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_toolbarId = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_toolbarId; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = global::BLE.Client.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_alpha = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_android_alpha = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_android_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_android_color = global::BLE.Client.Droid.Resource.Styleable.ColorStateListItem_android_color; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton = global::BLE.Client.Droid.Resource.Styleable.CompoundButton; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_android_button = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_android_button; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_buttonTint = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_buttonTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_buttonTintMode = global::BLE.Client.Droid.Resource.Styleable.CompoundButton_buttonTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_keylines = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_keylines; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::BLE.Client.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme = global::BLE.Client.Droid.Resource.Styleable.DesignTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme_bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Styleable.DesignTheme_bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme_bottomSheetStyle = global::BLE.Client.Droid.Resource.Styleable.DesignTheme_bottomSheetStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_arrowHeadLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_arrowHeadLength; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_arrowShaftLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_arrowShaftLength; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_barLength = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_barLength; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_color = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_color; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_drawableSize = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_drawableSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_gapBetweenBars = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_gapBetweenBars; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_spinBars = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_spinBars; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_thickness = global::BLE.Client.Droid.Resource.Styleable.DrawerArrowToggle_thickness; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_backgroundTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_borderWidth = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_borderWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_elevation = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_fabCustomSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_fabCustomSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_fabSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_fabSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_hideMotionSpec = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_hideMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_maxImageSize = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_maxImageSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_pressedTranslationZ = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_pressedTranslationZ; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_rippleColor = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_rippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_showMotionSpec = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_showMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_useCompatPadding = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_useCompatPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_Behavior_Layout = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide = global::BLE.Client.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout = global::BLE.Client.Droid.Resource.Styleable.FlowLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout_itemSpacing = global::BLE.Client.Droid.Resource.Styleable.FlowLayout_itemSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout_lineSpacing = global::BLE.Client.Droid.Resource.Styleable.FlowLayout_lineSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily = global::BLE.Client.Droid.Resource.Styleable.FontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderAuthority = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderAuthority; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderCerts = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderCerts; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderPackage = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderPackage; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderQuery = global::BLE.Client.Droid.Resource.Styleable.FontFamily_fontProviderQuery; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_font = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_font; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontStyle = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontWeight = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_font = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_font; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontStyle = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontWeight = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_fontWeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_ttcIndex = global::BLE.Client.Droid.Resource.Styleable.FontFamilyFont_ttcIndex; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_android_foreground = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_android_foreground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding = global::BLE.Client.Droid.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerX; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_centerY; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endX; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_endY; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_gradientRadius = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_gradientRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startColor = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startX = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startX; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startY = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_startY; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_tileMode = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_tileMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_type = global::BLE.Client.Droid.Resource.Styleable.GradientColor_android_type; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem_android_color = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem_android_color; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem_android_offset = global::BLE.Client.Droid.Resource.Styleable.GradientColorItem_android_offset; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_baselineAligned = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAligned; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_gravity = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_orientation = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_orientation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_weightSum = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_android_weightSum; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_divider = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_divider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_dividerPadding = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_dividerPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_showDividers = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_showDividers; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width = global::BLE.Client.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset = global::BLE.Client.Droid.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton = global::BLE.Client.Droid.Resource.Styleable.MaterialButton; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetBottom = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetLeft = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetRight = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetTop = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_android_insetTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_backgroundTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_cornerRadius = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_cornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_icon = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_icon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconGravity = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconPadding = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconSize = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconTint = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconTintMode = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_iconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_rippleColor = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_rippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_strokeColor = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_strokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_strokeWidth = global::BLE.Client.Droid.Resource.Styleable.MaterialButton_strokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView_strokeColor = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView_strokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView_strokeWidth = global::BLE.Client.Droid.Resource.Styleable.MaterialCardView_strokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_chipStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorAccent = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorAccent; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorPrimary = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimary; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorSecondary = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_colorSecondary; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_editTextStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_editTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_scrimBackground = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_scrimBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_tabStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_tabStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2 = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textInputStyle = global::BLE.Client.Droid.Resource.Styleable.MaterialComponentsTheme_textInputStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup = global::BLE.Client.Droid.Resource.Styleable.MenuGroup; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_checkableBehavior = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_checkableBehavior; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_enabled = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_enabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_id = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_id; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_menuCategory = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_menuCategory; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_orderInCategory = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_orderInCategory; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_visible = global::BLE.Client.Droid.Resource.Styleable.MenuGroup_android_visible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem = global::BLE.Client.Droid.Resource.Styleable.MenuItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionLayout = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionProviderClass = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionProviderClass; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionViewClass = global::BLE.Client.Droid.Resource.Styleable.MenuItem_actionViewClass; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_alphabeticModifiers = global::BLE.Client.Droid.Resource.Styleable.MenuItem_alphabeticModifiers; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_alphabeticShortcut = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_alphabeticShortcut; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_checkable = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_checkable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_checked = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_checked; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_enabled = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_enabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_icon = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_icon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_id = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_id; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_menuCategory = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_menuCategory; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_numericShortcut = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_numericShortcut; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_onClick = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_onClick; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_orderInCategory = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_orderInCategory; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_title = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_title; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_titleCondensed = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_titleCondensed; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_visible = global::BLE.Client.Droid.Resource.Styleable.MenuItem_android_visible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_contentDescription = global::BLE.Client.Droid.Resource.Styleable.MenuItem_contentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_iconTint = global::BLE.Client.Droid.Resource.Styleable.MenuItem_iconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_iconTintMode = global::BLE.Client.Droid.Resource.Styleable.MenuItem_iconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_numericModifiers = global::BLE.Client.Droid.Resource.Styleable.MenuItem_numericModifiers; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_showAsAction = global::BLE.Client.Droid.Resource.Styleable.MenuItem_showAsAction; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_tooltipText = global::BLE.Client.Droid.Resource.Styleable.MenuItem_tooltipText; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView = global::BLE.Client.Droid.Resource.Styleable.MenuView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_headerBackground = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_headerBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_horizontalDivider = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_horizontalDivider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemBackground = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemIconDisabledAlpha = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemIconDisabledAlpha; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemTextAppearance = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_itemTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_verticalDivider = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_verticalDivider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_windowAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.MenuView_android_windowAnimationStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_preserveIconSpacing = global::BLE.Client.Droid.Resource.Styleable.MenuView_preserveIconSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_subMenuArrow = global::BLE.Client.Droid.Resource.Styleable.MenuView_subMenuArrow; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView = global::BLE.Client.Droid.Resource.Styleable.NavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_background = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_fitsSystemWindows = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_fitsSystemWindows; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.NavigationView_android_maxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_elevation = global::BLE.Client.Droid.Resource.Styleable.NavigationView_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_headerLayout = global::BLE.Client.Droid.Resource.Styleable.NavigationView_headerLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemBackground = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemHorizontalPadding = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemHorizontalPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemIconPadding = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemIconPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemIconTint = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemTextAppearance = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemTextColor = global::BLE.Client.Droid.Resource.Styleable.NavigationView_itemTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_menu = global::BLE.Client.Droid.Resource.Styleable.NavigationView_menu; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow = global::BLE.Client.Droid.Resource.Styleable.PopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_android_popupAnimationStyle = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_android_popupAnimationStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_android_popupBackground = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_android_popupBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_overlapAnchor = global::BLE.Client.Droid.Resource.Styleable.PopupWindow_overlapAnchor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindowBackgroundState = global::BLE.Client.Droid.Resource.Styleable.PopupWindowBackgroundState; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor = global::BLE.Client.Droid.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView = global::BLE.Client.Droid.Resource.Styleable.RecycleListView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView_paddingBottomNoButtons = global::BLE.Client.Droid.Resource.Styleable.RecycleListView_paddingBottomNoButtons; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView_paddingTopNoTitle = global::BLE.Client.Droid.Resource.Styleable.RecycleListView_paddingTopNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView = global::BLE.Client.Droid.Resource.Styleable.RecyclerView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_android_descendantFocusability = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_android_descendantFocusability; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_android_orientation = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_android_orientation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollEnabled = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_layoutManager = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_layoutManager; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_reverseLayout = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_reverseLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_spanCount = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_spanCount; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_stackFromEnd = global::BLE.Client.Droid.Resource.Styleable.RecyclerView_stackFromEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrimInsetsFrameLayout = global::BLE.Client.Droid.Resource.Styleable.ScrimInsetsFrameLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground = global::BLE.Client.Droid.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrollingViewBehavior_Layout = global::BLE.Client.Droid.Resource.Styleable.ScrollingViewBehavior_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop = global::BLE.Client.Droid.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView = global::BLE.Client.Droid.Resource.Styleable.SearchView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_focusable = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_focusable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_imeOptions = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_imeOptions; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_inputType = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_inputType; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.SearchView_android_maxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_closeIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_closeIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_commitIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_commitIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_defaultQueryHint = global::BLE.Client.Droid.Resource.Styleable.SearchView_defaultQueryHint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_goIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_goIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_iconifiedByDefault = global::BLE.Client.Droid.Resource.Styleable.SearchView_iconifiedByDefault; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_layout = global::BLE.Client.Droid.Resource.Styleable.SearchView_layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_queryBackground = global::BLE.Client.Droid.Resource.Styleable.SearchView_queryBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_queryHint = global::BLE.Client.Droid.Resource.Styleable.SearchView_queryHint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_searchHintIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_searchHintIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_searchIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_searchIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_submitBackground = global::BLE.Client.Droid.Resource.Styleable.SearchView_submitBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_suggestionRowLayout = global::BLE.Client.Droid.Resource.Styleable.SearchView_suggestionRowLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_voiceIcon = global::BLE.Client.Droid.Resource.Styleable.SearchView_voiceIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar = global::BLE.Client.Droid.Resource.Styleable.Snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar_snackbarButtonStyle = global::BLE.Client.Droid.Resource.Styleable.Snackbar_snackbarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar_snackbarStyle = global::BLE.Client.Droid.Resource.Styleable.Snackbar_snackbarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_android_maxWidth = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_android_maxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_elevation = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_maxActionInlineWidth = global::BLE.Client.Droid.Resource.Styleable.SnackbarLayout_maxActionInlineWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner = global::BLE.Client.Droid.Resource.Styleable.Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_dropDownWidth = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_dropDownWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_entries = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_entries; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_popupBackground = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_popupBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_prompt = global::BLE.Client.Droid.Resource.Styleable.Spinner_android_prompt; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_popupTheme = global::BLE.Client.Droid.Resource.Styleable.Spinner_popupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_constantSize = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_constantSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_dither = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_dither; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_enterFadeDuration = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_enterFadeDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_exitFadeDuration = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_exitFadeDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_variablePadding = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_variablePadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_visible = global::BLE.Client.Droid.Resource.Styleable.StateListDrawable_android_visible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawableItem = global::BLE.Client.Droid.Resource.Styleable.StateListDrawableItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawableItem_android_drawable = global::BLE.Client.Droid.Resource.Styleable.StateListDrawableItem_android_drawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_textOff = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_textOff; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_textOn = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_textOn; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_thumb = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_android_thumb; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_showText = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_showText; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_splitTrack = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_splitTrack; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchMinWidth = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchMinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchPadding = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchTextAppearance = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_switchTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTextPadding = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTextPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTint = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTintMode = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_thumbTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_track = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_track; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_trackTint = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_trackTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_trackTintMode = global::BLE.Client.Droid.Resource.Styleable.SwitchCompat_trackTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem = global::BLE.Client.Droid.Resource.Styleable.TabItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_icon = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_icon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_layout = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_text = global::BLE.Client.Droid.Resource.Styleable.TabItem_android_text; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout = global::BLE.Client.Droid.Resource.Styleable.TabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabBackground = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabContentStart = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabContentStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabGravity = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIconTint = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIconTintMode = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicator = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorFullWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorFullWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorGravity = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorHeight = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabIndicatorHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabInlineLabel = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabInlineLabel; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMaxWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMaxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMinWidth = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMode = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPadding = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingBottom = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingEnd = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingStart = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingTop = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabRippleColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabRippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabSelectedTextColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabSelectedTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabTextColor = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabUnboundedRipple = global::BLE.Client.Droid.Resource.Styleable.TabLayout_tabUnboundedRipple; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_fontFamily = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_fontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowColor = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowDx = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowDx; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowDy = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowDy; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowRadius = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_shadowRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColor = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColorHint = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColorHint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColorLink = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textColorLink; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textSize = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textStyle = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_textStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_typeface = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_android_typeface; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_fontFamily = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_fontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_textAllCaps = global::BLE.Client.Droid.Resource.Styleable.TextAppearance_textAllCaps; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_android_hint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_android_hint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_android_textColorHint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_android_textColorHint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxBackgroundColor = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxBackgroundMode = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxBackgroundMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxStrokeColor = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxStrokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxStrokeWidth = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_boxStrokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterMaxLength = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterMaxLength; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_counterTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_errorEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_errorEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_errorTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_errorTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperText = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperText; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperTextEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperTextEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperTextTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_helperTextTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintAnimationEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintAnimationEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintTextAppearance = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_hintTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleContentDescription = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleDrawable = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleEnabled = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleTint = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleTintMode = global::BLE.Client.Droid.Resource.Styleable.TextInputLayout_passwordToggleTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_android_textAppearance = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_android_textAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_enforceTextAppearance = global::BLE.Client.Droid.Resource.Styleable.ThemeEnforcement_enforceTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar = global::BLE.Client.Droid.Resource.Styleable.Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_android_gravity = global::BLE.Client.Droid.Resource.Styleable.Toolbar_android_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_android_minHeight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_android_minHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_buttonGravity = global::BLE.Client.Droid.Resource.Styleable.Toolbar_buttonGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_collapseContentDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_collapseContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_collapseIcon = global::BLE.Client.Droid.Resource.Styleable.Toolbar_collapseIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetEnd = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetEndWithActions = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetLeft = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetRight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetStart = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetStartWithNavigation = global::BLE.Client.Droid.Resource.Styleable.Toolbar_contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_logo = global::BLE.Client.Droid.Resource.Styleable.Toolbar_logo; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_logoDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_logoDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_maxButtonHeight = global::BLE.Client.Droid.Resource.Styleable.Toolbar_maxButtonHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_navigationContentDescription = global::BLE.Client.Droid.Resource.Styleable.Toolbar_navigationContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_navigationIcon = global::BLE.Client.Droid.Resource.Styleable.Toolbar_navigationIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_popupTheme = global::BLE.Client.Droid.Resource.Styleable.Toolbar_popupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitle = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitleTextColor = global::BLE.Client.Droid.Resource.Styleable.Toolbar_subtitleTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_title = global::BLE.Client.Droid.Resource.Styleable.Toolbar_title; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMargin = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginBottom = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginEnd = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginStart = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginTop = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMarginTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMargins = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleMargins; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleTextAppearance = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleTextColor = global::BLE.Client.Droid.Resource.Styleable.Toolbar_titleTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View = global::BLE.Client.Droid.Resource.Styleable.View; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_android_focusable = global::BLE.Client.Droid.Resource.Styleable.View_android_focusable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_android_theme = global::BLE.Client.Droid.Resource.Styleable.View_android_theme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_paddingEnd = global::BLE.Client.Droid.Resource.Styleable.View_paddingEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_paddingStart = global::BLE.Client.Droid.Resource.Styleable.View_paddingStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_theme = global::BLE.Client.Droid.Resource.Styleable.View_theme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_android_background = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_android_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_backgroundTint = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode = global::BLE.Client.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_id = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_id; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_inflatedId = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_inflatedId; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_layout = global::BLE.Client.Droid.Resource.Styleable.ViewStubCompat_android_layout; - } - - public partial class Animation - { - - // aapt resource value: 0x7f040000 - public const int abc_fade_in = 2130968576; - - // aapt resource value: 0x7f040001 - public const int abc_fade_out = 2130968577; - - // aapt resource value: 0x7f040002 - public const int abc_grow_fade_in_from_bottom = 2130968578; - - // aapt resource value: 0x7f040003 - public const int abc_popup_enter = 2130968579; - - // aapt resource value: 0x7f040004 - public const int abc_popup_exit = 2130968580; - - // aapt resource value: 0x7f040005 - public const int abc_shrink_fade_out_from_bottom = 2130968581; - - // aapt resource value: 0x7f040006 - public const int abc_slide_in_bottom = 2130968582; - - // aapt resource value: 0x7f040007 - public const int abc_slide_in_top = 2130968583; - - // aapt resource value: 0x7f040008 - public const int abc_slide_out_bottom = 2130968584; - - // aapt resource value: 0x7f040009 - public const int abc_slide_out_top = 2130968585; - - // aapt resource value: 0x7f04000a - public const int abc_tooltip_enter = 2130968586; - - // aapt resource value: 0x7f04000b - public const int abc_tooltip_exit = 2130968587; - - // aapt resource value: 0x7f04000c - public const int design_bottom_sheet_slide_in = 2130968588; - - // aapt resource value: 0x7f04000d - public const int design_bottom_sheet_slide_out = 2130968589; - - // aapt resource value: 0x7f04000e - public const int design_snackbar_in = 2130968590; - - // aapt resource value: 0x7f04000f - public const int design_snackbar_out = 2130968591; - - // aapt resource value: 0x7f040010 - public const int EnterFromLeft = 2130968592; - - // aapt resource value: 0x7f040011 - public const int EnterFromRight = 2130968593; - - // aapt resource value: 0x7f040012 - public const int ExitToLeft = 2130968594; - - // aapt resource value: 0x7f040013 - public const int ExitToRight = 2130968595; - - static Animation() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Animation() - { - } - } - - public partial class Animator - { - - // aapt resource value: 0x7f050000 - public const int design_appbar_state_list_animator = 2131034112; - - // aapt resource value: 0x7f050001 - public const int design_fab_hide_motion_spec = 2131034113; - - // aapt resource value: 0x7f050002 - public const int design_fab_show_motion_spec = 2131034114; - - // aapt resource value: 0x7f050003 - public const int mtrl_btn_state_list_anim = 2131034115; - - // aapt resource value: 0x7f050004 - public const int mtrl_btn_unelevated_state_list_anim = 2131034116; - - // aapt resource value: 0x7f050005 - public const int mtrl_chip_state_list_anim = 2131034117; - - // aapt resource value: 0x7f050006 - public const int mtrl_fab_hide_motion_spec = 2131034118; - - // aapt resource value: 0x7f050007 - public const int mtrl_fab_show_motion_spec = 2131034119; - - // aapt resource value: 0x7f050008 - public const int mtrl_fab_transformation_sheet_collapse_spec = 2131034120; - - // aapt resource value: 0x7f050009 - public const int mtrl_fab_transformation_sheet_expand_spec = 2131034121; - - static Animator() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Animator() - { - } - } - - public partial class Attribute - { - - // aapt resource value: 0x7f0101eb - public const int MvxBind = 2130772459; - - // aapt resource value: 0x7f0101ef - public const int MvxDropDownItemTemplate = 2130772463; - - // aapt resource value: 0x7f0101f0 - public const int MvxGroupItemTemplate = 2130772464; - - // aapt resource value: 0x7f0101ee - public const int MvxItemTemplate = 2130772462; - - // aapt resource value: 0x7f0101ec - public const int MvxLang = 2130772460; - - // aapt resource value: 0x7f0101ed - public const int MvxTemplate = 2130772461; - - // aapt resource value: 0x7f010070 - public const int actionBarDivider = 2130772080; - - // aapt resource value: 0x7f010071 - public const int actionBarItemBackground = 2130772081; - - // aapt resource value: 0x7f01006a - public const int actionBarPopupTheme = 2130772074; - - // aapt resource value: 0x7f01006f - public const int actionBarSize = 2130772079; - - // aapt resource value: 0x7f01006c - public const int actionBarSplitStyle = 2130772076; - - // aapt resource value: 0x7f01006b - public const int actionBarStyle = 2130772075; - - // aapt resource value: 0x7f010066 - public const int actionBarTabBarStyle = 2130772070; - - // aapt resource value: 0x7f010065 - public const int actionBarTabStyle = 2130772069; - - // aapt resource value: 0x7f010067 - public const int actionBarTabTextStyle = 2130772071; - - // aapt resource value: 0x7f01006d - public const int actionBarTheme = 2130772077; - - // aapt resource value: 0x7f01006e - public const int actionBarWidgetTheme = 2130772078; - - // aapt resource value: 0x7f01008c - public const int actionButtonStyle = 2130772108; - - // aapt resource value: 0x7f010088 - public const int actionDropDownStyle = 2130772104; - - // aapt resource value: 0x7f0100e3 - public const int actionLayout = 2130772195; - - // aapt resource value: 0x7f010072 - public const int actionMenuTextAppearance = 2130772082; - - // aapt resource value: 0x7f010073 - public const int actionMenuTextColor = 2130772083; - - // aapt resource value: 0x7f010076 - public const int actionModeBackground = 2130772086; - - // aapt resource value: 0x7f010075 - public const int actionModeCloseButtonStyle = 2130772085; - - // aapt resource value: 0x7f010078 - public const int actionModeCloseDrawable = 2130772088; - - // aapt resource value: 0x7f01007a - public const int actionModeCopyDrawable = 2130772090; - - // aapt resource value: 0x7f010079 - public const int actionModeCutDrawable = 2130772089; - - // aapt resource value: 0x7f01007e - public const int actionModeFindDrawable = 2130772094; - - // aapt resource value: 0x7f01007b - public const int actionModePasteDrawable = 2130772091; - - // aapt resource value: 0x7f010080 - public const int actionModePopupWindowStyle = 2130772096; - - // aapt resource value: 0x7f01007c - public const int actionModeSelectAllDrawable = 2130772092; - - // aapt resource value: 0x7f01007d - public const int actionModeShareDrawable = 2130772093; - - // aapt resource value: 0x7f010077 - public const int actionModeSplitBackground = 2130772087; - - // aapt resource value: 0x7f010074 - public const int actionModeStyle = 2130772084; - - // aapt resource value: 0x7f01007f - public const int actionModeWebSearchDrawable = 2130772095; - - // aapt resource value: 0x7f010068 - public const int actionOverflowButtonStyle = 2130772072; - - // aapt resource value: 0x7f010069 - public const int actionOverflowMenuStyle = 2130772073; - - // aapt resource value: 0x7f0100e5 - public const int actionProviderClass = 2130772197; - - // aapt resource value: 0x7f0100e4 - public const int actionViewClass = 2130772196; - - // aapt resource value: 0x7f010094 - public const int activityChooserViewStyle = 2130772116; - - // aapt resource value: 0x7f0101f4 - public const int ahBarColor = 2130772468; - - // aapt resource value: 0x7f0101fc - public const int ahBarLength = 2130772476; - - // aapt resource value: 0x7f0101fb - public const int ahBarWidth = 2130772475; - - // aapt resource value: 0x7f0101f9 - public const int ahCircleColor = 2130772473; - - // aapt resource value: 0x7f0101f8 - public const int ahDelayMillis = 2130772472; - - // aapt resource value: 0x7f0101fa - public const int ahRadius = 2130772474; - - // aapt resource value: 0x7f0101f5 - public const int ahRimColor = 2130772469; - - // aapt resource value: 0x7f0101f6 - public const int ahRimWidth = 2130772470; - - // aapt resource value: 0x7f0101f7 - public const int ahSpinSpeed = 2130772471; - - // aapt resource value: 0x7f0101f1 - public const int ahText = 2130772465; - - // aapt resource value: 0x7f0101f2 - public const int ahTextColor = 2130772466; - - // aapt resource value: 0x7f0101f3 - public const int ahTextSize = 2130772467; - - // aapt resource value: 0x7f0100b9 - public const int alertDialogButtonGroupStyle = 2130772153; - - // aapt resource value: 0x7f0100ba - public const int alertDialogCenterButtons = 2130772154; - - // aapt resource value: 0x7f0100b8 - public const int alertDialogStyle = 2130772152; - - // aapt resource value: 0x7f0100bb - public const int alertDialogTheme = 2130772155; - - // aapt resource value: 0x7f0100d2 - public const int allowStacking = 2130772178; - - // aapt resource value: 0x7f0101df - public const int alpha = 2130772447; - - // aapt resource value: 0x7f0100e0 - public const int alphabeticModifiers = 2130772192; - - // aapt resource value: 0x7f0100d9 - public const int arrowHeadLength = 2130772185; - - // aapt resource value: 0x7f0100da - public const int arrowShaftLength = 2130772186; - - // aapt resource value: 0x7f0100c0 - public const int autoCompleteTextViewStyle = 2130772160; - - // aapt resource value: 0x7f010056 - public const int autoSizeMaxTextSize = 2130772054; - - // aapt resource value: 0x7f010055 - public const int autoSizeMinTextSize = 2130772053; - - // aapt resource value: 0x7f010054 - public const int autoSizePresetSizes = 2130772052; - - // aapt resource value: 0x7f010053 - public const int autoSizeStepGranularity = 2130772051; - - // aapt resource value: 0x7f010052 - public const int autoSizeTextType = 2130772050; - - // aapt resource value: 0x7f01002f - public const int background = 2130772015; - - // aapt resource value: 0x7f010031 - public const int backgroundSplit = 2130772017; - - // aapt resource value: 0x7f010030 - public const int backgroundStacked = 2130772016; - - // aapt resource value: 0x7f01011c - public const int backgroundTint = 2130772252; - - // aapt resource value: 0x7f01011d - public const int backgroundTintMode = 2130772253; - - // aapt resource value: 0x7f0100db - public const int barLength = 2130772187; - - // aapt resource value: 0x7f01018c - public const int behavior_autoHide = 2130772364; - - // aapt resource value: 0x7f010154 - public const int behavior_fitToContents = 2130772308; - - // aapt resource value: 0x7f010152 - public const int behavior_hideable = 2130772306; - - // aapt resource value: 0x7f01019d - public const int behavior_overlapTop = 2130772381; - - // aapt resource value: 0x7f010151 - public const int behavior_peekHeight = 2130772305; - - // aapt resource value: 0x7f010153 - public const int behavior_skipCollapsed = 2130772307; - - // aapt resource value: 0x7f010189 - public const int borderWidth = 2130772361; - - // aapt resource value: 0x7f010091 - public const int borderlessButtonStyle = 2130772113; - - // aapt resource value: 0x7f01011e - public const int bottomAppBarStyle = 2130772254; - - // aapt resource value: 0x7f01011f - public const int bottomNavigationStyle = 2130772255; - - // aapt resource value: 0x7f010120 - public const int bottomSheetDialogTheme = 2130772256; - - // aapt resource value: 0x7f010121 - public const int bottomSheetStyle = 2130772257; - - // aapt resource value: 0x7f0101d2 - public const int boxBackgroundColor = 2130772434; - - // aapt resource value: 0x7f0101cb - public const int boxBackgroundMode = 2130772427; - - // aapt resource value: 0x7f0101cc - public const int boxCollapsedPaddingTop = 2130772428; - - // aapt resource value: 0x7f0101d0 - public const int boxCornerRadiusBottomEnd = 2130772432; - - // aapt resource value: 0x7f0101cf - public const int boxCornerRadiusBottomStart = 2130772431; - - // aapt resource value: 0x7f0101ce - public const int boxCornerRadiusTopEnd = 2130772430; - - // aapt resource value: 0x7f0101cd - public const int boxCornerRadiusTopStart = 2130772429; - - // aapt resource value: 0x7f0101d1 - public const int boxStrokeColor = 2130772433; - - // aapt resource value: 0x7f0101d3 - public const int boxStrokeWidth = 2130772435; - - // aapt resource value: 0x7f01008e - public const int buttonBarButtonStyle = 2130772110; - - // aapt resource value: 0x7f0100be - public const int buttonBarNegativeButtonStyle = 2130772158; - - // aapt resource value: 0x7f0100bf - public const int buttonBarNeutralButtonStyle = 2130772159; - - // aapt resource value: 0x7f0100bd - public const int buttonBarPositiveButtonStyle = 2130772157; - - // aapt resource value: 0x7f01008d - public const int buttonBarStyle = 2130772109; - - // aapt resource value: 0x7f010111 - public const int buttonGravity = 2130772241; - - // aapt resource value: 0x7f01004a - public const int buttonIconDimen = 2130772042; - - // aapt resource value: 0x7f010044 - public const int buttonPanelSideLayout = 2130772036; - - // aapt resource value: 0x7f0100c1 - public const int buttonStyle = 2130772161; - - // aapt resource value: 0x7f0100c2 - public const int buttonStyleSmall = 2130772162; - - // aapt resource value: 0x7f0100d3 - public const int buttonTint = 2130772179; - - // aapt resource value: 0x7f0100d4 - public const int buttonTintMode = 2130772180; - - // aapt resource value: 0x7f010018 - public const int cardBackgroundColor = 2130771992; - - // aapt resource value: 0x7f010019 - public const int cardCornerRadius = 2130771993; - - // aapt resource value: 0x7f01001a - public const int cardElevation = 2130771994; - - // aapt resource value: 0x7f01001b - public const int cardMaxElevation = 2130771995; - - // aapt resource value: 0x7f01001d - public const int cardPreventCornerOverlap = 2130771997; - - // aapt resource value: 0x7f01001c - public const int cardUseCompatPadding = 2130771996; - - // aapt resource value: 0x7f010017 - public const int cardViewStyle = 2130771991; - - // aapt resource value: 0x7f0100c3 - public const int checkboxStyle = 2130772163; - - // aapt resource value: 0x7f010173 - public const int checkedChip = 2130772339; - - // aapt resource value: 0x7f010165 - public const int checkedIcon = 2130772325; - - // aapt resource value: 0x7f010164 - public const int checkedIconEnabled = 2130772324; - - // aapt resource value: 0x7f010163 - public const int checkedIconVisible = 2130772323; - - // aapt resource value: 0x7f0100c4 - public const int checkedTextViewStyle = 2130772164; - - // aapt resource value: 0x7f010155 - public const int chipBackgroundColor = 2130772309; - - // aapt resource value: 0x7f010157 - public const int chipCornerRadius = 2130772311; - - // aapt resource value: 0x7f01016d - public const int chipEndPadding = 2130772333; - - // aapt resource value: 0x7f010122 - public const int chipGroupStyle = 2130772258; - - // aapt resource value: 0x7f01015c - public const int chipIcon = 2130772316; - - // aapt resource value: 0x7f01015b - public const int chipIconEnabled = 2130772315; - - // aapt resource value: 0x7f01015e - public const int chipIconSize = 2130772318; - - // aapt resource value: 0x7f01015d - public const int chipIconTint = 2130772317; - - // aapt resource value: 0x7f01015a - public const int chipIconVisible = 2130772314; - - // aapt resource value: 0x7f010156 - public const int chipMinHeight = 2130772310; - - // aapt resource value: 0x7f01016e - public const int chipSpacing = 2130772334; - - // aapt resource value: 0x7f01016f - public const int chipSpacingHorizontal = 2130772335; - - // aapt resource value: 0x7f010170 - public const int chipSpacingVertical = 2130772336; - - // aapt resource value: 0x7f010123 - public const int chipStandaloneStyle = 2130772259; - - // aapt resource value: 0x7f010166 - public const int chipStartPadding = 2130772326; - - // aapt resource value: 0x7f010158 - public const int chipStrokeColor = 2130772312; - - // aapt resource value: 0x7f010159 - public const int chipStrokeWidth = 2130772313; - - // aapt resource value: 0x7f010124 - public const int chipStyle = 2130772260; - - // aapt resource value: 0x7f0100f4 - public const int closeIcon = 2130772212; - - // aapt resource value: 0x7f010160 - public const int closeIconEnabled = 2130772320; - - // aapt resource value: 0x7f01016c - public const int closeIconEndPadding = 2130772332; - - // aapt resource value: 0x7f010162 - public const int closeIconSize = 2130772322; - - // aapt resource value: 0x7f01016b - public const int closeIconStartPadding = 2130772331; - - // aapt resource value: 0x7f010161 - public const int closeIconTint = 2130772321; - - // aapt resource value: 0x7f01015f - public const int closeIconVisible = 2130772319; - - // aapt resource value: 0x7f010041 - public const int closeItemLayout = 2130772033; - - // aapt resource value: 0x7f010113 - public const int collapseContentDescription = 2130772243; - - // aapt resource value: 0x7f010112 - public const int collapseIcon = 2130772242; - - // aapt resource value: 0x7f010180 - public const int collapsedTitleGravity = 2130772352; - - // aapt resource value: 0x7f01017a - public const int collapsedTitleTextAppearance = 2130772346; - - // aapt resource value: 0x7f0100d5 - public const int color = 2130772181; - - // aapt resource value: 0x7f0100b0 - public const int colorAccent = 2130772144; - - // aapt resource value: 0x7f0100b7 - public const int colorBackgroundFloating = 2130772151; - - // aapt resource value: 0x7f0100b4 - public const int colorButtonNormal = 2130772148; - - // aapt resource value: 0x7f0100b2 - public const int colorControlActivated = 2130772146; - - // aapt resource value: 0x7f0100b3 - public const int colorControlHighlight = 2130772147; - - // aapt resource value: 0x7f0100b1 - public const int colorControlNormal = 2130772145; - - // aapt resource value: 0x7f0100d0 - public const int colorError = 2130772176; - - // aapt resource value: 0x7f0100ae - public const int colorPrimary = 2130772142; - - // aapt resource value: 0x7f0100af - public const int colorPrimaryDark = 2130772143; - - // aapt resource value: 0x7f010125 - public const int colorSecondary = 2130772261; - - // aapt resource value: 0x7f0100b5 - public const int colorSwitchThumbNormal = 2130772149; - - // aapt resource value: 0x7f0100f9 - public const int commitIcon = 2130772217; - - // aapt resource value: 0x7f0100e6 - public const int contentDescription = 2130772198; - - // aapt resource value: 0x7f01003a - public const int contentInsetEnd = 2130772026; - - // aapt resource value: 0x7f01003e - public const int contentInsetEndWithActions = 2130772030; - - // aapt resource value: 0x7f01003b - public const int contentInsetLeft = 2130772027; - - // aapt resource value: 0x7f01003c - public const int contentInsetRight = 2130772028; - - // aapt resource value: 0x7f010039 - public const int contentInsetStart = 2130772025; - - // aapt resource value: 0x7f01003d - public const int contentInsetStartWithNavigation = 2130772029; - - // aapt resource value: 0x7f01001e - public const int contentPadding = 2130771998; - - // aapt resource value: 0x7f010022 - public const int contentPaddingBottom = 2130772002; - - // aapt resource value: 0x7f01001f - public const int contentPaddingLeft = 2130771999; - - // aapt resource value: 0x7f010020 - public const int contentPaddingRight = 2130772000; - - // aapt resource value: 0x7f010021 - public const int contentPaddingTop = 2130772001; - - // aapt resource value: 0x7f01017b - public const int contentScrim = 2130772347; - - // aapt resource value: 0x7f0100b6 - public const int controlBackground = 2130772150; - - // aapt resource value: 0x7f0101d6 - public const int coordinatorLayoutStyle = 2130772438; - - // aapt resource value: 0x7f010193 - public const int cornerRadius = 2130772371; - - // aapt resource value: 0x7f0101c2 - public const int counterEnabled = 2130772418; - - // aapt resource value: 0x7f0101c3 - public const int counterMaxLength = 2130772419; - - // aapt resource value: 0x7f0101c5 - public const int counterOverflowTextAppearance = 2130772421; - - // aapt resource value: 0x7f0101c4 - public const int counterTextAppearance = 2130772420; - - // aapt resource value: 0x7f010032 - public const int customNavigationLayout = 2130772018; - - // aapt resource value: 0x7f0100f3 - public const int defaultQueryHint = 2130772211; - - // aapt resource value: 0x7f010087 - public const int dialogCornerRadius = 2130772103; - - // aapt resource value: 0x7f010085 - public const int dialogPreferredPadding = 2130772101; - - // aapt resource value: 0x7f010084 - public const int dialogTheme = 2130772100; - - // aapt resource value: 0x7f010028 - public const int displayOptions = 2130772008; - - // aapt resource value: 0x7f01002e - public const int divider = 2130772014; - - // aapt resource value: 0x7f010093 - public const int dividerHorizontal = 2130772115; - - // aapt resource value: 0x7f0100df - public const int dividerPadding = 2130772191; - - // aapt resource value: 0x7f010092 - public const int dividerVertical = 2130772114; - - // aapt resource value: 0x7f0100d7 - public const int drawableSize = 2130772183; - - // aapt resource value: 0x7f010023 - public const int drawerArrowStyle = 2130772003; - - // aapt resource value: 0x7f0100a5 - public const int dropDownListViewStyle = 2130772133; - - // aapt resource value: 0x7f010089 - public const int dropdownListPreferredItemHeight = 2130772105; - - // aapt resource value: 0x7f01009a - public const int editTextBackground = 2130772122; - - // aapt resource value: 0x7f010099 - public const int editTextColor = 2130772121; - - // aapt resource value: 0x7f0100c5 - public const int editTextStyle = 2130772165; - - // aapt resource value: 0x7f01003f - public const int elevation = 2130772031; - - // aapt resource value: 0x7f0101d4 - public const int enforceMaterialTheme = 2130772436; - - // aapt resource value: 0x7f0101d5 - public const int enforceTextAppearance = 2130772437; - - // aapt resource value: 0x7f0101c0 - public const int errorEnabled = 2130772416; - - // aapt resource value: 0x7f0101c1 - public const int errorTextAppearance = 2130772417; - - // aapt resource value: 0x7f010043 - public const int expandActivityOverflowButtonDrawable = 2130772035; - - // aapt resource value: 0x7f01013f - public const int expanded = 2130772287; - - // aapt resource value: 0x7f010181 - public const int expandedTitleGravity = 2130772353; - - // aapt resource value: 0x7f010174 - public const int expandedTitleMargin = 2130772340; - - // aapt resource value: 0x7f010178 - public const int expandedTitleMarginBottom = 2130772344; - - // aapt resource value: 0x7f010177 - public const int expandedTitleMarginEnd = 2130772343; - - // aapt resource value: 0x7f010175 - public const int expandedTitleMarginStart = 2130772341; - - // aapt resource value: 0x7f010176 - public const int expandedTitleMarginTop = 2130772342; - - // aapt resource value: 0x7f010179 - public const int expandedTitleTextAppearance = 2130772345; - - // aapt resource value: 0x7f010015 - public const int externalRouteEnabledDrawable = 2130771989; - - // aapt resource value: 0x7f010147 - public const int fabAlignmentMode = 2130772295; - - // aapt resource value: 0x7f010148 - public const int fabCradleMargin = 2130772296; - - // aapt resource value: 0x7f010149 - public const int fabCradleRoundedCornerRadius = 2130772297; - - // aapt resource value: 0x7f01014a - public const int fabCradleVerticalOffset = 2130772298; - - // aapt resource value: 0x7f010186 - public const int fabCustomSize = 2130772358; - - // aapt resource value: 0x7f010185 - public const int fabSize = 2130772357; - - // aapt resource value: 0x7f010004 - public const int fastScrollEnabled = 2130771972; - - // aapt resource value: 0x7f010007 - public const int fastScrollHorizontalThumbDrawable = 2130771975; - - // aapt resource value: 0x7f010008 - public const int fastScrollHorizontalTrackDrawable = 2130771976; - - // aapt resource value: 0x7f010005 - public const int fastScrollVerticalThumbDrawable = 2130771973; - - // aapt resource value: 0x7f010006 - public const int fastScrollVerticalTrackDrawable = 2130771974; - - // aapt resource value: 0x7f010059 - public const int firstBaselineToTopHeight = 2130772057; - - // aapt resource value: 0x7f010126 - public const int floatingActionButtonStyle = 2130772262; - - // aapt resource value: 0x7f0101e7 - public const int font = 2130772455; - - // aapt resource value: 0x7f010057 - public const int fontFamily = 2130772055; - - // aapt resource value: 0x7f0101e0 - public const int fontProviderAuthority = 2130772448; - - // aapt resource value: 0x7f0101e3 - public const int fontProviderCerts = 2130772451; - - // aapt resource value: 0x7f0101e4 - public const int fontProviderFetchStrategy = 2130772452; - - // aapt resource value: 0x7f0101e5 - public const int fontProviderFetchTimeout = 2130772453; - - // aapt resource value: 0x7f0101e1 - public const int fontProviderPackage = 2130772449; - - // aapt resource value: 0x7f0101e2 - public const int fontProviderQuery = 2130772450; - - // aapt resource value: 0x7f0101e6 - public const int fontStyle = 2130772454; - - // aapt resource value: 0x7f0101e9 - public const int fontVariationSettings = 2130772457; - - // aapt resource value: 0x7f0101e8 - public const int fontWeight = 2130772456; - - // aapt resource value: 0x7f01018f - public const int foregroundInsidePadding = 2130772367; - - // aapt resource value: 0x7f0100d8 - public const int gapBetweenBars = 2130772184; - - // aapt resource value: 0x7f0100f5 - public const int goIcon = 2130772213; - - // aapt resource value: 0x7f010199 - public const int headerLayout = 2130772377; - - // aapt resource value: 0x7f010024 - public const int height = 2130772004; - - // aapt resource value: 0x7f0101bd - public const int helperText = 2130772413; - - // aapt resource value: 0x7f0101be - public const int helperTextEnabled = 2130772414; - - // aapt resource value: 0x7f0101bf - public const int helperTextTextAppearance = 2130772415; - - // aapt resource value: 0x7f010127 - public const int hideMotionSpec = 2130772263; - - // aapt resource value: 0x7f010038 - public const int hideOnContentScroll = 2130772024; - - // aapt resource value: 0x7f01014b - public const int hideOnScroll = 2130772299; - - // aapt resource value: 0x7f0101bb - public const int hintAnimationEnabled = 2130772411; - - // aapt resource value: 0x7f0101ba - public const int hintEnabled = 2130772410; - - // aapt resource value: 0x7f0101bc - public const int hintTextAppearance = 2130772412; - - // aapt resource value: 0x7f01008b - public const int homeAsUpIndicator = 2130772107; - - // aapt resource value: 0x7f010033 - public const int homeLayout = 2130772019; - - // aapt resource value: 0x7f010187 - public const int hoveredFocusedTranslationZ = 2130772359; - - // aapt resource value: 0x7f01002c - public const int icon = 2130772012; - - // aapt resource value: 0x7f010168 - public const int iconEndPadding = 2130772328; - - // aapt resource value: 0x7f010192 - public const int iconGravity = 2130772370; - - // aapt resource value: 0x7f010191 - public const int iconPadding = 2130772369; - - // aapt resource value: 0x7f010190 - public const int iconSize = 2130772368; - - // aapt resource value: 0x7f010167 - public const int iconStartPadding = 2130772327; - - // aapt resource value: 0x7f0100e8 - public const int iconTint = 2130772200; - - // aapt resource value: 0x7f0100e9 - public const int iconTintMode = 2130772201; - - // aapt resource value: 0x7f0100f1 - public const int iconifiedByDefault = 2130772209; - - // aapt resource value: 0x7f01009b - public const int imageButtonStyle = 2130772123; - - // aapt resource value: 0x7f010035 - public const int indeterminateProgressStyle = 2130772021; - - // aapt resource value: 0x7f010042 - public const int initialActivityCount = 2130772034; - - // aapt resource value: 0x7f01019c - public const int insetForeground = 2130772380; - - // aapt resource value: 0x7f010025 - public const int isLightTheme = 2130772005; - - // aapt resource value: 0x7f010197 - public const int itemBackground = 2130772375; - - // aapt resource value: 0x7f01019a - public const int itemHorizontalPadding = 2130772378; - - // aapt resource value: 0x7f010150 - public const int itemHorizontalTranslationEnabled = 2130772304; - - // aapt resource value: 0x7f01019b - public const int itemIconPadding = 2130772379; - - // aapt resource value: 0x7f01014d - public const int itemIconSize = 2130772301; - - // aapt resource value: 0x7f010195 - public const int itemIconTint = 2130772373; - - // aapt resource value: 0x7f010037 - public const int itemPadding = 2130772023; - - // aapt resource value: 0x7f01018d - public const int itemSpacing = 2130772365; - - // aapt resource value: 0x7f010198 - public const int itemTextAppearance = 2130772376; - - // aapt resource value: 0x7f01014f - public const int itemTextAppearanceActive = 2130772303; - - // aapt resource value: 0x7f01014e - public const int itemTextAppearanceInactive = 2130772302; - - // aapt resource value: 0x7f010196 - public const int itemTextColor = 2130772374; - - // aapt resource value: 0x7f0101d7 - public const int keylines = 2130772439; - - // aapt resource value: 0x7f01014c - public const int labelVisibilityMode = 2130772300; - - // aapt resource value: 0x7f01005a - public const int lastBaselineToBottomHeight = 2130772058; - - // aapt resource value: 0x7f0100f0 - public const int layout = 2130772208; - - // aapt resource value: 0x7f010000 - public const int layoutManager = 2130771968; - - // aapt resource value: 0x7f0101da - public const int layout_anchor = 2130772442; - - // aapt resource value: 0x7f0101dc - public const int layout_anchorGravity = 2130772444; - - // aapt resource value: 0x7f0101d9 - public const int layout_behavior = 2130772441; - - // aapt resource value: 0x7f010183 - public const int layout_collapseMode = 2130772355; - - // aapt resource value: 0x7f010184 - public const int layout_collapseParallaxMultiplier = 2130772356; - - // aapt resource value: 0x7f0101de - public const int layout_dodgeInsetEdges = 2130772446; - - // aapt resource value: 0x7f0101dd - public const int layout_insetEdge = 2130772445; - - // aapt resource value: 0x7f0101db - public const int layout_keyline = 2130772443; - - // aapt resource value: 0x7f010145 - public const int layout_scrollFlags = 2130772293; - - // aapt resource value: 0x7f010146 - public const int layout_scrollInterpolator = 2130772294; - - // aapt resource value: 0x7f010140 - public const int liftOnScroll = 2130772288; - - // aapt resource value: 0x7f010058 - public const int lineHeight = 2130772056; - - // aapt resource value: 0x7f01018e - public const int lineSpacing = 2130772366; - - // aapt resource value: 0x7f0100ad - public const int listChoiceBackgroundIndicator = 2130772141; - - // aapt resource value: 0x7f010086 - public const int listDividerAlertDialog = 2130772102; - - // aapt resource value: 0x7f010048 - public const int listItemLayout = 2130772040; - - // aapt resource value: 0x7f010045 - public const int listLayout = 2130772037; - - // aapt resource value: 0x7f0100cd - public const int listMenuViewStyle = 2130772173; - - // aapt resource value: 0x7f0100a6 - public const int listPopupWindowStyle = 2130772134; - - // aapt resource value: 0x7f0100a0 - public const int listPreferredItemHeight = 2130772128; - - // aapt resource value: 0x7f0100a2 - public const int listPreferredItemHeightLarge = 2130772130; - - // aapt resource value: 0x7f0100a1 - public const int listPreferredItemHeightSmall = 2130772129; - - // aapt resource value: 0x7f0100a3 - public const int listPreferredItemPaddingLeft = 2130772131; - - // aapt resource value: 0x7f0100a4 - public const int listPreferredItemPaddingRight = 2130772132; - - // aapt resource value: 0x7f01002d - public const int logo = 2130772013; - - // aapt resource value: 0x7f010116 - public const int logoDescription = 2130772246; - - // aapt resource value: 0x7f010128 - public const int materialButtonStyle = 2130772264; - - // aapt resource value: 0x7f010129 - public const int materialCardViewStyle = 2130772265; - - // aapt resource value: 0x7f0101a0 - public const int maxActionInlineWidth = 2130772384; - - // aapt resource value: 0x7f010110 - public const int maxButtonHeight = 2130772240; - - // aapt resource value: 0x7f01018b - public const int maxImageSize = 2130772363; - - // aapt resource value: 0x7f0100dd - public const int measureWithLargestChild = 2130772189; - - // aapt resource value: 0x7f010009 - public const int mediaRouteAudioTrackDrawable = 2130771977; - - // aapt resource value: 0x7f01000a - public const int mediaRouteButtonStyle = 2130771978; - - // aapt resource value: 0x7f010016 - public const int mediaRouteButtonTint = 2130771990; - - // aapt resource value: 0x7f01000b - public const int mediaRouteCloseDrawable = 2130771979; - - // aapt resource value: 0x7f01000c - public const int mediaRouteControlPanelThemeOverlay = 2130771980; - - // aapt resource value: 0x7f01000d - public const int mediaRouteDefaultIconDrawable = 2130771981; - - // aapt resource value: 0x7f01000e - public const int mediaRoutePauseDrawable = 2130771982; - - // aapt resource value: 0x7f01000f - public const int mediaRoutePlayDrawable = 2130771983; - - // aapt resource value: 0x7f010010 - public const int mediaRouteSpeakerGroupIconDrawable = 2130771984; - - // aapt resource value: 0x7f010011 - public const int mediaRouteSpeakerIconDrawable = 2130771985; - - // aapt resource value: 0x7f010012 - public const int mediaRouteStopDrawable = 2130771986; - - // aapt resource value: 0x7f010013 - public const int mediaRouteTheme = 2130771987; - - // aapt resource value: 0x7f010014 - public const int mediaRouteTvIconDrawable = 2130771988; - - // aapt resource value: 0x7f010194 - public const int menu = 2130772372; - - // aapt resource value: 0x7f010046 - public const int multiChoiceItemLayout = 2130772038; - - // aapt resource value: 0x7f010115 - public const int navigationContentDescription = 2130772245; - - // aapt resource value: 0x7f010114 - public const int navigationIcon = 2130772244; - - // aapt resource value: 0x7f010027 - public const int navigationMode = 2130772007; - - // aapt resource value: 0x7f01012a - public const int navigationViewStyle = 2130772266; - - // aapt resource value: 0x7f0100e1 - public const int numericModifiers = 2130772193; - - // aapt resource value: 0x7f0100ec - public const int overlapAnchor = 2130772204; - - // aapt resource value: 0x7f0100ee - public const int paddingBottomNoButtons = 2130772206; - - // aapt resource value: 0x7f01011a - public const int paddingEnd = 2130772250; - - // aapt resource value: 0x7f010119 - public const int paddingStart = 2130772249; - - // aapt resource value: 0x7f0100ef - public const int paddingTopNoTitle = 2130772207; - - // aapt resource value: 0x7f0100aa - public const int panelBackground = 2130772138; - - // aapt resource value: 0x7f0100ac - public const int panelMenuListTheme = 2130772140; - - // aapt resource value: 0x7f0100ab - public const int panelMenuListWidth = 2130772139; - - // aapt resource value: 0x7f0101c8 - public const int passwordToggleContentDescription = 2130772424; - - // aapt resource value: 0x7f0101c7 - public const int passwordToggleDrawable = 2130772423; - - // aapt resource value: 0x7f0101c6 - public const int passwordToggleEnabled = 2130772422; - - // aapt resource value: 0x7f0101c9 - public const int passwordToggleTint = 2130772425; - - // aapt resource value: 0x7f0101ca - public const int passwordToggleTintMode = 2130772426; - - // aapt resource value: 0x7f010097 - public const int popupMenuStyle = 2130772119; - - // aapt resource value: 0x7f010040 - public const int popupTheme = 2130772032; - - // aapt resource value: 0x7f010098 - public const int popupWindowStyle = 2130772120; - - // aapt resource value: 0x7f0100ea - public const int preserveIconSpacing = 2130772202; - - // aapt resource value: 0x7f010188 - public const int pressedTranslationZ = 2130772360; - - // aapt resource value: 0x7f010036 - public const int progressBarPadding = 2130772022; - - // aapt resource value: 0x7f010034 - public const int progressBarStyle = 2130772020; - - // aapt resource value: 0x7f0100fb - public const int queryBackground = 2130772219; - - // aapt resource value: 0x7f0100f2 - public const int queryHint = 2130772210; - - // aapt resource value: 0x7f0100c6 - public const int radioButtonStyle = 2130772166; - - // aapt resource value: 0x7f0100c7 - public const int ratingBarStyle = 2130772167; - - // aapt resource value: 0x7f0100c8 - public const int ratingBarStyleIndicator = 2130772168; - - // aapt resource value: 0x7f0100c9 - public const int ratingBarStyleSmall = 2130772169; - - // aapt resource value: 0x7f010002 - public const int reverseLayout = 2130771970; - - // aapt resource value: 0x7f01012b - public const int rippleColor = 2130772267; - - // aapt resource value: 0x7f01017f - public const int scrimAnimationDuration = 2130772351; - - // aapt resource value: 0x7f01012c - public const int scrimBackground = 2130772268; - - // aapt resource value: 0x7f01017e - public const int scrimVisibleHeightTrigger = 2130772350; - - // aapt resource value: 0x7f0100f7 - public const int searchHintIcon = 2130772215; - - // aapt resource value: 0x7f0100f6 - public const int searchIcon = 2130772214; - - // aapt resource value: 0x7f01009f - public const int searchViewStyle = 2130772127; - - // aapt resource value: 0x7f0100ca - public const int seekBarStyle = 2130772170; - - // aapt resource value: 0x7f01008f - public const int selectableItemBackground = 2130772111; - - // aapt resource value: 0x7f010090 - public const int selectableItemBackgroundBorderless = 2130772112; - - // aapt resource value: 0x7f0100e2 - public const int showAsAction = 2130772194; - - // aapt resource value: 0x7f0100de - public const int showDividers = 2130772190; - - // aapt resource value: 0x7f01012d - public const int showMotionSpec = 2130772269; - - // aapt resource value: 0x7f010107 - public const int showText = 2130772231; - - // aapt resource value: 0x7f010049 - public const int showTitle = 2130772041; - - // aapt resource value: 0x7f010047 - public const int singleChoiceItemLayout = 2130772039; - - // aapt resource value: 0x7f010171 - public const int singleLine = 2130772337; - - // aapt resource value: 0x7f010172 - public const int singleSelection = 2130772338; - - // aapt resource value: 0x7f01019f - public const int snackbarButtonStyle = 2130772383; - - // aapt resource value: 0x7f01019e - public const int snackbarStyle = 2130772382; - - // aapt resource value: 0x7f010001 - public const int spanCount = 2130771969; - - // aapt resource value: 0x7f0100d6 - public const int spinBars = 2130772182; - - // aapt resource value: 0x7f01008a - public const int spinnerDropDownItemStyle = 2130772106; - - // aapt resource value: 0x7f0100cb - public const int spinnerStyle = 2130772171; - - // aapt resource value: 0x7f010106 - public const int splitTrack = 2130772230; - - // aapt resource value: 0x7f01004b - public const int srcCompat = 2130772043; - - // aapt resource value: 0x7f010003 - public const int stackFromEnd = 2130771971; - - // aapt resource value: 0x7f0100ed - public const int state_above_anchor = 2130772205; - - // aapt resource value: 0x7f010141 - public const int state_collapsed = 2130772289; - - // aapt resource value: 0x7f010142 - public const int state_collapsible = 2130772290; - - // aapt resource value: 0x7f010144 - public const int state_liftable = 2130772292; - - // aapt resource value: 0x7f010143 - public const int state_lifted = 2130772291; - - // aapt resource value: 0x7f0101d8 - public const int statusBarBackground = 2130772440; - - // aapt resource value: 0x7f01017c - public const int statusBarScrim = 2130772348; - - // aapt resource value: 0x7f01012e - public const int strokeColor = 2130772270; - - // aapt resource value: 0x7f01012f - public const int strokeWidth = 2130772271; - - // aapt resource value: 0x7f0100eb - public const int subMenuArrow = 2130772203; - - // aapt resource value: 0x7f0100fc - public const int submitBackground = 2130772220; - - // aapt resource value: 0x7f010029 - public const int subtitle = 2130772009; - - // aapt resource value: 0x7f010109 - public const int subtitleTextAppearance = 2130772233; - - // aapt resource value: 0x7f010118 - public const int subtitleTextColor = 2130772248; - - // aapt resource value: 0x7f01002b - public const int subtitleTextStyle = 2130772011; - - // aapt resource value: 0x7f0100fa - public const int suggestionRowLayout = 2130772218; - - // aapt resource value: 0x7f010104 - public const int switchMinWidth = 2130772228; - - // aapt resource value: 0x7f010105 - public const int switchPadding = 2130772229; - - // aapt resource value: 0x7f0100cc - public const int switchStyle = 2130772172; - - // aapt resource value: 0x7f010103 - public const int switchTextAppearance = 2130772227; - - // aapt resource value: 0x7f0101a4 - public const int tabBackground = 2130772388; - - // aapt resource value: 0x7f0101a3 - public const int tabContentStart = 2130772387; - - // aapt resource value: 0x7f0101aa - public const int tabGravity = 2130772394; - - // aapt resource value: 0x7f0101b6 - public const int tabIconTint = 2130772406; - - // aapt resource value: 0x7f0101b7 - public const int tabIconTintMode = 2130772407; - - // aapt resource value: 0x7f0101a5 - public const int tabIndicator = 2130772389; - - // aapt resource value: 0x7f0101a7 - public const int tabIndicatorAnimationDuration = 2130772391; - - // aapt resource value: 0x7f0101a1 - public const int tabIndicatorColor = 2130772385; - - // aapt resource value: 0x7f0101a8 - public const int tabIndicatorFullWidth = 2130772392; - - // aapt resource value: 0x7f0101a6 - public const int tabIndicatorGravity = 2130772390; - - // aapt resource value: 0x7f0101a2 - public const int tabIndicatorHeight = 2130772386; - - // aapt resource value: 0x7f0101ab - public const int tabInlineLabel = 2130772395; - - // aapt resource value: 0x7f0101ad - public const int tabMaxWidth = 2130772397; - - // aapt resource value: 0x7f0101ac - public const int tabMinWidth = 2130772396; - - // aapt resource value: 0x7f0101a9 - public const int tabMode = 2130772393; - - // aapt resource value: 0x7f0101b5 - public const int tabPadding = 2130772405; - - // aapt resource value: 0x7f0101b4 - public const int tabPaddingBottom = 2130772404; - - // aapt resource value: 0x7f0101b3 - public const int tabPaddingEnd = 2130772403; - - // aapt resource value: 0x7f0101b1 - public const int tabPaddingStart = 2130772401; - - // aapt resource value: 0x7f0101b2 - public const int tabPaddingTop = 2130772402; - - // aapt resource value: 0x7f0101b8 - public const int tabRippleColor = 2130772408; - - // aapt resource value: 0x7f0101b0 - public const int tabSelectedTextColor = 2130772400; - - // aapt resource value: 0x7f010130 - public const int tabStyle = 2130772272; - - // aapt resource value: 0x7f0101ae - public const int tabTextAppearance = 2130772398; - - // aapt resource value: 0x7f0101af - public const int tabTextColor = 2130772399; - - // aapt resource value: 0x7f0101b9 - public const int tabUnboundedRipple = 2130772409; - - // aapt resource value: 0x7f010051 - public const int textAllCaps = 2130772049; - - // aapt resource value: 0x7f010131 - public const int textAppearanceBody1 = 2130772273; - - // aapt resource value: 0x7f010132 - public const int textAppearanceBody2 = 2130772274; - - // aapt resource value: 0x7f010133 - public const int textAppearanceButton = 2130772275; - - // aapt resource value: 0x7f010134 - public const int textAppearanceCaption = 2130772276; - - // aapt resource value: 0x7f010135 - public const int textAppearanceHeadline1 = 2130772277; - - // aapt resource value: 0x7f010136 - public const int textAppearanceHeadline2 = 2130772278; - - // aapt resource value: 0x7f010137 - public const int textAppearanceHeadline3 = 2130772279; - - // aapt resource value: 0x7f010138 - public const int textAppearanceHeadline4 = 2130772280; - - // aapt resource value: 0x7f010139 - public const int textAppearanceHeadline5 = 2130772281; - - // aapt resource value: 0x7f01013a - public const int textAppearanceHeadline6 = 2130772282; - - // aapt resource value: 0x7f010081 - public const int textAppearanceLargePopupMenu = 2130772097; - - // aapt resource value: 0x7f0100a7 - public const int textAppearanceListItem = 2130772135; - - // aapt resource value: 0x7f0100a8 - public const int textAppearanceListItemSecondary = 2130772136; - - // aapt resource value: 0x7f0100a9 - public const int textAppearanceListItemSmall = 2130772137; - - // aapt resource value: 0x7f01013b - public const int textAppearanceOverline = 2130772283; - - // aapt resource value: 0x7f010083 - public const int textAppearancePopupMenuHeader = 2130772099; - - // aapt resource value: 0x7f01009d - public const int textAppearanceSearchResultSubtitle = 2130772125; - - // aapt resource value: 0x7f01009c - public const int textAppearanceSearchResultTitle = 2130772124; - - // aapt resource value: 0x7f010082 - public const int textAppearanceSmallPopupMenu = 2130772098; - - // aapt resource value: 0x7f01013c - public const int textAppearanceSubtitle1 = 2130772284; - - // aapt resource value: 0x7f01013d - public const int textAppearanceSubtitle2 = 2130772285; - - // aapt resource value: 0x7f0100bc - public const int textColorAlertDialogListItem = 2130772156; - - // aapt resource value: 0x7f01009e - public const int textColorSearchUrl = 2130772126; - - // aapt resource value: 0x7f01016a - public const int textEndPadding = 2130772330; - - // aapt resource value: 0x7f01013e - public const int textInputStyle = 2130772286; - - // aapt resource value: 0x7f010169 - public const int textStartPadding = 2130772329; - - // aapt resource value: 0x7f01011b - public const int theme = 2130772251; - - // aapt resource value: 0x7f0100dc - public const int thickness = 2130772188; - - // aapt resource value: 0x7f010102 - public const int thumbTextPadding = 2130772226; - - // aapt resource value: 0x7f0100fd - public const int thumbTint = 2130772221; - - // aapt resource value: 0x7f0100fe - public const int thumbTintMode = 2130772222; - - // aapt resource value: 0x7f01004e - public const int tickMark = 2130772046; - - // aapt resource value: 0x7f01004f - public const int tickMarkTint = 2130772047; - - // aapt resource value: 0x7f010050 - public const int tickMarkTintMode = 2130772048; - - // aapt resource value: 0x7f01004c - public const int tint = 2130772044; - - // aapt resource value: 0x7f01004d - public const int tintMode = 2130772045; - - // aapt resource value: 0x7f010026 - public const int title = 2130772006; - - // aapt resource value: 0x7f010182 - public const int titleEnabled = 2130772354; - - // aapt resource value: 0x7f01010a - public const int titleMargin = 2130772234; - - // aapt resource value: 0x7f01010e - public const int titleMarginBottom = 2130772238; - - // aapt resource value: 0x7f01010c - public const int titleMarginEnd = 2130772236; - - // aapt resource value: 0x7f01010b - public const int titleMarginStart = 2130772235; - - // aapt resource value: 0x7f01010d - public const int titleMarginTop = 2130772237; - - // aapt resource value: 0x7f01010f - public const int titleMargins = 2130772239; - - // aapt resource value: 0x7f010108 - public const int titleTextAppearance = 2130772232; - - // aapt resource value: 0x7f010117 - public const int titleTextColor = 2130772247; - - // aapt resource value: 0x7f01002a - public const int titleTextStyle = 2130772010; - - // aapt resource value: 0x7f01017d - public const int toolbarId = 2130772349; - - // aapt resource value: 0x7f010096 - public const int toolbarNavigationButtonStyle = 2130772118; - - // aapt resource value: 0x7f010095 - public const int toolbarStyle = 2130772117; - - // aapt resource value: 0x7f0100cf - public const int tooltipForegroundColor = 2130772175; - - // aapt resource value: 0x7f0100ce - public const int tooltipFrameBackground = 2130772174; - - // aapt resource value: 0x7f0100e7 - public const int tooltipText = 2130772199; - - // aapt resource value: 0x7f0100ff - public const int track = 2130772223; - - // aapt resource value: 0x7f010100 - public const int trackTint = 2130772224; - - // aapt resource value: 0x7f010101 - public const int trackTintMode = 2130772225; - - // aapt resource value: 0x7f0101ea - public const int ttcIndex = 2130772458; - - // aapt resource value: 0x7f01018a - public const int useCompatPadding = 2130772362; - - // aapt resource value: 0x7f0100d1 - public const int viewInflaterClass = 2130772177; - - // aapt resource value: 0x7f0100f8 - public const int voiceIcon = 2130772216; - - // aapt resource value: 0x7f01005b - public const int windowActionBar = 2130772059; - - // aapt resource value: 0x7f01005d - public const int windowActionBarOverlay = 2130772061; - - // aapt resource value: 0x7f01005e - public const int windowActionModeOverlay = 2130772062; - - // aapt resource value: 0x7f010062 - public const int windowFixedHeightMajor = 2130772066; - - // aapt resource value: 0x7f010060 - public const int windowFixedHeightMinor = 2130772064; - - // aapt resource value: 0x7f01005f - public const int windowFixedWidthMajor = 2130772063; - - // aapt resource value: 0x7f010061 - public const int windowFixedWidthMinor = 2130772065; - - // aapt resource value: 0x7f010063 - public const int windowMinWidthMajor = 2130772067; - - // aapt resource value: 0x7f010064 - public const int windowMinWidthMinor = 2130772068; - - // aapt resource value: 0x7f01005c - public const int windowNoTitle = 2130772060; - - static Attribute() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Attribute() - { - } - } - - public partial class Boolean - { - - // aapt resource value: 0x7f0e0000 - public const int abc_action_bar_embed_tabs = 2131623936; - - // aapt resource value: 0x7f0e0001 - public const int abc_allow_stacked_button_bar = 2131623937; - - // aapt resource value: 0x7f0e0002 - public const int abc_config_actionMenuItemAllCaps = 2131623938; - - // aapt resource value: 0x7f0e0003 - public const int mtrl_btn_textappearance_all_caps = 2131623939; - - static Boolean() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Boolean() - { - } - } - - public partial class Color - { - - // aapt resource value: 0x7f0d005e - public const int abc_background_cache_hint_selector_material_dark = 2131558494; - - // aapt resource value: 0x7f0d005f - public const int abc_background_cache_hint_selector_material_light = 2131558495; - - // aapt resource value: 0x7f0d0060 - public const int abc_btn_colored_borderless_text_material = 2131558496; - - // aapt resource value: 0x7f0d0061 - public const int abc_btn_colored_text_material = 2131558497; - - // aapt resource value: 0x7f0d0062 - public const int abc_color_highlight_material = 2131558498; - - // aapt resource value: 0x7f0d0063 - public const int abc_hint_foreground_material_dark = 2131558499; - - // aapt resource value: 0x7f0d0064 - public const int abc_hint_foreground_material_light = 2131558500; - - // aapt resource value: 0x7f0d0004 - public const int abc_input_method_navigation_guard = 2131558404; - - // aapt resource value: 0x7f0d0065 - public const int abc_primary_text_disable_only_material_dark = 2131558501; - - // aapt resource value: 0x7f0d0066 - public const int abc_primary_text_disable_only_material_light = 2131558502; - - // aapt resource value: 0x7f0d0067 - public const int abc_primary_text_material_dark = 2131558503; - - // aapt resource value: 0x7f0d0068 - public const int abc_primary_text_material_light = 2131558504; - - // aapt resource value: 0x7f0d0069 - public const int abc_search_url_text = 2131558505; - - // aapt resource value: 0x7f0d0005 - public const int abc_search_url_text_normal = 2131558405; - - // aapt resource value: 0x7f0d0006 - public const int abc_search_url_text_pressed = 2131558406; - - // aapt resource value: 0x7f0d0007 - public const int abc_search_url_text_selected = 2131558407; - - // aapt resource value: 0x7f0d006a - public const int abc_secondary_text_material_dark = 2131558506; - - // aapt resource value: 0x7f0d006b - public const int abc_secondary_text_material_light = 2131558507; - - // aapt resource value: 0x7f0d006c - public const int abc_tint_btn_checkable = 2131558508; - - // aapt resource value: 0x7f0d006d - public const int abc_tint_default = 2131558509; - - // aapt resource value: 0x7f0d006e - public const int abc_tint_edittext = 2131558510; - - // aapt resource value: 0x7f0d006f - public const int abc_tint_seek_thumb = 2131558511; - - // aapt resource value: 0x7f0d0070 - public const int abc_tint_spinner = 2131558512; - - // aapt resource value: 0x7f0d0071 - public const int abc_tint_switch_track = 2131558513; - - // aapt resource value: 0x7f0d005c - public const int accent = 2131558492; - - // aapt resource value: 0x7f0d0008 - public const int accent_material_dark = 2131558408; - - // aapt resource value: 0x7f0d0009 - public const int accent_material_light = 2131558409; - - // aapt resource value: 0x7f0d000a - public const int background_floating_material_dark = 2131558410; - - // aapt resource value: 0x7f0d000b - public const int background_floating_material_light = 2131558411; - - // aapt resource value: 0x7f0d000c - public const int background_material_dark = 2131558412; - - // aapt resource value: 0x7f0d000d - public const int background_material_light = 2131558413; - - // aapt resource value: 0x7f0d000e - public const int bright_foreground_disabled_material_dark = 2131558414; - - // aapt resource value: 0x7f0d000f - public const int bright_foreground_disabled_material_light = 2131558415; - - // aapt resource value: 0x7f0d0010 - public const int bright_foreground_inverse_material_dark = 2131558416; - - // aapt resource value: 0x7f0d0011 - public const int bright_foreground_inverse_material_light = 2131558417; - - // aapt resource value: 0x7f0d0012 - public const int bright_foreground_material_dark = 2131558418; - - // aapt resource value: 0x7f0d0013 - public const int bright_foreground_material_light = 2131558419; - - // aapt resource value: 0x7f0d0054 - public const int browser_actions_bg_grey = 2131558484; - - // aapt resource value: 0x7f0d0055 - public const int browser_actions_divider_color = 2131558485; - - // aapt resource value: 0x7f0d0056 - public const int browser_actions_text_color = 2131558486; - - // aapt resource value: 0x7f0d0057 - public const int browser_actions_title_color = 2131558487; - - // aapt resource value: 0x7f0d0014 - public const int button_material_dark = 2131558420; - - // aapt resource value: 0x7f0d0015 - public const int button_material_light = 2131558421; - - // aapt resource value: 0x7f0d0000 - public const int cardview_dark_background = 2131558400; - - // aapt resource value: 0x7f0d0001 - public const int cardview_light_background = 2131558401; - - // aapt resource value: 0x7f0d0002 - public const int cardview_shadow_end_color = 2131558402; - - // aapt resource value: 0x7f0d0003 - public const int cardview_shadow_start_color = 2131558403; - - // aapt resource value: 0x7f0d0041 - public const int design_bottom_navigation_shadow_color = 2131558465; - - // aapt resource value: 0x7f0d0042 - public const int design_default_color_primary = 2131558466; - - // aapt resource value: 0x7f0d0043 - public const int design_default_color_primary_dark = 2131558467; - - // aapt resource value: 0x7f0d0072 - public const int design_error = 2131558514; - - // aapt resource value: 0x7f0d0044 - public const int design_fab_shadow_end_color = 2131558468; - - // aapt resource value: 0x7f0d0045 - public const int design_fab_shadow_mid_color = 2131558469; - - // aapt resource value: 0x7f0d0046 - public const int design_fab_shadow_start_color = 2131558470; - - // aapt resource value: 0x7f0d0047 - public const int design_fab_stroke_end_inner_color = 2131558471; - - // aapt resource value: 0x7f0d0048 - public const int design_fab_stroke_end_outer_color = 2131558472; - - // aapt resource value: 0x7f0d0049 - public const int design_fab_stroke_top_inner_color = 2131558473; - - // aapt resource value: 0x7f0d004a - public const int design_fab_stroke_top_outer_color = 2131558474; - - // aapt resource value: 0x7f0d004b - public const int design_snackbar_background_color = 2131558475; - - // aapt resource value: 0x7f0d0073 - public const int design_tint_password_toggle = 2131558515; - - // aapt resource value: 0x7f0d0016 - public const int dim_foreground_disabled_material_dark = 2131558422; - - // aapt resource value: 0x7f0d0017 - public const int dim_foreground_disabled_material_light = 2131558423; - - // aapt resource value: 0x7f0d0018 - public const int dim_foreground_material_dark = 2131558424; - - // aapt resource value: 0x7f0d0019 - public const int dim_foreground_material_light = 2131558425; - - // aapt resource value: 0x7f0d001a - public const int error_color_material_dark = 2131558426; - - // aapt resource value: 0x7f0d001b - public const int error_color_material_light = 2131558427; - - // aapt resource value: 0x7f0d001c - public const int foreground_material_dark = 2131558428; - - // aapt resource value: 0x7f0d001d - public const int foreground_material_light = 2131558429; - - // aapt resource value: 0x7f0d001e - public const int highlighted_text_material_dark = 2131558430; - - // aapt resource value: 0x7f0d001f - public const int highlighted_text_material_light = 2131558431; - - // aapt resource value: 0x7f0d0020 - public const int material_blue_grey_800 = 2131558432; - - // aapt resource value: 0x7f0d0021 - public const int material_blue_grey_900 = 2131558433; - - // aapt resource value: 0x7f0d0022 - public const int material_blue_grey_950 = 2131558434; - - // aapt resource value: 0x7f0d0023 - public const int material_deep_teal_200 = 2131558435; - - // aapt resource value: 0x7f0d0024 - public const int material_deep_teal_500 = 2131558436; - - // aapt resource value: 0x7f0d0025 - public const int material_grey_100 = 2131558437; - - // aapt resource value: 0x7f0d0026 - public const int material_grey_300 = 2131558438; - - // aapt resource value: 0x7f0d0027 - public const int material_grey_50 = 2131558439; - - // aapt resource value: 0x7f0d0028 - public const int material_grey_600 = 2131558440; - - // aapt resource value: 0x7f0d0029 - public const int material_grey_800 = 2131558441; - - // aapt resource value: 0x7f0d002a - public const int material_grey_850 = 2131558442; - - // aapt resource value: 0x7f0d002b - public const int material_grey_900 = 2131558443; - - // aapt resource value: 0x7f0d0074 - public const int mtrl_bottom_nav_colored_item_tint = 2131558516; - - // aapt resource value: 0x7f0d0075 - public const int mtrl_bottom_nav_item_tint = 2131558517; - - // aapt resource value: 0x7f0d004c - public const int mtrl_btn_bg_color_disabled = 2131558476; - - // aapt resource value: 0x7f0d0076 - public const int mtrl_btn_bg_color_selector = 2131558518; - - // aapt resource value: 0x7f0d0077 - public const int mtrl_btn_ripple_color = 2131558519; - - // aapt resource value: 0x7f0d0078 - public const int mtrl_btn_stroke_color_selector = 2131558520; - - // aapt resource value: 0x7f0d0079 - public const int mtrl_btn_text_btn_ripple_color = 2131558521; - - // aapt resource value: 0x7f0d004d - public const int mtrl_btn_text_color_disabled = 2131558477; - - // aapt resource value: 0x7f0d007a - public const int mtrl_btn_text_color_selector = 2131558522; - - // aapt resource value: 0x7f0d004e - public const int mtrl_btn_transparent_bg_color = 2131558478; - - // aapt resource value: 0x7f0d007b - public const int mtrl_chip_background_color = 2131558523; - - // aapt resource value: 0x7f0d007c - public const int mtrl_chip_close_icon_tint = 2131558524; - - // aapt resource value: 0x7f0d007d - public const int mtrl_chip_ripple_color = 2131558525; - - // aapt resource value: 0x7f0d007e - public const int mtrl_chip_text_color = 2131558526; - - // aapt resource value: 0x7f0d007f - public const int mtrl_fab_ripple_color = 2131558527; - - // aapt resource value: 0x7f0d004f - public const int mtrl_scrim_color = 2131558479; - - // aapt resource value: 0x7f0d0080 - public const int mtrl_tabs_colored_ripple_color = 2131558528; - - // aapt resource value: 0x7f0d0081 - public const int mtrl_tabs_icon_color_selector = 2131558529; - - // aapt resource value: 0x7f0d0082 - public const int mtrl_tabs_icon_color_selector_colored = 2131558530; - - // aapt resource value: 0x7f0d0083 - public const int mtrl_tabs_legacy_text_color_selector = 2131558531; - - // aapt resource value: 0x7f0d0084 - public const int mtrl_tabs_ripple_color = 2131558532; - - // aapt resource value: 0x7f0d0085 - public const int mtrl_text_btn_text_color_selector = 2131558533; - - // aapt resource value: 0x7f0d0050 - public const int mtrl_textinput_default_box_stroke_color = 2131558480; - - // aapt resource value: 0x7f0d0051 - public const int mtrl_textinput_disabled_color = 2131558481; - - // aapt resource value: 0x7f0d0052 - public const int mtrl_textinput_filled_box_default_background_color = 2131558482; - - // aapt resource value: 0x7f0d0053 - public const int mtrl_textinput_hovered_box_stroke_color = 2131558483; - - // aapt resource value: 0x7f0d0058 - public const int notification_action_color_filter = 2131558488; - - // aapt resource value: 0x7f0d0059 - public const int notification_icon_bg_color = 2131558489; - - // aapt resource value: 0x7f0d0040 - public const int notification_material_background_media_default_color = 2131558464; - - // aapt resource value: 0x7f0d005a - public const int primary = 2131558490; - - // aapt resource value: 0x7f0d005b - public const int primaryDark = 2131558491; - - // aapt resource value: 0x7f0d002c - public const int primary_dark_material_dark = 2131558444; - - // aapt resource value: 0x7f0d002d - public const int primary_dark_material_light = 2131558445; - - // aapt resource value: 0x7f0d002e - public const int primary_material_dark = 2131558446; - - // aapt resource value: 0x7f0d002f - public const int primary_material_light = 2131558447; - - // aapt resource value: 0x7f0d0030 - public const int primary_text_default_material_dark = 2131558448; - - // aapt resource value: 0x7f0d0031 - public const int primary_text_default_material_light = 2131558449; - - // aapt resource value: 0x7f0d0032 - public const int primary_text_disabled_material_dark = 2131558450; - - // aapt resource value: 0x7f0d0033 - public const int primary_text_disabled_material_light = 2131558451; - - // aapt resource value: 0x7f0d0034 - public const int ripple_material_dark = 2131558452; - - // aapt resource value: 0x7f0d0035 - public const int ripple_material_light = 2131558453; - - // aapt resource value: 0x7f0d0036 - public const int secondary_text_default_material_dark = 2131558454; - - // aapt resource value: 0x7f0d0037 - public const int secondary_text_default_material_light = 2131558455; - - // aapt resource value: 0x7f0d0038 - public const int secondary_text_disabled_material_dark = 2131558456; - - // aapt resource value: 0x7f0d0039 - public const int secondary_text_disabled_material_light = 2131558457; - - // aapt resource value: 0x7f0d003a - public const int switch_thumb_disabled_material_dark = 2131558458; - - // aapt resource value: 0x7f0d003b - public const int switch_thumb_disabled_material_light = 2131558459; - - // aapt resource value: 0x7f0d0086 - public const int switch_thumb_material_dark = 2131558534; - - // aapt resource value: 0x7f0d0087 - public const int switch_thumb_material_light = 2131558535; - - // aapt resource value: 0x7f0d003c - public const int switch_thumb_normal_material_dark = 2131558460; - - // aapt resource value: 0x7f0d003d - public const int switch_thumb_normal_material_light = 2131558461; - - // aapt resource value: 0x7f0d003e - public const int tooltip_background_dark = 2131558462; - - // aapt resource value: 0x7f0d003f - public const int tooltip_background_light = 2131558463; - - // aapt resource value: 0x7f0d005d - public const int window_background = 2131558493; - - static Color() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Color() - { - } - } - - public partial class Dimension - { - - // aapt resource value: 0x7f09001a - public const int abc_action_bar_content_inset_material = 2131296282; - - // aapt resource value: 0x7f09001b - public const int abc_action_bar_content_inset_with_nav = 2131296283; - - // aapt resource value: 0x7f090010 - public const int abc_action_bar_default_height_material = 2131296272; - - // aapt resource value: 0x7f09001c - public const int abc_action_bar_default_padding_end_material = 2131296284; - - // aapt resource value: 0x7f09001d - public const int abc_action_bar_default_padding_start_material = 2131296285; - - // aapt resource value: 0x7f09001f - public const int abc_action_bar_elevation_material = 2131296287; - - // aapt resource value: 0x7f090020 - public const int abc_action_bar_icon_vertical_padding_material = 2131296288; - - // aapt resource value: 0x7f090021 - public const int abc_action_bar_overflow_padding_end_material = 2131296289; - - // aapt resource value: 0x7f090022 - public const int abc_action_bar_overflow_padding_start_material = 2131296290; - - // aapt resource value: 0x7f090023 - public const int abc_action_bar_stacked_max_height = 2131296291; - - // aapt resource value: 0x7f090024 - public const int abc_action_bar_stacked_tab_max_width = 2131296292; - - // aapt resource value: 0x7f090025 - public const int abc_action_bar_subtitle_bottom_margin_material = 2131296293; - - // aapt resource value: 0x7f090026 - public const int abc_action_bar_subtitle_top_margin_material = 2131296294; - - // aapt resource value: 0x7f090027 - public const int abc_action_button_min_height_material = 2131296295; - - // aapt resource value: 0x7f090028 - public const int abc_action_button_min_width_material = 2131296296; - - // aapt resource value: 0x7f090029 - public const int abc_action_button_min_width_overflow_material = 2131296297; - - // aapt resource value: 0x7f09000f - public const int abc_alert_dialog_button_bar_height = 2131296271; - - // aapt resource value: 0x7f09002a - public const int abc_alert_dialog_button_dimen = 2131296298; - - // aapt resource value: 0x7f09002b - public const int abc_button_inset_horizontal_material = 2131296299; - - // aapt resource value: 0x7f09002c - public const int abc_button_inset_vertical_material = 2131296300; - - // aapt resource value: 0x7f09002d - public const int abc_button_padding_horizontal_material = 2131296301; - - // aapt resource value: 0x7f09002e - public const int abc_button_padding_vertical_material = 2131296302; - - // aapt resource value: 0x7f09002f - public const int abc_cascading_menus_min_smallest_width = 2131296303; - - // aapt resource value: 0x7f090013 - public const int abc_config_prefDialogWidth = 2131296275; - - // aapt resource value: 0x7f090030 - public const int abc_control_corner_material = 2131296304; - - // aapt resource value: 0x7f090031 - public const int abc_control_inset_material = 2131296305; - - // aapt resource value: 0x7f090032 - public const int abc_control_padding_material = 2131296306; - - // aapt resource value: 0x7f090033 - public const int abc_dialog_corner_radius_material = 2131296307; - - // aapt resource value: 0x7f090014 - public const int abc_dialog_fixed_height_major = 2131296276; - - // aapt resource value: 0x7f090015 - public const int abc_dialog_fixed_height_minor = 2131296277; - - // aapt resource value: 0x7f090016 - public const int abc_dialog_fixed_width_major = 2131296278; - - // aapt resource value: 0x7f090017 - public const int abc_dialog_fixed_width_minor = 2131296279; - - // aapt resource value: 0x7f090034 - public const int abc_dialog_list_padding_bottom_no_buttons = 2131296308; - - // aapt resource value: 0x7f090035 - public const int abc_dialog_list_padding_top_no_title = 2131296309; - - // aapt resource value: 0x7f090018 - public const int abc_dialog_min_width_major = 2131296280; - - // aapt resource value: 0x7f090019 - public const int abc_dialog_min_width_minor = 2131296281; - - // aapt resource value: 0x7f090036 - public const int abc_dialog_padding_material = 2131296310; - - // aapt resource value: 0x7f090037 - public const int abc_dialog_padding_top_material = 2131296311; - - // aapt resource value: 0x7f090038 - public const int abc_dialog_title_divider_material = 2131296312; - - // aapt resource value: 0x7f090039 - public const int abc_disabled_alpha_material_dark = 2131296313; - - // aapt resource value: 0x7f09003a - public const int abc_disabled_alpha_material_light = 2131296314; - - // aapt resource value: 0x7f09003b - public const int abc_dropdownitem_icon_width = 2131296315; - - // aapt resource value: 0x7f09003c - public const int abc_dropdownitem_text_padding_left = 2131296316; - - // aapt resource value: 0x7f09003d - public const int abc_dropdownitem_text_padding_right = 2131296317; - - // aapt resource value: 0x7f09003e - public const int abc_edit_text_inset_bottom_material = 2131296318; - - // aapt resource value: 0x7f09003f - public const int abc_edit_text_inset_horizontal_material = 2131296319; - - // aapt resource value: 0x7f090040 - public const int abc_edit_text_inset_top_material = 2131296320; - - // aapt resource value: 0x7f090041 - public const int abc_floating_window_z = 2131296321; - - // aapt resource value: 0x7f090042 - public const int abc_list_item_padding_horizontal_material = 2131296322; - - // aapt resource value: 0x7f090043 - public const int abc_panel_menu_list_width = 2131296323; - - // aapt resource value: 0x7f090044 - public const int abc_progress_bar_height_material = 2131296324; - - // aapt resource value: 0x7f090045 - public const int abc_search_view_preferred_height = 2131296325; - - // aapt resource value: 0x7f090046 - public const int abc_search_view_preferred_width = 2131296326; - - // aapt resource value: 0x7f090047 - public const int abc_seekbar_track_background_height_material = 2131296327; - - // aapt resource value: 0x7f090048 - public const int abc_seekbar_track_progress_height_material = 2131296328; - - // aapt resource value: 0x7f090049 - public const int abc_select_dialog_padding_start_material = 2131296329; - - // aapt resource value: 0x7f09001e - public const int abc_switch_padding = 2131296286; - - // aapt resource value: 0x7f09004a - public const int abc_text_size_body_1_material = 2131296330; - - // aapt resource value: 0x7f09004b - public const int abc_text_size_body_2_material = 2131296331; - - // aapt resource value: 0x7f09004c - public const int abc_text_size_button_material = 2131296332; - - // aapt resource value: 0x7f09004d - public const int abc_text_size_caption_material = 2131296333; - - // aapt resource value: 0x7f09004e - public const int abc_text_size_display_1_material = 2131296334; - - // aapt resource value: 0x7f09004f - public const int abc_text_size_display_2_material = 2131296335; - - // aapt resource value: 0x7f090050 - public const int abc_text_size_display_3_material = 2131296336; - - // aapt resource value: 0x7f090051 - public const int abc_text_size_display_4_material = 2131296337; - - // aapt resource value: 0x7f090052 - public const int abc_text_size_headline_material = 2131296338; - - // aapt resource value: 0x7f090053 - public const int abc_text_size_large_material = 2131296339; - - // aapt resource value: 0x7f090054 - public const int abc_text_size_medium_material = 2131296340; - - // aapt resource value: 0x7f090055 - public const int abc_text_size_menu_header_material = 2131296341; - - // aapt resource value: 0x7f090056 - public const int abc_text_size_menu_material = 2131296342; - - // aapt resource value: 0x7f090057 - public const int abc_text_size_small_material = 2131296343; - - // aapt resource value: 0x7f090058 - public const int abc_text_size_subhead_material = 2131296344; - - // aapt resource value: 0x7f090011 - public const int abc_text_size_subtitle_material_toolbar = 2131296273; - - // aapt resource value: 0x7f090059 - public const int abc_text_size_title_material = 2131296345; - - // aapt resource value: 0x7f090012 - public const int abc_text_size_title_material_toolbar = 2131296274; - - // aapt resource value: 0x7f0900cb - public const int browser_actions_context_menu_max_width = 2131296459; - - // aapt resource value: 0x7f0900cc - public const int browser_actions_context_menu_min_padding = 2131296460; - - // aapt resource value: 0x7f09000c - public const int cardview_compat_inset_shadow = 2131296268; - - // aapt resource value: 0x7f09000d - public const int cardview_default_elevation = 2131296269; - - // aapt resource value: 0x7f09000e - public const int cardview_default_radius = 2131296270; - - // aapt resource value: 0x7f0900d1 - public const int compat_button_inset_horizontal_material = 2131296465; - - // aapt resource value: 0x7f0900d2 - public const int compat_button_inset_vertical_material = 2131296466; - - // aapt resource value: 0x7f0900d3 - public const int compat_button_padding_horizontal_material = 2131296467; - - // aapt resource value: 0x7f0900d4 - public const int compat_button_padding_vertical_material = 2131296468; - - // aapt resource value: 0x7f0900d5 - public const int compat_control_corner_material = 2131296469; - - // aapt resource value: 0x7f0900d6 - public const int compat_notification_large_icon_max_height = 2131296470; - - // aapt resource value: 0x7f0900d7 - public const int compat_notification_large_icon_max_width = 2131296471; - - // aapt resource value: 0x7f090077 - public const int design_appbar_elevation = 2131296375; - - // aapt resource value: 0x7f090078 - public const int design_bottom_navigation_active_item_max_width = 2131296376; - - // aapt resource value: 0x7f090079 - public const int design_bottom_navigation_active_item_min_width = 2131296377; - - // aapt resource value: 0x7f09007a - public const int design_bottom_navigation_active_text_size = 2131296378; - - // aapt resource value: 0x7f09007b - public const int design_bottom_navigation_elevation = 2131296379; - - // aapt resource value: 0x7f09007c - public const int design_bottom_navigation_height = 2131296380; - - // aapt resource value: 0x7f09007d - public const int design_bottom_navigation_icon_size = 2131296381; - - // aapt resource value: 0x7f09007e - public const int design_bottom_navigation_item_max_width = 2131296382; - - // aapt resource value: 0x7f09007f - public const int design_bottom_navigation_item_min_width = 2131296383; - - // aapt resource value: 0x7f090080 - public const int design_bottom_navigation_margin = 2131296384; - - // aapt resource value: 0x7f090081 - public const int design_bottom_navigation_shadow_height = 2131296385; - - // aapt resource value: 0x7f090082 - public const int design_bottom_navigation_text_size = 2131296386; - - // aapt resource value: 0x7f090083 - public const int design_bottom_sheet_modal_elevation = 2131296387; - - // aapt resource value: 0x7f090084 - public const int design_bottom_sheet_peek_height_min = 2131296388; - - // aapt resource value: 0x7f090085 - public const int design_fab_border_width = 2131296389; - - // aapt resource value: 0x7f090086 - public const int design_fab_elevation = 2131296390; - - // aapt resource value: 0x7f090087 - public const int design_fab_image_size = 2131296391; - - // aapt resource value: 0x7f090088 - public const int design_fab_size_mini = 2131296392; - - // aapt resource value: 0x7f090089 - public const int design_fab_size_normal = 2131296393; - - // aapt resource value: 0x7f09008a - public const int design_fab_translation_z_hovered_focused = 2131296394; - - // aapt resource value: 0x7f09008b - public const int design_fab_translation_z_pressed = 2131296395; - - // aapt resource value: 0x7f09008c - public const int design_navigation_elevation = 2131296396; - - // aapt resource value: 0x7f09008d - public const int design_navigation_icon_padding = 2131296397; - - // aapt resource value: 0x7f09008e - public const int design_navigation_icon_size = 2131296398; - - // aapt resource value: 0x7f09008f - public const int design_navigation_item_horizontal_padding = 2131296399; - - // aapt resource value: 0x7f090090 - public const int design_navigation_item_icon_padding = 2131296400; - - // aapt resource value: 0x7f09006f - public const int design_navigation_max_width = 2131296367; - - // aapt resource value: 0x7f090091 - public const int design_navigation_padding_bottom = 2131296401; - - // aapt resource value: 0x7f090092 - public const int design_navigation_separator_vertical_padding = 2131296402; - - // aapt resource value: 0x7f090070 - public const int design_snackbar_action_inline_max_width = 2131296368; - - // aapt resource value: 0x7f090071 - public const int design_snackbar_background_corner_radius = 2131296369; - - // aapt resource value: 0x7f090093 - public const int design_snackbar_elevation = 2131296403; - - // aapt resource value: 0x7f090072 - public const int design_snackbar_extra_spacing_horizontal = 2131296370; - - // aapt resource value: 0x7f090073 - public const int design_snackbar_max_width = 2131296371; - - // aapt resource value: 0x7f090074 - public const int design_snackbar_min_width = 2131296372; - - // aapt resource value: 0x7f090094 - public const int design_snackbar_padding_horizontal = 2131296404; - - // aapt resource value: 0x7f090095 - public const int design_snackbar_padding_vertical = 2131296405; - - // aapt resource value: 0x7f090075 - public const int design_snackbar_padding_vertical_2lines = 2131296373; - - // aapt resource value: 0x7f090096 - public const int design_snackbar_text_size = 2131296406; - - // aapt resource value: 0x7f090097 - public const int design_tab_max_width = 2131296407; - - // aapt resource value: 0x7f090076 - public const int design_tab_scrollable_min_width = 2131296374; - - // aapt resource value: 0x7f090098 - public const int design_tab_text_size = 2131296408; - - // aapt resource value: 0x7f090099 - public const int design_tab_text_size_2line = 2131296409; - - // aapt resource value: 0x7f09009a - public const int design_textinput_caption_translate_y = 2131296410; - - // aapt resource value: 0x7f09005a - public const int disabled_alpha_material_dark = 2131296346; - - // aapt resource value: 0x7f09005b - public const int disabled_alpha_material_light = 2131296347; - - // aapt resource value: 0x7f090000 - public const int fastscroll_default_thickness = 2131296256; - - // aapt resource value: 0x7f090001 - public const int fastscroll_margin = 2131296257; - - // aapt resource value: 0x7f090002 - public const int fastscroll_minimum_range = 2131296258; - - // aapt resource value: 0x7f09005c - public const int highlight_alpha_material_colored = 2131296348; - - // aapt resource value: 0x7f09005d - public const int highlight_alpha_material_dark = 2131296349; - - // aapt resource value: 0x7f09005e - public const int highlight_alpha_material_light = 2131296350; - - // aapt resource value: 0x7f09005f - public const int hint_alpha_material_dark = 2131296351; - - // aapt resource value: 0x7f090060 - public const int hint_alpha_material_light = 2131296352; - - // aapt resource value: 0x7f090061 - public const int hint_pressed_alpha_material_dark = 2131296353; - - // aapt resource value: 0x7f090062 - public const int hint_pressed_alpha_material_light = 2131296354; - - // aapt resource value: 0x7f090003 - public const int item_touch_helper_max_drag_scroll_per_frame = 2131296259; - - // aapt resource value: 0x7f090004 - public const int item_touch_helper_swipe_escape_max_velocity = 2131296260; - - // aapt resource value: 0x7f090005 - public const int item_touch_helper_swipe_escape_velocity = 2131296261; - - // aapt resource value: 0x7f090006 - public const int mr_controller_volume_group_list_item_height = 2131296262; - - // aapt resource value: 0x7f090007 - public const int mr_controller_volume_group_list_item_icon_size = 2131296263; - - // aapt resource value: 0x7f090008 - public const int mr_controller_volume_group_list_max_height = 2131296264; - - // aapt resource value: 0x7f09000b - public const int mr_controller_volume_group_list_padding_top = 2131296267; - - // aapt resource value: 0x7f090009 - public const int mr_dialog_fixed_width_major = 2131296265; - - // aapt resource value: 0x7f09000a - public const int mr_dialog_fixed_width_minor = 2131296266; - - // aapt resource value: 0x7f09009b - public const int mtrl_bottomappbar_fabOffsetEndMode = 2131296411; - - // aapt resource value: 0x7f09009c - public const int mtrl_bottomappbar_fab_cradle_margin = 2131296412; - - // aapt resource value: 0x7f09009d - public const int mtrl_bottomappbar_fab_cradle_rounded_corner_radius = 2131296413; - - // aapt resource value: 0x7f09009e - public const int mtrl_bottomappbar_fab_cradle_vertical_offset = 2131296414; - - // aapt resource value: 0x7f09009f - public const int mtrl_bottomappbar_height = 2131296415; - - // aapt resource value: 0x7f0900a0 - public const int mtrl_btn_corner_radius = 2131296416; - - // aapt resource value: 0x7f0900a1 - public const int mtrl_btn_dialog_btn_min_width = 2131296417; - - // aapt resource value: 0x7f0900a2 - public const int mtrl_btn_disabled_elevation = 2131296418; - - // aapt resource value: 0x7f0900a3 - public const int mtrl_btn_disabled_z = 2131296419; - - // aapt resource value: 0x7f0900a4 - public const int mtrl_btn_elevation = 2131296420; - - // aapt resource value: 0x7f0900a5 - public const int mtrl_btn_focused_z = 2131296421; - - // aapt resource value: 0x7f0900a6 - public const int mtrl_btn_hovered_z = 2131296422; - - // aapt resource value: 0x7f0900a7 - public const int mtrl_btn_icon_btn_padding_left = 2131296423; - - // aapt resource value: 0x7f0900a8 - public const int mtrl_btn_icon_padding = 2131296424; - - // aapt resource value: 0x7f0900a9 - public const int mtrl_btn_inset = 2131296425; - - // aapt resource value: 0x7f0900aa - public const int mtrl_btn_letter_spacing = 2131296426; - - // aapt resource value: 0x7f0900ab - public const int mtrl_btn_padding_bottom = 2131296427; - - // aapt resource value: 0x7f0900ac - public const int mtrl_btn_padding_left = 2131296428; - - // aapt resource value: 0x7f0900ad - public const int mtrl_btn_padding_right = 2131296429; - - // aapt resource value: 0x7f0900ae - public const int mtrl_btn_padding_top = 2131296430; - - // aapt resource value: 0x7f0900af - public const int mtrl_btn_pressed_z = 2131296431; - - // aapt resource value: 0x7f0900b0 - public const int mtrl_btn_stroke_size = 2131296432; - - // aapt resource value: 0x7f0900b1 - public const int mtrl_btn_text_btn_icon_padding = 2131296433; - - // aapt resource value: 0x7f0900b2 - public const int mtrl_btn_text_btn_padding_left = 2131296434; - - // aapt resource value: 0x7f0900b3 - public const int mtrl_btn_text_btn_padding_right = 2131296435; - - // aapt resource value: 0x7f0900b4 - public const int mtrl_btn_text_size = 2131296436; - - // aapt resource value: 0x7f0900b5 - public const int mtrl_btn_z = 2131296437; - - // aapt resource value: 0x7f0900b6 - public const int mtrl_card_elevation = 2131296438; - - // aapt resource value: 0x7f0900b7 - public const int mtrl_card_spacing = 2131296439; - - // aapt resource value: 0x7f0900b8 - public const int mtrl_chip_pressed_translation_z = 2131296440; - - // aapt resource value: 0x7f0900b9 - public const int mtrl_chip_text_size = 2131296441; - - // aapt resource value: 0x7f0900ba - public const int mtrl_fab_elevation = 2131296442; - - // aapt resource value: 0x7f0900bb - public const int mtrl_fab_translation_z_hovered_focused = 2131296443; - - // aapt resource value: 0x7f0900bc - public const int mtrl_fab_translation_z_pressed = 2131296444; - - // aapt resource value: 0x7f0900bd - public const int mtrl_navigation_elevation = 2131296445; - - // aapt resource value: 0x7f0900be - public const int mtrl_navigation_item_horizontal_padding = 2131296446; - - // aapt resource value: 0x7f0900bf - public const int mtrl_navigation_item_icon_padding = 2131296447; - - // aapt resource value: 0x7f0900c0 - public const int mtrl_snackbar_background_corner_radius = 2131296448; - - // aapt resource value: 0x7f0900c1 - public const int mtrl_snackbar_margin = 2131296449; - - // aapt resource value: 0x7f0900c2 - public const int mtrl_textinput_box_bottom_offset = 2131296450; - - // aapt resource value: 0x7f0900c3 - public const int mtrl_textinput_box_corner_radius_medium = 2131296451; - - // aapt resource value: 0x7f0900c4 - public const int mtrl_textinput_box_corner_radius_small = 2131296452; - - // aapt resource value: 0x7f0900c5 - public const int mtrl_textinput_box_label_cutout_padding = 2131296453; - - // aapt resource value: 0x7f0900c6 - public const int mtrl_textinput_box_padding_end = 2131296454; - - // aapt resource value: 0x7f0900c7 - public const int mtrl_textinput_box_stroke_width_default = 2131296455; - - // aapt resource value: 0x7f0900c8 - public const int mtrl_textinput_box_stroke_width_focused = 2131296456; - - // aapt resource value: 0x7f0900c9 - public const int mtrl_textinput_outline_box_expanded_padding = 2131296457; - - // aapt resource value: 0x7f0900ca - public const int mtrl_toolbar_default_height = 2131296458; - - // aapt resource value: 0x7f0900d8 - public const int notification_action_icon_size = 2131296472; - - // aapt resource value: 0x7f0900d9 - public const int notification_action_text_size = 2131296473; - - // aapt resource value: 0x7f0900da - public const int notification_big_circle_margin = 2131296474; - - // aapt resource value: 0x7f0900ce - public const int notification_content_margin_start = 2131296462; - - // aapt resource value: 0x7f0900db - public const int notification_large_icon_height = 2131296475; - - // aapt resource value: 0x7f0900dc - public const int notification_large_icon_width = 2131296476; - - // aapt resource value: 0x7f0900cf - public const int notification_main_column_padding_top = 2131296463; - - // aapt resource value: 0x7f0900d0 - public const int notification_media_narrow_margin = 2131296464; - - // aapt resource value: 0x7f0900dd - public const int notification_right_icon_size = 2131296477; - - // aapt resource value: 0x7f0900cd - public const int notification_right_side_padding_top = 2131296461; - - // aapt resource value: 0x7f0900de - public const int notification_small_icon_background_padding = 2131296478; - - // aapt resource value: 0x7f0900df - public const int notification_small_icon_size_as_large = 2131296479; - - // aapt resource value: 0x7f0900e0 - public const int notification_subtext_size = 2131296480; - - // aapt resource value: 0x7f0900e1 - public const int notification_top_pad = 2131296481; - - // aapt resource value: 0x7f0900e2 - public const int notification_top_pad_large_text = 2131296482; - - // aapt resource value: 0x7f09006b - public const int subtitle_corner_radius = 2131296363; - - // aapt resource value: 0x7f09006c - public const int subtitle_outline_width = 2131296364; - - // aapt resource value: 0x7f09006d - public const int subtitle_shadow_offset = 2131296365; - - // aapt resource value: 0x7f09006e - public const int subtitle_shadow_radius = 2131296366; - - // aapt resource value: 0x7f090063 - public const int tooltip_corner_radius = 2131296355; - - // aapt resource value: 0x7f090064 - public const int tooltip_horizontal_padding = 2131296356; - - // aapt resource value: 0x7f090065 - public const int tooltip_margin = 2131296357; - - // aapt resource value: 0x7f090066 - public const int tooltip_precise_anchor_extra_offset = 2131296358; - - // aapt resource value: 0x7f090067 - public const int tooltip_precise_anchor_threshold = 2131296359; - - // aapt resource value: 0x7f090068 - public const int tooltip_vertical_padding = 2131296360; - - // aapt resource value: 0x7f090069 - public const int tooltip_y_offset_non_touch = 2131296361; - - // aapt resource value: 0x7f09006a - public const int tooltip_y_offset_touch = 2131296362; - - static Dimension() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Dimension() - { - } - } - - public partial class Drawable - { - - // aapt resource value: 0x7f020000 - public const int abc_ab_share_pack_mtrl_alpha = 2130837504; - - // aapt resource value: 0x7f020001 - public const int abc_action_bar_item_background_material = 2130837505; - - // aapt resource value: 0x7f020002 - public const int abc_btn_borderless_material = 2130837506; - - // aapt resource value: 0x7f020003 - public const int abc_btn_check_material = 2130837507; - - // aapt resource value: 0x7f020004 - public const int abc_btn_check_to_on_mtrl_000 = 2130837508; - - // aapt resource value: 0x7f020005 - public const int abc_btn_check_to_on_mtrl_015 = 2130837509; - - // aapt resource value: 0x7f020006 - public const int abc_btn_colored_material = 2130837510; - - // aapt resource value: 0x7f020007 - public const int abc_btn_default_mtrl_shape = 2130837511; - - // aapt resource value: 0x7f020008 - public const int abc_btn_radio_material = 2130837512; - - // aapt resource value: 0x7f020009 - public const int abc_btn_radio_to_on_mtrl_000 = 2130837513; - - // aapt resource value: 0x7f02000a - public const int abc_btn_radio_to_on_mtrl_015 = 2130837514; - - // aapt resource value: 0x7f02000b - public const int abc_btn_switch_to_on_mtrl_00001 = 2130837515; - - // aapt resource value: 0x7f02000c - public const int abc_btn_switch_to_on_mtrl_00012 = 2130837516; - - // aapt resource value: 0x7f02000d - public const int abc_cab_background_internal_bg = 2130837517; - - // aapt resource value: 0x7f02000e - public const int abc_cab_background_top_material = 2130837518; - - // aapt resource value: 0x7f02000f - public const int abc_cab_background_top_mtrl_alpha = 2130837519; - - // aapt resource value: 0x7f020010 - public const int abc_control_background_material = 2130837520; - - // aapt resource value: 0x7f020011 - public const int abc_dialog_material_background = 2130837521; - - // aapt resource value: 0x7f020012 - public const int abc_edit_text_material = 2130837522; - - // aapt resource value: 0x7f020013 - public const int abc_ic_ab_back_material = 2130837523; - - // aapt resource value: 0x7f020014 - public const int abc_ic_arrow_drop_right_black_24dp = 2130837524; - - // aapt resource value: 0x7f020015 - public const int abc_ic_clear_material = 2130837525; - - // aapt resource value: 0x7f020016 - public const int abc_ic_commit_search_api_mtrl_alpha = 2130837526; - - // aapt resource value: 0x7f020017 - public const int abc_ic_go_search_api_material = 2130837527; - - // aapt resource value: 0x7f020018 - public const int abc_ic_menu_copy_mtrl_am_alpha = 2130837528; - - // aapt resource value: 0x7f020019 - public const int abc_ic_menu_cut_mtrl_alpha = 2130837529; - - // aapt resource value: 0x7f02001a - public const int abc_ic_menu_overflow_material = 2130837530; - - // aapt resource value: 0x7f02001b - public const int abc_ic_menu_paste_mtrl_am_alpha = 2130837531; - - // aapt resource value: 0x7f02001c - public const int abc_ic_menu_selectall_mtrl_alpha = 2130837532; - - // aapt resource value: 0x7f02001d - public const int abc_ic_menu_share_mtrl_alpha = 2130837533; - - // aapt resource value: 0x7f02001e - public const int abc_ic_search_api_material = 2130837534; - - // aapt resource value: 0x7f02001f - public const int abc_ic_star_black_16dp = 2130837535; - - // aapt resource value: 0x7f020020 - public const int abc_ic_star_black_36dp = 2130837536; - - // aapt resource value: 0x7f020021 - public const int abc_ic_star_black_48dp = 2130837537; - - // aapt resource value: 0x7f020022 - public const int abc_ic_star_half_black_16dp = 2130837538; - - // aapt resource value: 0x7f020023 - public const int abc_ic_star_half_black_36dp = 2130837539; - - // aapt resource value: 0x7f020024 - public const int abc_ic_star_half_black_48dp = 2130837540; - - // aapt resource value: 0x7f020025 - public const int abc_ic_voice_search_api_material = 2130837541; - - // aapt resource value: 0x7f020026 - public const int abc_item_background_holo_dark = 2130837542; - - // aapt resource value: 0x7f020027 - public const int abc_item_background_holo_light = 2130837543; - - // aapt resource value: 0x7f020028 - public const int abc_list_divider_material = 2130837544; - - // aapt resource value: 0x7f020029 - public const int abc_list_divider_mtrl_alpha = 2130837545; - - // aapt resource value: 0x7f02002a - public const int abc_list_focused_holo = 2130837546; - - // aapt resource value: 0x7f02002b - public const int abc_list_longpressed_holo = 2130837547; - - // aapt resource value: 0x7f02002c - public const int abc_list_pressed_holo_dark = 2130837548; - - // aapt resource value: 0x7f02002d - public const int abc_list_pressed_holo_light = 2130837549; - - // aapt resource value: 0x7f02002e - public const int abc_list_selector_background_transition_holo_dark = 2130837550; - - // aapt resource value: 0x7f02002f - public const int abc_list_selector_background_transition_holo_light = 2130837551; - - // aapt resource value: 0x7f020030 - public const int abc_list_selector_disabled_holo_dark = 2130837552; - - // aapt resource value: 0x7f020031 - public const int abc_list_selector_disabled_holo_light = 2130837553; - - // aapt resource value: 0x7f020032 - public const int abc_list_selector_holo_dark = 2130837554; - - // aapt resource value: 0x7f020033 - public const int abc_list_selector_holo_light = 2130837555; - - // aapt resource value: 0x7f020034 - public const int abc_menu_hardkey_panel_mtrl_mult = 2130837556; - - // aapt resource value: 0x7f020035 - public const int abc_popup_background_mtrl_mult = 2130837557; - - // aapt resource value: 0x7f020036 - public const int abc_ratingbar_indicator_material = 2130837558; - - // aapt resource value: 0x7f020037 - public const int abc_ratingbar_material = 2130837559; - - // aapt resource value: 0x7f020038 - public const int abc_ratingbar_small_material = 2130837560; - - // aapt resource value: 0x7f020039 - public const int abc_scrubber_control_off_mtrl_alpha = 2130837561; - - // aapt resource value: 0x7f02003a - public const int abc_scrubber_control_to_pressed_mtrl_000 = 2130837562; - - // aapt resource value: 0x7f02003b - public const int abc_scrubber_control_to_pressed_mtrl_005 = 2130837563; - - // aapt resource value: 0x7f02003c - public const int abc_scrubber_primary_mtrl_alpha = 2130837564; - - // aapt resource value: 0x7f02003d - public const int abc_scrubber_track_mtrl_alpha = 2130837565; - - // aapt resource value: 0x7f02003e - public const int abc_seekbar_thumb_material = 2130837566; - - // aapt resource value: 0x7f02003f - public const int abc_seekbar_tick_mark_material = 2130837567; - - // aapt resource value: 0x7f020040 - public const int abc_seekbar_track_material = 2130837568; - - // aapt resource value: 0x7f020041 - public const int abc_spinner_mtrl_am_alpha = 2130837569; - - // aapt resource value: 0x7f020042 - public const int abc_spinner_textfield_background_material = 2130837570; - - // aapt resource value: 0x7f020043 - public const int abc_switch_thumb_material = 2130837571; - - // aapt resource value: 0x7f020044 - public const int abc_switch_track_mtrl_alpha = 2130837572; - - // aapt resource value: 0x7f020045 - public const int abc_tab_indicator_material = 2130837573; - - // aapt resource value: 0x7f020046 - public const int abc_tab_indicator_mtrl_alpha = 2130837574; - - // aapt resource value: 0x7f020047 - public const int abc_text_cursor_material = 2130837575; - - // aapt resource value: 0x7f020048 - public const int abc_text_select_handle_left_mtrl_dark = 2130837576; - - // aapt resource value: 0x7f020049 - public const int abc_text_select_handle_left_mtrl_light = 2130837577; - - // aapt resource value: 0x7f02004a - public const int abc_text_select_handle_middle_mtrl_dark = 2130837578; - - // aapt resource value: 0x7f02004b - public const int abc_text_select_handle_middle_mtrl_light = 2130837579; - - // aapt resource value: 0x7f02004c - public const int abc_text_select_handle_right_mtrl_dark = 2130837580; - - // aapt resource value: 0x7f02004d - public const int abc_text_select_handle_right_mtrl_light = 2130837581; - - // aapt resource value: 0x7f02004e - public const int abc_textfield_activated_mtrl_alpha = 2130837582; - - // aapt resource value: 0x7f02004f - public const int abc_textfield_default_mtrl_alpha = 2130837583; - - // aapt resource value: 0x7f020050 - public const int abc_textfield_search_activated_mtrl_alpha = 2130837584; - - // aapt resource value: 0x7f020051 - public const int abc_textfield_search_default_mtrl_alpha = 2130837585; - - // aapt resource value: 0x7f020052 - public const int abc_textfield_search_material = 2130837586; - - // aapt resource value: 0x7f020053 - public const int abc_vector_test = 2130837587; - - // aapt resource value: 0x7f020054 - public const int avd_hide_password = 2130837588; - - // aapt resource value: 0x7f02013a - public const int avd_hide_password_1 = 2130837818; - - // aapt resource value: 0x7f02013b - public const int avd_hide_password_2 = 2130837819; - - // aapt resource value: 0x7f02013c - public const int avd_hide_password_3 = 2130837820; - - // aapt resource value: 0x7f020055 - public const int avd_show_password = 2130837589; - - // aapt resource value: 0x7f02013d - public const int avd_show_password_1 = 2130837821; - - // aapt resource value: 0x7f02013e - public const int avd_show_password_2 = 2130837822; - - // aapt resource value: 0x7f02013f - public const int avd_show_password_3 = 2130837823; - - // aapt resource value: 0x7f020056 - public const int design_bottom_navigation_item_background = 2130837590; - - // aapt resource value: 0x7f020057 - public const int design_fab_background = 2130837591; - - // aapt resource value: 0x7f020058 - public const int design_ic_visibility = 2130837592; - - // aapt resource value: 0x7f020059 - public const int design_ic_visibility_off = 2130837593; - - // aapt resource value: 0x7f02005a - public const int design_password_eye = 2130837594; - - // aapt resource value: 0x7f02005b - public const int design_snackbar_background = 2130837595; - - // aapt resource value: 0x7f02005c - public const int ic_audiotrack_dark = 2130837596; - - // aapt resource value: 0x7f02005d - public const int ic_audiotrack_light = 2130837597; - - // aapt resource value: 0x7f02005e - public const int ic_dialog_close_dark = 2130837598; - - // aapt resource value: 0x7f02005f - public const int ic_dialog_close_light = 2130837599; - - // aapt resource value: 0x7f020060 - public const int ic_errorstatus = 2130837600; - - // aapt resource value: 0x7f020061 - public const int ic_group_collapse_00 = 2130837601; - - // aapt resource value: 0x7f020062 - public const int ic_group_collapse_01 = 2130837602; - - // aapt resource value: 0x7f020063 - public const int ic_group_collapse_02 = 2130837603; - - // aapt resource value: 0x7f020064 - public const int ic_group_collapse_03 = 2130837604; - - // aapt resource value: 0x7f020065 - public const int ic_group_collapse_04 = 2130837605; - - // aapt resource value: 0x7f020066 - public const int ic_group_collapse_05 = 2130837606; - - // aapt resource value: 0x7f020067 - public const int ic_group_collapse_06 = 2130837607; - - // aapt resource value: 0x7f020068 - public const int ic_group_collapse_07 = 2130837608; - - // aapt resource value: 0x7f020069 - public const int ic_group_collapse_08 = 2130837609; - - // aapt resource value: 0x7f02006a - public const int ic_group_collapse_09 = 2130837610; - - // aapt resource value: 0x7f02006b - public const int ic_group_collapse_10 = 2130837611; - - // aapt resource value: 0x7f02006c - public const int ic_group_collapse_11 = 2130837612; - - // aapt resource value: 0x7f02006d - public const int ic_group_collapse_12 = 2130837613; - - // aapt resource value: 0x7f02006e - public const int ic_group_collapse_13 = 2130837614; - - // aapt resource value: 0x7f02006f - public const int ic_group_collapse_14 = 2130837615; - - // aapt resource value: 0x7f020070 - public const int ic_group_collapse_15 = 2130837616; - - // aapt resource value: 0x7f020071 - public const int ic_group_expand_00 = 2130837617; - - // aapt resource value: 0x7f020072 - public const int ic_group_expand_01 = 2130837618; - - // aapt resource value: 0x7f020073 - public const int ic_group_expand_02 = 2130837619; - - // aapt resource value: 0x7f020074 - public const int ic_group_expand_03 = 2130837620; - - // aapt resource value: 0x7f020075 - public const int ic_group_expand_04 = 2130837621; - - // aapt resource value: 0x7f020076 - public const int ic_group_expand_05 = 2130837622; - - // aapt resource value: 0x7f020077 - public const int ic_group_expand_06 = 2130837623; - - // aapt resource value: 0x7f020078 - public const int ic_group_expand_07 = 2130837624; - - // aapt resource value: 0x7f020079 - public const int ic_group_expand_08 = 2130837625; - - // aapt resource value: 0x7f02007a - public const int ic_group_expand_09 = 2130837626; - - // aapt resource value: 0x7f02007b - public const int ic_group_expand_10 = 2130837627; - - // aapt resource value: 0x7f02007c - public const int ic_group_expand_11 = 2130837628; - - // aapt resource value: 0x7f02007d - public const int ic_group_expand_12 = 2130837629; - - // aapt resource value: 0x7f02007e - public const int ic_group_expand_13 = 2130837630; - - // aapt resource value: 0x7f02007f - public const int ic_group_expand_14 = 2130837631; - - // aapt resource value: 0x7f020080 - public const int ic_group_expand_15 = 2130837632; - - // aapt resource value: 0x7f020081 - public const int ic_media_pause_dark = 2130837633; - - // aapt resource value: 0x7f020082 - public const int ic_media_pause_light = 2130837634; - - // aapt resource value: 0x7f020083 - public const int ic_media_play_dark = 2130837635; - - // aapt resource value: 0x7f020084 - public const int ic_media_play_light = 2130837636; - - // aapt resource value: 0x7f020085 - public const int ic_media_stop_dark = 2130837637; - - // aapt resource value: 0x7f020086 - public const int ic_media_stop_light = 2130837638; - - // aapt resource value: 0x7f020087 - public const int ic_mr_button_connected_00_dark = 2130837639; - - // aapt resource value: 0x7f020088 - public const int ic_mr_button_connected_00_light = 2130837640; - - // aapt resource value: 0x7f020089 - public const int ic_mr_button_connected_01_dark = 2130837641; - - // aapt resource value: 0x7f02008a - public const int ic_mr_button_connected_01_light = 2130837642; - - // aapt resource value: 0x7f02008b - public const int ic_mr_button_connected_02_dark = 2130837643; - - // aapt resource value: 0x7f02008c - public const int ic_mr_button_connected_02_light = 2130837644; - - // aapt resource value: 0x7f02008d - public const int ic_mr_button_connected_03_dark = 2130837645; - - // aapt resource value: 0x7f02008e - public const int ic_mr_button_connected_03_light = 2130837646; - - // aapt resource value: 0x7f02008f - public const int ic_mr_button_connected_04_dark = 2130837647; - - // aapt resource value: 0x7f020090 - public const int ic_mr_button_connected_04_light = 2130837648; - - // aapt resource value: 0x7f020091 - public const int ic_mr_button_connected_05_dark = 2130837649; - - // aapt resource value: 0x7f020092 - public const int ic_mr_button_connected_05_light = 2130837650; - - // aapt resource value: 0x7f020093 - public const int ic_mr_button_connected_06_dark = 2130837651; - - // aapt resource value: 0x7f020094 - public const int ic_mr_button_connected_06_light = 2130837652; - - // aapt resource value: 0x7f020095 - public const int ic_mr_button_connected_07_dark = 2130837653; - - // aapt resource value: 0x7f020096 - public const int ic_mr_button_connected_07_light = 2130837654; - - // aapt resource value: 0x7f020097 - public const int ic_mr_button_connected_08_dark = 2130837655; - - // aapt resource value: 0x7f020098 - public const int ic_mr_button_connected_08_light = 2130837656; - - // aapt resource value: 0x7f020099 - public const int ic_mr_button_connected_09_dark = 2130837657; - - // aapt resource value: 0x7f02009a - public const int ic_mr_button_connected_09_light = 2130837658; - - // aapt resource value: 0x7f02009b - public const int ic_mr_button_connected_10_dark = 2130837659; - - // aapt resource value: 0x7f02009c - public const int ic_mr_button_connected_10_light = 2130837660; - - // aapt resource value: 0x7f02009d - public const int ic_mr_button_connected_11_dark = 2130837661; - - // aapt resource value: 0x7f02009e - public const int ic_mr_button_connected_11_light = 2130837662; - - // aapt resource value: 0x7f02009f - public const int ic_mr_button_connected_12_dark = 2130837663; - - // aapt resource value: 0x7f0200a0 - public const int ic_mr_button_connected_12_light = 2130837664; - - // aapt resource value: 0x7f0200a1 - public const int ic_mr_button_connected_13_dark = 2130837665; - - // aapt resource value: 0x7f0200a2 - public const int ic_mr_button_connected_13_light = 2130837666; - - // aapt resource value: 0x7f0200a3 - public const int ic_mr_button_connected_14_dark = 2130837667; - - // aapt resource value: 0x7f0200a4 - public const int ic_mr_button_connected_14_light = 2130837668; - - // aapt resource value: 0x7f0200a5 - public const int ic_mr_button_connected_15_dark = 2130837669; - - // aapt resource value: 0x7f0200a6 - public const int ic_mr_button_connected_15_light = 2130837670; - - // aapt resource value: 0x7f0200a7 - public const int ic_mr_button_connected_16_dark = 2130837671; - - // aapt resource value: 0x7f0200a8 - public const int ic_mr_button_connected_16_light = 2130837672; - - // aapt resource value: 0x7f0200a9 - public const int ic_mr_button_connected_17_dark = 2130837673; - - // aapt resource value: 0x7f0200aa - public const int ic_mr_button_connected_17_light = 2130837674; - - // aapt resource value: 0x7f0200ab - public const int ic_mr_button_connected_18_dark = 2130837675; - - // aapt resource value: 0x7f0200ac - public const int ic_mr_button_connected_18_light = 2130837676; - - // aapt resource value: 0x7f0200ad - public const int ic_mr_button_connected_19_dark = 2130837677; - - // aapt resource value: 0x7f0200ae - public const int ic_mr_button_connected_19_light = 2130837678; - - // aapt resource value: 0x7f0200af - public const int ic_mr_button_connected_20_dark = 2130837679; - - // aapt resource value: 0x7f0200b0 - public const int ic_mr_button_connected_20_light = 2130837680; - - // aapt resource value: 0x7f0200b1 - public const int ic_mr_button_connected_21_dark = 2130837681; - - // aapt resource value: 0x7f0200b2 - public const int ic_mr_button_connected_21_light = 2130837682; - - // aapt resource value: 0x7f0200b3 - public const int ic_mr_button_connected_22_dark = 2130837683; - - // aapt resource value: 0x7f0200b4 - public const int ic_mr_button_connected_22_light = 2130837684; - - // aapt resource value: 0x7f0200b5 - public const int ic_mr_button_connected_23_dark = 2130837685; - - // aapt resource value: 0x7f0200b6 - public const int ic_mr_button_connected_23_light = 2130837686; - - // aapt resource value: 0x7f0200b7 - public const int ic_mr_button_connected_24_dark = 2130837687; - - // aapt resource value: 0x7f0200b8 - public const int ic_mr_button_connected_24_light = 2130837688; - - // aapt resource value: 0x7f0200b9 - public const int ic_mr_button_connected_25_dark = 2130837689; - - // aapt resource value: 0x7f0200ba - public const int ic_mr_button_connected_25_light = 2130837690; - - // aapt resource value: 0x7f0200bb - public const int ic_mr_button_connected_26_dark = 2130837691; - - // aapt resource value: 0x7f0200bc - public const int ic_mr_button_connected_26_light = 2130837692; - - // aapt resource value: 0x7f0200bd - public const int ic_mr_button_connected_27_dark = 2130837693; - - // aapt resource value: 0x7f0200be - public const int ic_mr_button_connected_27_light = 2130837694; - - // aapt resource value: 0x7f0200bf - public const int ic_mr_button_connected_28_dark = 2130837695; - - // aapt resource value: 0x7f0200c0 - public const int ic_mr_button_connected_28_light = 2130837696; - - // aapt resource value: 0x7f0200c1 - public const int ic_mr_button_connected_29_dark = 2130837697; - - // aapt resource value: 0x7f0200c2 - public const int ic_mr_button_connected_29_light = 2130837698; - - // aapt resource value: 0x7f0200c3 - public const int ic_mr_button_connected_30_dark = 2130837699; - - // aapt resource value: 0x7f0200c4 - public const int ic_mr_button_connected_30_light = 2130837700; - - // aapt resource value: 0x7f0200c5 - public const int ic_mr_button_connecting_00_dark = 2130837701; - - // aapt resource value: 0x7f0200c6 - public const int ic_mr_button_connecting_00_light = 2130837702; - - // aapt resource value: 0x7f0200c7 - public const int ic_mr_button_connecting_01_dark = 2130837703; - - // aapt resource value: 0x7f0200c8 - public const int ic_mr_button_connecting_01_light = 2130837704; - - // aapt resource value: 0x7f0200c9 - public const int ic_mr_button_connecting_02_dark = 2130837705; - - // aapt resource value: 0x7f0200ca - public const int ic_mr_button_connecting_02_light = 2130837706; - - // aapt resource value: 0x7f0200cb - public const int ic_mr_button_connecting_03_dark = 2130837707; - - // aapt resource value: 0x7f0200cc - public const int ic_mr_button_connecting_03_light = 2130837708; - - // aapt resource value: 0x7f0200cd - public const int ic_mr_button_connecting_04_dark = 2130837709; - - // aapt resource value: 0x7f0200ce - public const int ic_mr_button_connecting_04_light = 2130837710; - - // aapt resource value: 0x7f0200cf - public const int ic_mr_button_connecting_05_dark = 2130837711; - - // aapt resource value: 0x7f0200d0 - public const int ic_mr_button_connecting_05_light = 2130837712; - - // aapt resource value: 0x7f0200d1 - public const int ic_mr_button_connecting_06_dark = 2130837713; - - // aapt resource value: 0x7f0200d2 - public const int ic_mr_button_connecting_06_light = 2130837714; - - // aapt resource value: 0x7f0200d3 - public const int ic_mr_button_connecting_07_dark = 2130837715; - - // aapt resource value: 0x7f0200d4 - public const int ic_mr_button_connecting_07_light = 2130837716; - - // aapt resource value: 0x7f0200d5 - public const int ic_mr_button_connecting_08_dark = 2130837717; - - // aapt resource value: 0x7f0200d6 - public const int ic_mr_button_connecting_08_light = 2130837718; - - // aapt resource value: 0x7f0200d7 - public const int ic_mr_button_connecting_09_dark = 2130837719; - - // aapt resource value: 0x7f0200d8 - public const int ic_mr_button_connecting_09_light = 2130837720; - - // aapt resource value: 0x7f0200d9 - public const int ic_mr_button_connecting_10_dark = 2130837721; - - // aapt resource value: 0x7f0200da - public const int ic_mr_button_connecting_10_light = 2130837722; - - // aapt resource value: 0x7f0200db - public const int ic_mr_button_connecting_11_dark = 2130837723; - - // aapt resource value: 0x7f0200dc - public const int ic_mr_button_connecting_11_light = 2130837724; - - // aapt resource value: 0x7f0200dd - public const int ic_mr_button_connecting_12_dark = 2130837725; - - // aapt resource value: 0x7f0200de - public const int ic_mr_button_connecting_12_light = 2130837726; - - // aapt resource value: 0x7f0200df - public const int ic_mr_button_connecting_13_dark = 2130837727; - - // aapt resource value: 0x7f0200e0 - public const int ic_mr_button_connecting_13_light = 2130837728; - - // aapt resource value: 0x7f0200e1 - public const int ic_mr_button_connecting_14_dark = 2130837729; - - // aapt resource value: 0x7f0200e2 - public const int ic_mr_button_connecting_14_light = 2130837730; - - // aapt resource value: 0x7f0200e3 - public const int ic_mr_button_connecting_15_dark = 2130837731; - - // aapt resource value: 0x7f0200e4 - public const int ic_mr_button_connecting_15_light = 2130837732; - - // aapt resource value: 0x7f0200e5 - public const int ic_mr_button_connecting_16_dark = 2130837733; - - // aapt resource value: 0x7f0200e6 - public const int ic_mr_button_connecting_16_light = 2130837734; - - // aapt resource value: 0x7f0200e7 - public const int ic_mr_button_connecting_17_dark = 2130837735; - - // aapt resource value: 0x7f0200e8 - public const int ic_mr_button_connecting_17_light = 2130837736; - - // aapt resource value: 0x7f0200e9 - public const int ic_mr_button_connecting_18_dark = 2130837737; - - // aapt resource value: 0x7f0200ea - public const int ic_mr_button_connecting_18_light = 2130837738; - - // aapt resource value: 0x7f0200eb - public const int ic_mr_button_connecting_19_dark = 2130837739; - - // aapt resource value: 0x7f0200ec - public const int ic_mr_button_connecting_19_light = 2130837740; - - // aapt resource value: 0x7f0200ed - public const int ic_mr_button_connecting_20_dark = 2130837741; - - // aapt resource value: 0x7f0200ee - public const int ic_mr_button_connecting_20_light = 2130837742; - - // aapt resource value: 0x7f0200ef - public const int ic_mr_button_connecting_21_dark = 2130837743; - - // aapt resource value: 0x7f0200f0 - public const int ic_mr_button_connecting_21_light = 2130837744; - - // aapt resource value: 0x7f0200f1 - public const int ic_mr_button_connecting_22_dark = 2130837745; - - // aapt resource value: 0x7f0200f2 - public const int ic_mr_button_connecting_22_light = 2130837746; - - // aapt resource value: 0x7f0200f3 - public const int ic_mr_button_connecting_23_dark = 2130837747; - - // aapt resource value: 0x7f0200f4 - public const int ic_mr_button_connecting_23_light = 2130837748; - - // aapt resource value: 0x7f0200f5 - public const int ic_mr_button_connecting_24_dark = 2130837749; - - // aapt resource value: 0x7f0200f6 - public const int ic_mr_button_connecting_24_light = 2130837750; - - // aapt resource value: 0x7f0200f7 - public const int ic_mr_button_connecting_25_dark = 2130837751; - - // aapt resource value: 0x7f0200f8 - public const int ic_mr_button_connecting_25_light = 2130837752; - - // aapt resource value: 0x7f0200f9 - public const int ic_mr_button_connecting_26_dark = 2130837753; - - // aapt resource value: 0x7f0200fa - public const int ic_mr_button_connecting_26_light = 2130837754; - - // aapt resource value: 0x7f0200fb - public const int ic_mr_button_connecting_27_dark = 2130837755; - - // aapt resource value: 0x7f0200fc - public const int ic_mr_button_connecting_27_light = 2130837756; - - // aapt resource value: 0x7f0200fd - public const int ic_mr_button_connecting_28_dark = 2130837757; - - // aapt resource value: 0x7f0200fe - public const int ic_mr_button_connecting_28_light = 2130837758; - - // aapt resource value: 0x7f0200ff - public const int ic_mr_button_connecting_29_dark = 2130837759; - - // aapt resource value: 0x7f020100 - public const int ic_mr_button_connecting_29_light = 2130837760; - - // aapt resource value: 0x7f020101 - public const int ic_mr_button_connecting_30_dark = 2130837761; - - // aapt resource value: 0x7f020102 - public const int ic_mr_button_connecting_30_light = 2130837762; - - // aapt resource value: 0x7f020103 - public const int ic_mr_button_disabled_dark = 2130837763; - - // aapt resource value: 0x7f020104 - public const int ic_mr_button_disabled_light = 2130837764; - - // aapt resource value: 0x7f020105 - public const int ic_mr_button_disconnected_dark = 2130837765; - - // aapt resource value: 0x7f020106 - public const int ic_mr_button_disconnected_light = 2130837766; - - // aapt resource value: 0x7f020107 - public const int ic_mr_button_grey = 2130837767; - - // aapt resource value: 0x7f020108 - public const int ic_mtrl_chip_checked_black = 2130837768; - - // aapt resource value: 0x7f020109 - public const int ic_mtrl_chip_checked_circle = 2130837769; - - // aapt resource value: 0x7f02010a - public const int ic_mtrl_chip_close_circle = 2130837770; - - // aapt resource value: 0x7f02010b - public const int ic_successstatus = 2130837771; - - // aapt resource value: 0x7f02010c - public const int ic_vol_type_speaker_dark = 2130837772; - - // aapt resource value: 0x7f02010d - public const int ic_vol_type_speaker_group_dark = 2130837773; - - // aapt resource value: 0x7f02010e - public const int ic_vol_type_speaker_group_light = 2130837774; - - // aapt resource value: 0x7f02010f - public const int ic_vol_type_speaker_light = 2130837775; - - // aapt resource value: 0x7f020110 - public const int ic_vol_type_tv_dark = 2130837776; - - // aapt resource value: 0x7f020111 - public const int ic_vol_type_tv_light = 2130837777; - - // aapt resource value: 0x7f020112 - public const int icon = 2130837778; - - // aapt resource value: 0x7f020113 - public const int mr_button_connected_dark = 2130837779; - - // aapt resource value: 0x7f020114 - public const int mr_button_connected_light = 2130837780; - - // aapt resource value: 0x7f020115 - public const int mr_button_connecting_dark = 2130837781; - - // aapt resource value: 0x7f020116 - public const int mr_button_connecting_light = 2130837782; - - // aapt resource value: 0x7f020117 - public const int mr_button_dark = 2130837783; - - // aapt resource value: 0x7f020118 - public const int mr_button_light = 2130837784; - - // aapt resource value: 0x7f020119 - public const int mr_dialog_close_dark = 2130837785; - - // aapt resource value: 0x7f02011a - public const int mr_dialog_close_light = 2130837786; - - // aapt resource value: 0x7f02011b - public const int mr_dialog_material_background_dark = 2130837787; - - // aapt resource value: 0x7f02011c - public const int mr_dialog_material_background_light = 2130837788; - - // aapt resource value: 0x7f02011d - public const int mr_group_collapse = 2130837789; - - // aapt resource value: 0x7f02011e - public const int mr_group_expand = 2130837790; - - // aapt resource value: 0x7f02011f - public const int mr_media_pause_dark = 2130837791; - - // aapt resource value: 0x7f020120 - public const int mr_media_pause_light = 2130837792; - - // aapt resource value: 0x7f020121 - public const int mr_media_play_dark = 2130837793; - - // aapt resource value: 0x7f020122 - public const int mr_media_play_light = 2130837794; - - // aapt resource value: 0x7f020123 - public const int mr_media_stop_dark = 2130837795; - - // aapt resource value: 0x7f020124 - public const int mr_media_stop_light = 2130837796; - - // aapt resource value: 0x7f020125 - public const int mr_vol_type_audiotrack_dark = 2130837797; - - // aapt resource value: 0x7f020126 - public const int mr_vol_type_audiotrack_light = 2130837798; - - // aapt resource value: 0x7f020127 - public const int mtrl_snackbar_background = 2130837799; - - // aapt resource value: 0x7f020128 - public const int mtrl_tabs_default_indicator = 2130837800; - - // aapt resource value: 0x7f020129 - public const int navigation_empty_icon = 2130837801; - - // aapt resource value: 0x7f02012a - public const int notification_action_background = 2130837802; - - // aapt resource value: 0x7f02012b - public const int notification_bg = 2130837803; - - // aapt resource value: 0x7f02012c - public const int notification_bg_low = 2130837804; - - // aapt resource value: 0x7f02012d - public const int notification_bg_low_normal = 2130837805; - - // aapt resource value: 0x7f02012e - public const int notification_bg_low_pressed = 2130837806; - - // aapt resource value: 0x7f02012f - public const int notification_bg_normal = 2130837807; - - // aapt resource value: 0x7f020130 - public const int notification_bg_normal_pressed = 2130837808; - - // aapt resource value: 0x7f020131 - public const int notification_icon_background = 2130837809; - - // aapt resource value: 0x7f020138 - public const int notification_template_icon_bg = 2130837816; - - // aapt resource value: 0x7f020139 - public const int notification_template_icon_low_bg = 2130837817; - - // aapt resource value: 0x7f020132 - public const int notification_tile_bg = 2130837810; - - // aapt resource value: 0x7f020133 - public const int notify_panel_notification_icon_bg = 2130837811; - - // aapt resource value: 0x7f020134 - public const int roundedbg = 2130837812; - - // aapt resource value: 0x7f020135 - public const int roundedbgdark = 2130837813; - - // aapt resource value: 0x7f020136 - public const int tooltip_frame_dark = 2130837814; - - // aapt resource value: 0x7f020137 - public const int tooltip_frame_light = 2130837815; - - static Drawable() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Drawable() - { - } - } - - public partial class Id - { - - // aapt resource value: 0x7f0a003b - public const int ALT = 2131361851; - - // aapt resource value: 0x7f0a003c - public const int CTRL = 2131361852; - - // aapt resource value: 0x7f0a003d - public const int FUNCTION = 2131361853; - - // aapt resource value: 0x7f0a003e - public const int META = 2131361854; - - // aapt resource value: 0x7f0a0024 - public const int MvvmCrossTagId = 2131361828; - - // aapt resource value: 0x7f0a0025 - public const int MvxBindingTagUnique = 2131361829; - - // aapt resource value: 0x7f0a003f - public const int SHIFT = 2131361855; - - // aapt resource value: 0x7f0a0040 - public const int SYM = 2131361856; - - // aapt resource value: 0x7f0a00ea - public const int action0 = 2131362026; - - // aapt resource value: 0x7f0a008f - public const int action_bar = 2131361935; - - // aapt resource value: 0x7f0a0001 - public const int action_bar_activity_content = 2131361793; - - // aapt resource value: 0x7f0a008e - public const int action_bar_container = 2131361934; - - // aapt resource value: 0x7f0a008a - public const int action_bar_root = 2131361930; - - // aapt resource value: 0x7f0a0002 - public const int action_bar_spinner = 2131361794; - - // aapt resource value: 0x7f0a006c - public const int action_bar_subtitle = 2131361900; - - // aapt resource value: 0x7f0a006b - public const int action_bar_title = 2131361899; - - // aapt resource value: 0x7f0a00e7 - public const int action_container = 2131362023; - - // aapt resource value: 0x7f0a0090 - public const int action_context_bar = 2131361936; - - // aapt resource value: 0x7f0a00ee - public const int action_divider = 2131362030; - - // aapt resource value: 0x7f0a00e8 - public const int action_image = 2131362024; - - // aapt resource value: 0x7f0a0003 - public const int action_menu_divider = 2131361795; - - // aapt resource value: 0x7f0a0004 - public const int action_menu_presenter = 2131361796; - - // aapt resource value: 0x7f0a008c - public const int action_mode_bar = 2131361932; - - // aapt resource value: 0x7f0a008b - public const int action_mode_bar_stub = 2131361931; - - // aapt resource value: 0x7f0a006d - public const int action_mode_close_button = 2131361901; - - // aapt resource value: 0x7f0a00e9 - public const int action_text = 2131362025; - - // aapt resource value: 0x7f0a00f7 - public const int actions = 2131362039; - - // aapt resource value: 0x7f0a006e - public const int activity_chooser_view_content = 2131361902; - - // aapt resource value: 0x7f0a0030 - public const int add = 2131361840; - - // aapt resource value: 0x7f0a0081 - public const int alertTitle = 2131361921; - - // aapt resource value: 0x7f0a0066 - public const int all = 2131361894; - - // aapt resource value: 0x7f0a0041 - public const int always = 2131361857; - - // aapt resource value: 0x7f0a0067 - public const int async = 2131361895; - - // aapt resource value: 0x7f0a004f - public const int auto = 2131361871; - - // aapt resource value: 0x7f0a0038 - public const int beginning = 2131361848; - - // aapt resource value: 0x7f0a0068 - public const int blocking = 2131361896; - - // aapt resource value: 0x7f0a0046 - public const int bottom = 2131361862; - - // aapt resource value: 0x7f0a009f - public const int bottomtab_navarea = 2131361951; - - // aapt resource value: 0x7f0a00a0 - public const int bottomtab_tabbar = 2131361952; - - // aapt resource value: 0x7f0a00a2 - public const int browser_actions_header_text = 2131361954; - - // aapt resource value: 0x7f0a00a4 - public const int browser_actions_menu_item_icon = 2131361956; - - // aapt resource value: 0x7f0a00a5 - public const int browser_actions_menu_item_text = 2131361957; - - // aapt resource value: 0x7f0a00a3 - public const int browser_actions_menu_items = 2131361955; - - // aapt resource value: 0x7f0a00a1 - public const int browser_actions_menu_view = 2131361953; - - // aapt resource value: 0x7f0a0074 - public const int buttonPanel = 2131361908; - - // aapt resource value: 0x7f0a00eb - public const int cancel_action = 2131362027; - - // aapt resource value: 0x7f0a004e - public const int center = 2131361870; - - // aapt resource value: 0x7f0a0053 - public const int center_horizontal = 2131361875; - - // aapt resource value: 0x7f0a0054 - public const int center_vertical = 2131361876; - - // aapt resource value: 0x7f0a0088 - public const int checkbox = 2131361928; - - // aapt resource value: 0x7f0a00f3 - public const int chronometer = 2131362035; - - // aapt resource value: 0x7f0a0063 - public const int clip_horizontal = 2131361891; - - // aapt resource value: 0x7f0a0064 - public const int clip_vertical = 2131361892; - - // aapt resource value: 0x7f0a0042 - public const int collapseActionView = 2131361858; - - // aapt resource value: 0x7f0a00a8 - public const int container = 2131361960; - - // aapt resource value: 0x7f0a0084 - public const int content = 2131361924; - - // aapt resource value: 0x7f0a0077 - public const int contentPanel = 2131361911; - - // aapt resource value: 0x7f0a00a9 - public const int coordinator = 2131361961; - - // aapt resource value: 0x7f0a007e - public const int custom = 2131361918; - - // aapt resource value: 0x7f0a007d - public const int customPanel = 2131361917; - - // aapt resource value: 0x7f0a008d - public const int decor_content_parent = 2131361933; - - // aapt resource value: 0x7f0a0071 - public const int default_activity_button = 2131361905; - - // aapt resource value: 0x7f0a00ab - public const int design_bottom_sheet = 2131361963; - - // aapt resource value: 0x7f0a00b0 - public const int design_menu_item_action_area = 2131361968; - - // aapt resource value: 0x7f0a00af - public const int design_menu_item_action_area_stub = 2131361967; - - // aapt resource value: 0x7f0a00ae - public const int design_menu_item_text = 2131361966; - - // aapt resource value: 0x7f0a00ad - public const int design_navigation_view = 2131361965; - - // aapt resource value: 0x7f0a0029 - public const int disableHome = 2131361833; - - // aapt resource value: 0x7f0a0091 - public const int edit_query = 2131361937; - - // aapt resource value: 0x7f0a0039 - public const int end = 2131361849; - - // aapt resource value: 0x7f0a00f9 - public const int end_padder = 2131362041; - - // aapt resource value: 0x7f0a0048 - public const int enterAlways = 2131361864; - - // aapt resource value: 0x7f0a0049 - public const int enterAlwaysCollapsed = 2131361865; - - // aapt resource value: 0x7f0a004a - public const int exitUntilCollapsed = 2131361866; - - // aapt resource value: 0x7f0a006f - public const int expand_activities_button = 2131361903; - - // aapt resource value: 0x7f0a0087 - public const int expanded_menu = 2131361927; - - // aapt resource value: 0x7f0a0060 - public const int fill = 2131361888; - - // aapt resource value: 0x7f0a0065 - public const int fill_horizontal = 2131361893; - - // aapt resource value: 0x7f0a0055 - public const int fill_vertical = 2131361877; - - // aapt resource value: 0x7f0a0061 - public const int filled = 2131361889; - - // aapt resource value: 0x7f0a005e - public const int @fixed = 2131361886; - - // aapt resource value: 0x7f0a00b2 - public const int flyoutcontent_appbar = 2131361970; - - // aapt resource value: 0x7f0a00b3 - public const int flyoutcontent_recycler = 2131361971; - - // aapt resource value: 0x7f0a0069 - public const int forever = 2131361897; - - // aapt resource value: 0x7f0a000a - public const int ghost_view = 2131361802; - - // aapt resource value: 0x7f0a0083 - public const int group_divider = 2131361923; - - // aapt resource value: 0x7f0a0005 - public const int home = 2131361797; - - // aapt resource value: 0x7f0a002a - public const int homeAsUp = 2131361834; - - // aapt resource value: 0x7f0a0073 - public const int icon = 2131361907; - - // aapt resource value: 0x7f0a00f8 - public const int icon_group = 2131362040; - - // aapt resource value: 0x7f0a0043 - public const int ifRoom = 2131361859; - - // aapt resource value: 0x7f0a0070 - public const int image = 2131361904; - - // aapt resource value: 0x7f0a00f4 - public const int info = 2131362036; - - // aapt resource value: 0x7f0a006a - public const int italic = 2131361898; - - // aapt resource value: 0x7f0a0000 - public const int item_touch_helper_previous_elevation = 2131361792; - - // aapt resource value: 0x7f0a0050 - public const int labeled = 2131361872; - - // aapt resource value: 0x7f0a00a7 - public const int largeLabel = 2131361959; - - // aapt resource value: 0x7f0a0056 - public const int left = 2131361878; - - // aapt resource value: 0x7f0a001c - public const int line1 = 2131361820; - - // aapt resource value: 0x7f0a001d - public const int line3 = 2131361821; - - // aapt resource value: 0x7f0a0026 - public const int listMode = 2131361830; - - // aapt resource value: 0x7f0a0072 - public const int list_item = 2131361906; - - // aapt resource value: 0x7f0a00b6 - public const int loadingImage = 2131361974; - - // aapt resource value: 0x7f0a00b4 - public const int loadingProgressBar = 2131361972; - - // aapt resource value: 0x7f0a00b7 - public const int loadingProgressWheel = 2131361975; - - // aapt resource value: 0x7f0a00fa - public const int main_appbar = 2131362042; - - // aapt resource value: 0x7f0a00fc - public const int main_tablayout = 2131362044; - - // aapt resource value: 0x7f0a00fb - public const int main_toolbar = 2131362043; - - // aapt resource value: 0x7f0a00fd - public const int main_viewpager = 2131362045; - - // aapt resource value: 0x7f0a0103 - public const int masked = 2131362051; - - // aapt resource value: 0x7f0a00ed - public const int media_actions = 2131362029; - - // aapt resource value: 0x7f0a009e - public const int message = 2131361950; - - // aapt resource value: 0x7f0a003a - public const int middle = 2131361850; - - // aapt resource value: 0x7f0a005b - public const int mini = 2131361883; - - // aapt resource value: 0x7f0a00d4 - public const int mr_art = 2131362004; - - // aapt resource value: 0x7f0a00c5 - public const int mr_cast_checkbox = 2131361989; - - // aapt resource value: 0x7f0a00be - public const int mr_cast_close_button = 2131361982; - - // aapt resource value: 0x7f0a00b9 - public const int mr_cast_group_icon = 2131361977; - - // aapt resource value: 0x7f0a00ba - public const int mr_cast_group_name = 2131361978; - - // aapt resource value: 0x7f0a00b8 - public const int mr_cast_list = 2131361976; - - // aapt resource value: 0x7f0a00bd - public const int mr_cast_meta = 2131361981; - - // aapt resource value: 0x7f0a00bf - public const int mr_cast_meta_art = 2131361983; - - // aapt resource value: 0x7f0a00c1 - public const int mr_cast_meta_subtitle = 2131361985; - - // aapt resource value: 0x7f0a00c0 - public const int mr_cast_meta_title = 2131361984; - - // aapt resource value: 0x7f0a00c3 - public const int mr_cast_route_icon = 2131361987; - - // aapt resource value: 0x7f0a00c4 - public const int mr_cast_route_name = 2131361988; - - // aapt resource value: 0x7f0a00c2 - public const int mr_cast_stop_button = 2131361986; - - // aapt resource value: 0x7f0a00c6 - public const int mr_cast_volume_layout = 2131361990; - - // aapt resource value: 0x7f0a00c7 - public const int mr_cast_volume_slider = 2131361991; - - // aapt resource value: 0x7f0a00c9 - public const int mr_chooser_list = 2131361993; - - // aapt resource value: 0x7f0a00cc - public const int mr_chooser_route_desc = 2131361996; - - // aapt resource value: 0x7f0a00ca - public const int mr_chooser_route_icon = 2131361994; - - // aapt resource value: 0x7f0a00cb - public const int mr_chooser_route_name = 2131361995; - - // aapt resource value: 0x7f0a00c8 - public const int mr_chooser_title = 2131361992; - - // aapt resource value: 0x7f0a00d1 - public const int mr_close = 2131362001; - - // aapt resource value: 0x7f0a00d7 - public const int mr_control_divider = 2131362007; - - // aapt resource value: 0x7f0a00e2 - public const int mr_control_playback_ctrl = 2131362018; - - // aapt resource value: 0x7f0a00e5 - public const int mr_control_subtitle = 2131362021; - - // aapt resource value: 0x7f0a00e4 - public const int mr_control_title = 2131362020; - - // aapt resource value: 0x7f0a00e3 - public const int mr_control_title_container = 2131362019; - - // aapt resource value: 0x7f0a00d2 - public const int mr_custom_control = 2131362002; - - // aapt resource value: 0x7f0a00d3 - public const int mr_default_control = 2131362003; - - // aapt resource value: 0x7f0a00ce - public const int mr_dialog_area = 2131361998; - - // aapt resource value: 0x7f0a00dd - public const int mr_dialog_header_name = 2131362013; - - // aapt resource value: 0x7f0a00cd - public const int mr_expandable_area = 2131361997; - - // aapt resource value: 0x7f0a00e6 - public const int mr_group_expand_collapse = 2131362022; - - // aapt resource value: 0x7f0a00bb - public const int mr_group_volume_route_name = 2131361979; - - // aapt resource value: 0x7f0a00bc - public const int mr_group_volume_slider = 2131361980; - - // aapt resource value: 0x7f0a00d5 - public const int mr_media_main_control = 2131362005; - - // aapt resource value: 0x7f0a00d0 - public const int mr_name = 2131362000; - - // aapt resource value: 0x7f0a00de - public const int mr_picker_close_button = 2131362014; - - // aapt resource value: 0x7f0a00df - public const int mr_picker_list = 2131362015; - - // aapt resource value: 0x7f0a00e0 - public const int mr_picker_route_icon = 2131362016; - - // aapt resource value: 0x7f0a00e1 - public const int mr_picker_route_name = 2131362017; - - // aapt resource value: 0x7f0a00d6 - public const int mr_playback_control = 2131362006; - - // aapt resource value: 0x7f0a00cf - public const int mr_title_bar = 2131361999; - - // aapt resource value: 0x7f0a00d8 - public const int mr_volume_control = 2131362008; - - // aapt resource value: 0x7f0a00d9 - public const int mr_volume_group_list = 2131362009; - - // aapt resource value: 0x7f0a00db - public const int mr_volume_item_icon = 2131362011; - - // aapt resource value: 0x7f0a00dc - public const int mr_volume_slider = 2131362012; - - // aapt resource value: 0x7f0a0014 - public const int mtrl_child_content_container = 2131361812; - - // aapt resource value: 0x7f0a0015 - public const int mtrl_internal_children_alpha_tag = 2131361813; - - // aapt resource value: 0x7f0a0031 - public const int multiply = 2131361841; - - // aapt resource value: 0x7f0a00ac - public const int navigation_header_container = 2131361964; - - // aapt resource value: 0x7f0a0044 - public const int never = 2131361860; - - // aapt resource value: 0x7f0a002b - public const int none = 2131361835; - - // aapt resource value: 0x7f0a0027 - public const int normal = 2131361831; - - // aapt resource value: 0x7f0a00f6 - public const int notification_background = 2131362038; - - // aapt resource value: 0x7f0a00f0 - public const int notification_main_column = 2131362032; - - // aapt resource value: 0x7f0a00ef - public const int notification_main_column_container = 2131362031; - - // aapt resource value: 0x7f0a0062 - public const int outline = 2131361890; - - // aapt resource value: 0x7f0a0059 - public const int parallax = 2131361881; - - // aapt resource value: 0x7f0a0076 - public const int parentPanel = 2131361910; - - // aapt resource value: 0x7f0a000b - public const int parent_matrix = 2131361803; - - // aapt resource value: 0x7f0a005a - public const int pin = 2131361882; - - // aapt resource value: 0x7f0a0006 - public const int progress_circular = 2131361798; - - // aapt resource value: 0x7f0a0007 - public const int progress_horizontal = 2131361799; - - // aapt resource value: 0x7f0a0089 - public const int radio = 2131361929; - - // aapt resource value: 0x7f0a0057 - public const int right = 2131361879; - - // aapt resource value: 0x7f0a00f5 - public const int right_icon = 2131362037; - - // aapt resource value: 0x7f0a00f1 - public const int right_side = 2131362033; - - // aapt resource value: 0x7f0a000c - public const int save_image_matrix = 2131361804; - - // aapt resource value: 0x7f0a000d - public const int save_non_transition_alpha = 2131361805; - - // aapt resource value: 0x7f0a000e - public const int save_scale_type = 2131361806; - - // aapt resource value: 0x7f0a0032 - public const int screen = 2131361842; - - // aapt resource value: 0x7f0a004b - public const int scroll = 2131361867; - - // aapt resource value: 0x7f0a007c - public const int scrollIndicatorDown = 2131361916; - - // aapt resource value: 0x7f0a0078 - public const int scrollIndicatorUp = 2131361912; - - // aapt resource value: 0x7f0a0079 - public const int scrollView = 2131361913; - - // aapt resource value: 0x7f0a005f - public const int scrollable = 2131361887; - - // aapt resource value: 0x7f0a0093 - public const int search_badge = 2131361939; - - // aapt resource value: 0x7f0a0092 - public const int search_bar = 2131361938; - - // aapt resource value: 0x7f0a0094 - public const int search_button = 2131361940; - - // aapt resource value: 0x7f0a0099 - public const int search_close_btn = 2131361945; - - // aapt resource value: 0x7f0a0095 - public const int search_edit_frame = 2131361941; - - // aapt resource value: 0x7f0a009b - public const int search_go_btn = 2131361947; - - // aapt resource value: 0x7f0a0096 - public const int search_mag_icon = 2131361942; - - // aapt resource value: 0x7f0a0097 - public const int search_plate = 2131361943; - - // aapt resource value: 0x7f0a0098 - public const int search_src_text = 2131361944; - - // aapt resource value: 0x7f0a009c - public const int search_voice_btn = 2131361948; - - // aapt resource value: 0x7f0a009d - public const int select_dialog_listview = 2131361949; - - // aapt resource value: 0x7f0a0051 - public const int selected = 2131361873; - - // aapt resource value: 0x7f0a00fe - public const int shellcontent_appbar = 2131362046; - - // aapt resource value: 0x7f0a00ff - public const int shellcontent_toolbar = 2131362047; - - // aapt resource value: 0x7f0a0085 - public const int shortcut = 2131361925; - - // aapt resource value: 0x7f0a002c - public const int showCustom = 2131361836; - - // aapt resource value: 0x7f0a002d - public const int showHome = 2131361837; - - // aapt resource value: 0x7f0a002e - public const int showTitle = 2131361838; - - // aapt resource value: 0x7f0a0100 - public const int sliding_tabs = 2131362048; - - // aapt resource value: 0x7f0a00a6 - public const int smallLabel = 2131361958; - - // aapt resource value: 0x7f0a0016 - public const int snackbar_action = 2131361814; - - // aapt resource value: 0x7f0a0017 - public const int snackbar_text = 2131361815; - - // aapt resource value: 0x7f0a004c - public const int snap = 2131361868; - - // aapt resource value: 0x7f0a004d - public const int snapMargins = 2131361869; - - // aapt resource value: 0x7f0a0075 - public const int spacer = 2131361909; - - // aapt resource value: 0x7f0a0008 - public const int split_action_bar = 2131361800; - - // aapt resource value: 0x7f0a0033 - public const int src_atop = 2131361843; - - // aapt resource value: 0x7f0a0034 - public const int src_in = 2131361844; - - // aapt resource value: 0x7f0a0035 - public const int src_over = 2131361845; - - // aapt resource value: 0x7f0a0058 - public const int start = 2131361880; - - // aapt resource value: 0x7f0a00ec - public const int status_bar_latest_event_content = 2131362028; - - // aapt resource value: 0x7f0a005d - public const int stretch = 2131361885; - - // aapt resource value: 0x7f0a0086 - public const int submenuarrow = 2131361926; - - // aapt resource value: 0x7f0a009a - public const int submit_area = 2131361946; - - // aapt resource value: 0x7f0a0028 - public const int tabMode = 2131361832; - - // aapt resource value: 0x7f0a001e - public const int tag_transition_group = 2131361822; - - // aapt resource value: 0x7f0a001f - public const int tag_unhandled_key_event_manager = 2131361823; - - // aapt resource value: 0x7f0a0020 - public const int tag_unhandled_key_listeners = 2131361824; - - // aapt resource value: 0x7f0a0021 - public const int text = 2131361825; - - // aapt resource value: 0x7f0a0022 - public const int text2 = 2131361826; - - // aapt resource value: 0x7f0a007b - public const int textSpacerNoButtons = 2131361915; - - // aapt resource value: 0x7f0a007a - public const int textSpacerNoTitle = 2131361914; - - // aapt resource value: 0x7f0a005c - public const int textStart = 2131361884; - - // aapt resource value: 0x7f0a00b5 - public const int textViewStatus = 2131361973; - - // aapt resource value: 0x7f0a00b1 - public const int text_input_password_toggle = 2131361969; - - // aapt resource value: 0x7f0a0018 - public const int textinput_counter = 2131361816; - - // aapt resource value: 0x7f0a0019 - public const int textinput_error = 2131361817; - - // aapt resource value: 0x7f0a001a - public const int textinput_helper_text = 2131361818; - - // aapt resource value: 0x7f0a00f2 - public const int time = 2131362034; - - // aapt resource value: 0x7f0a0023 - public const int title = 2131361827; - - // aapt resource value: 0x7f0a0082 - public const int titleDividerNoCustom = 2131361922; - - // aapt resource value: 0x7f0a0080 - public const int title_template = 2131361920; - - // aapt resource value: 0x7f0a0101 - public const int toolbar = 2131362049; - - // aapt resource value: 0x7f0a0047 - public const int top = 2131361863; - - // aapt resource value: 0x7f0a007f - public const int topPanel = 2131361919; - - // aapt resource value: 0x7f0a00aa - public const int touch_outside = 2131361962; - - // aapt resource value: 0x7f0a000f - public const int transition_current_scene = 2131361807; - - // aapt resource value: 0x7f0a0010 - public const int transition_layout_save = 2131361808; - - // aapt resource value: 0x7f0a0011 - public const int transition_position = 2131361809; - - // aapt resource value: 0x7f0a0012 - public const int transition_scene_layoutid_cache = 2131361810; - - // aapt resource value: 0x7f0a0013 - public const int transition_transform = 2131361811; - - // aapt resource value: 0x7f0a0036 - public const int uniform = 2131361846; - - // aapt resource value: 0x7f0a0052 - public const int unlabeled = 2131361874; - - // aapt resource value: 0x7f0a0009 - public const int up = 2131361801; - - // aapt resource value: 0x7f0a002f - public const int useLogo = 2131361839; - - // aapt resource value: 0x7f0a001b - public const int view_offset_helper = 2131361819; - - // aapt resource value: 0x7f0a0102 - public const int visible = 2131362050; - - // aapt resource value: 0x7f0a00da - public const int volume_item_container = 2131362010; - - // aapt resource value: 0x7f0a0045 - public const int withText = 2131361861; - - // aapt resource value: 0x7f0a0037 - public const int wrap_content = 2131361847; - - static Id() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Id() - { - } - } - - public partial class Integer - { - - // aapt resource value: 0x7f0c0004 - public const int abc_config_activityDefaultDur = 2131492868; - - // aapt resource value: 0x7f0c0005 - public const int abc_config_activityShortDur = 2131492869; - - // aapt resource value: 0x7f0c0009 - public const int app_bar_elevation_anim_duration = 2131492873; - - // aapt resource value: 0x7f0c000a - public const int bottom_sheet_slide_duration = 2131492874; - - // aapt resource value: 0x7f0c0006 - public const int cancel_button_image_alpha = 2131492870; - - // aapt resource value: 0x7f0c0007 - public const int config_tooltipAnimTime = 2131492871; - - // aapt resource value: 0x7f0c0008 - public const int design_snackbar_text_max_lines = 2131492872; - - // aapt resource value: 0x7f0c000b - public const int design_tab_indicator_anim_duration_ms = 2131492875; - - // aapt resource value: 0x7f0c000c - public const int hide_password_duration = 2131492876; - - // aapt resource value: 0x7f0c0000 - public const int mr_controller_volume_group_list_animation_duration_ms = 2131492864; - - // aapt resource value: 0x7f0c0001 - public const int mr_controller_volume_group_list_fade_in_duration_ms = 2131492865; - - // aapt resource value: 0x7f0c0002 - public const int mr_controller_volume_group_list_fade_out_duration_ms = 2131492866; - - // aapt resource value: 0x7f0c0003 - public const int mr_update_routes_delay_ms = 2131492867; - - // aapt resource value: 0x7f0c000d - public const int mtrl_btn_anim_delay_ms = 2131492877; - - // aapt resource value: 0x7f0c000e - public const int mtrl_btn_anim_duration_ms = 2131492878; - - // aapt resource value: 0x7f0c000f - public const int mtrl_chip_anim_duration = 2131492879; - - // aapt resource value: 0x7f0c0010 - public const int mtrl_tab_indicator_anim_duration_ms = 2131492880; - - // aapt resource value: 0x7f0c0011 - public const int show_password_duration = 2131492881; - - // aapt resource value: 0x7f0c0012 - public const int status_bar_notification_info_maxnum = 2131492882; - - static Integer() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Integer() - { - } - } - - public partial class Interpolator - { - - // aapt resource value: 0x7f060000 - public const int mr_fast_out_slow_in = 2131099648; - - // aapt resource value: 0x7f060001 - public const int mr_linear_out_slow_in = 2131099649; - - // aapt resource value: 0x7f060002 - public const int mtrl_fast_out_linear_in = 2131099650; - - // aapt resource value: 0x7f060003 - public const int mtrl_fast_out_slow_in = 2131099651; - - // aapt resource value: 0x7f060004 - public const int mtrl_linear = 2131099652; - - // aapt resource value: 0x7f060005 - public const int mtrl_linear_out_slow_in = 2131099653; - - static Interpolator() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Interpolator() - { - } - } - - public partial class Layout - { - - // aapt resource value: 0x7f030000 - public const int abc_action_bar_title_item = 2130903040; - - // aapt resource value: 0x7f030001 - public const int abc_action_bar_up_container = 2130903041; - - // aapt resource value: 0x7f030002 - public const int abc_action_menu_item_layout = 2130903042; - - // aapt resource value: 0x7f030003 - public const int abc_action_menu_layout = 2130903043; - - // aapt resource value: 0x7f030004 - public const int abc_action_mode_bar = 2130903044; - - // aapt resource value: 0x7f030005 - public const int abc_action_mode_close_item_material = 2130903045; - - // aapt resource value: 0x7f030006 - public const int abc_activity_chooser_view = 2130903046; - - // aapt resource value: 0x7f030007 - public const int abc_activity_chooser_view_list_item = 2130903047; - - // aapt resource value: 0x7f030008 - public const int abc_alert_dialog_button_bar_material = 2130903048; - - // aapt resource value: 0x7f030009 - public const int abc_alert_dialog_material = 2130903049; - - // aapt resource value: 0x7f03000a - public const int abc_alert_dialog_title_material = 2130903050; - - // aapt resource value: 0x7f03000b - public const int abc_cascading_menu_item_layout = 2130903051; - - // aapt resource value: 0x7f03000c - public const int abc_dialog_title_material = 2130903052; - - // aapt resource value: 0x7f03000d - public const int abc_expanded_menu_layout = 2130903053; - - // aapt resource value: 0x7f03000e - public const int abc_list_menu_item_checkbox = 2130903054; - - // aapt resource value: 0x7f03000f - public const int abc_list_menu_item_icon = 2130903055; - - // aapt resource value: 0x7f030010 - public const int abc_list_menu_item_layout = 2130903056; - - // aapt resource value: 0x7f030011 - public const int abc_list_menu_item_radio = 2130903057; - - // aapt resource value: 0x7f030012 - public const int abc_popup_menu_header_item_layout = 2130903058; - - // aapt resource value: 0x7f030013 - public const int abc_popup_menu_item_layout = 2130903059; - - // aapt resource value: 0x7f030014 - public const int abc_screen_content_include = 2130903060; - - // aapt resource value: 0x7f030015 - public const int abc_screen_simple = 2130903061; - - // aapt resource value: 0x7f030016 - public const int abc_screen_simple_overlay_action_mode = 2130903062; - - // aapt resource value: 0x7f030017 - public const int abc_screen_toolbar = 2130903063; - - // aapt resource value: 0x7f030018 - public const int abc_search_dropdown_item_icons_2line = 2130903064; - - // aapt resource value: 0x7f030019 - public const int abc_search_view = 2130903065; - - // aapt resource value: 0x7f03001a - public const int abc_select_dialog_material = 2130903066; - - // aapt resource value: 0x7f03001b - public const int abc_tooltip = 2130903067; - - // aapt resource value: 0x7f03001c - public const int BottomTabLayout = 2130903068; - - // aapt resource value: 0x7f03001d - public const int browser_actions_context_menu_page = 2130903069; - - // aapt resource value: 0x7f03001e - public const int browser_actions_context_menu_row = 2130903070; - - // aapt resource value: 0x7f03001f - public const int design_bottom_navigation_item = 2130903071; - - // aapt resource value: 0x7f030020 - public const int design_bottom_sheet_dialog = 2130903072; - - // aapt resource value: 0x7f030021 - public const int design_layout_snackbar = 2130903073; - - // aapt resource value: 0x7f030022 - public const int design_layout_snackbar_include = 2130903074; - - // aapt resource value: 0x7f030023 - public const int design_layout_tab_icon = 2130903075; - - // aapt resource value: 0x7f030024 - public const int design_layout_tab_text = 2130903076; - - // aapt resource value: 0x7f030025 - public const int design_menu_item_action_area = 2130903077; - - // aapt resource value: 0x7f030026 - public const int design_navigation_item = 2130903078; - - // aapt resource value: 0x7f030027 - public const int design_navigation_item_header = 2130903079; - - // aapt resource value: 0x7f030028 - public const int design_navigation_item_separator = 2130903080; - - // aapt resource value: 0x7f030029 - public const int design_navigation_item_subheader = 2130903081; - - // aapt resource value: 0x7f03002a - public const int design_navigation_menu = 2130903082; - - // aapt resource value: 0x7f03002b - public const int design_navigation_menu_item = 2130903083; - - // aapt resource value: 0x7f03002c - public const int design_text_input_password_icon = 2130903084; - - // aapt resource value: 0x7f03002d - public const int FlyoutContent = 2130903085; - - // aapt resource value: 0x7f03002e - public const int loading = 2130903086; - - // aapt resource value: 0x7f03002f - public const int loadingimage = 2130903087; - - // aapt resource value: 0x7f030030 - public const int loadingprogress = 2130903088; - - // aapt resource value: 0x7f030031 - public const int mr_cast_dialog = 2130903089; - - // aapt resource value: 0x7f030032 - public const int mr_cast_group_item = 2130903090; - - // aapt resource value: 0x7f030033 - public const int mr_cast_group_volume_item = 2130903091; - - // aapt resource value: 0x7f030034 - public const int mr_cast_media_metadata = 2130903092; - - // aapt resource value: 0x7f030035 - public const int mr_cast_route_item = 2130903093; - - // aapt resource value: 0x7f030036 - public const int mr_chooser_dialog = 2130903094; - - // aapt resource value: 0x7f030037 - public const int mr_chooser_list_item = 2130903095; - - // aapt resource value: 0x7f030038 - public const int mr_controller_material_dialog_b = 2130903096; - - // aapt resource value: 0x7f030039 - public const int mr_controller_volume_item = 2130903097; - - // aapt resource value: 0x7f03003a - public const int mr_dialog_header_item = 2130903098; - - // aapt resource value: 0x7f03003b - public const int mr_picker_dialog = 2130903099; - - // aapt resource value: 0x7f03003c - public const int mr_picker_route_item = 2130903100; - - // aapt resource value: 0x7f03003d - public const int mr_playback_control = 2130903101; - - // aapt resource value: 0x7f03003e - public const int mr_volume_control = 2130903102; - - // aapt resource value: 0x7f03003f - public const int mtrl_layout_snackbar = 2130903103; - - // aapt resource value: 0x7f030040 - public const int mtrl_layout_snackbar_include = 2130903104; - - // aapt resource value: 0x7f030041 - public const int notification_action = 2130903105; - - // aapt resource value: 0x7f030042 - public const int notification_action_tombstone = 2130903106; - - // aapt resource value: 0x7f030043 - public const int notification_media_action = 2130903107; - - // aapt resource value: 0x7f030044 - public const int notification_media_cancel_action = 2130903108; - - // aapt resource value: 0x7f030045 - public const int notification_template_big_media = 2130903109; - - // aapt resource value: 0x7f030046 - public const int notification_template_big_media_custom = 2130903110; - - // aapt resource value: 0x7f030047 - public const int notification_template_big_media_narrow = 2130903111; - - // aapt resource value: 0x7f030048 - public const int notification_template_big_media_narrow_custom = 2130903112; - - // aapt resource value: 0x7f030049 - public const int notification_template_custom_big = 2130903113; - - // aapt resource value: 0x7f03004a - public const int notification_template_icon_group = 2130903114; - - // aapt resource value: 0x7f03004b - public const int notification_template_lines_media = 2130903115; - - // aapt resource value: 0x7f03004c - public const int notification_template_media = 2130903116; - - // aapt resource value: 0x7f03004d - public const int notification_template_media_custom = 2130903117; - - // aapt resource value: 0x7f03004e - public const int notification_template_part_chronometer = 2130903118; - - // aapt resource value: 0x7f03004f - public const int notification_template_part_time = 2130903119; - - // aapt resource value: 0x7f030050 - public const int RootLayout = 2130903120; - - // aapt resource value: 0x7f030051 - public const int select_dialog_item_material = 2130903121; - - // aapt resource value: 0x7f030052 - public const int select_dialog_multichoice_material = 2130903122; - - // aapt resource value: 0x7f030053 - public const int select_dialog_singlechoice_material = 2130903123; - - // aapt resource value: 0x7f030054 - public const int ShellContent = 2130903124; - - // aapt resource value: 0x7f030055 - public const int SplashScreen = 2130903125; - - // aapt resource value: 0x7f030056 - public const int support_simple_spinner_dropdown_item = 2130903126; - - // aapt resource value: 0x7f030057 - public const int tabs = 2130903127; - - // aapt resource value: 0x7f030058 - public const int toolbar = 2130903128; - - static Layout() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Layout() - { - } - } - - public partial class String - { - - // aapt resource value: 0x7f0b0018 - public const int abc_action_bar_home_description = 2131427352; - - // aapt resource value: 0x7f0b0019 - public const int abc_action_bar_up_description = 2131427353; - - // aapt resource value: 0x7f0b001a - public const int abc_action_menu_overflow_description = 2131427354; - - // aapt resource value: 0x7f0b001b - public const int abc_action_mode_done = 2131427355; - - // aapt resource value: 0x7f0b001c - public const int abc_activity_chooser_view_see_all = 2131427356; - - // aapt resource value: 0x7f0b001d - public const int abc_activitychooserview_choose_application = 2131427357; - - // aapt resource value: 0x7f0b001e - public const int abc_capital_off = 2131427358; - - // aapt resource value: 0x7f0b001f - public const int abc_capital_on = 2131427359; - - // aapt resource value: 0x7f0b0034 - public const int abc_font_family_body_1_material = 2131427380; - - // aapt resource value: 0x7f0b0035 - public const int abc_font_family_body_2_material = 2131427381; - - // aapt resource value: 0x7f0b0036 - public const int abc_font_family_button_material = 2131427382; - - // aapt resource value: 0x7f0b0037 - public const int abc_font_family_caption_material = 2131427383; - - // aapt resource value: 0x7f0b0038 - public const int abc_font_family_display_1_material = 2131427384; - - // aapt resource value: 0x7f0b0039 - public const int abc_font_family_display_2_material = 2131427385; - - // aapt resource value: 0x7f0b003a - public const int abc_font_family_display_3_material = 2131427386; - - // aapt resource value: 0x7f0b003b - public const int abc_font_family_display_4_material = 2131427387; - - // aapt resource value: 0x7f0b003c - public const int abc_font_family_headline_material = 2131427388; - - // aapt resource value: 0x7f0b003d - public const int abc_font_family_menu_material = 2131427389; - - // aapt resource value: 0x7f0b003e - public const int abc_font_family_subhead_material = 2131427390; - - // aapt resource value: 0x7f0b003f - public const int abc_font_family_title_material = 2131427391; - - // aapt resource value: 0x7f0b0020 - public const int abc_menu_alt_shortcut_label = 2131427360; - - // aapt resource value: 0x7f0b0021 - public const int abc_menu_ctrl_shortcut_label = 2131427361; - - // aapt resource value: 0x7f0b0022 - public const int abc_menu_delete_shortcut_label = 2131427362; - - // aapt resource value: 0x7f0b0023 - public const int abc_menu_enter_shortcut_label = 2131427363; - - // aapt resource value: 0x7f0b0024 - public const int abc_menu_function_shortcut_label = 2131427364; - - // aapt resource value: 0x7f0b0025 - public const int abc_menu_meta_shortcut_label = 2131427365; - - // aapt resource value: 0x7f0b0026 - public const int abc_menu_shift_shortcut_label = 2131427366; - - // aapt resource value: 0x7f0b0027 - public const int abc_menu_space_shortcut_label = 2131427367; - - // aapt resource value: 0x7f0b0028 - public const int abc_menu_sym_shortcut_label = 2131427368; - - // aapt resource value: 0x7f0b0029 - public const int abc_prepend_shortcut_label = 2131427369; - - // aapt resource value: 0x7f0b002a - public const int abc_search_hint = 2131427370; - - // aapt resource value: 0x7f0b002b - public const int abc_searchview_description_clear = 2131427371; - - // aapt resource value: 0x7f0b002c - public const int abc_searchview_description_query = 2131427372; - - // aapt resource value: 0x7f0b002d - public const int abc_searchview_description_search = 2131427373; - - // aapt resource value: 0x7f0b002e - public const int abc_searchview_description_submit = 2131427374; - - // aapt resource value: 0x7f0b002f - public const int abc_searchview_description_voice = 2131427375; - - // aapt resource value: 0x7f0b0030 - public const int abc_shareactionprovider_share_with = 2131427376; - - // aapt resource value: 0x7f0b0031 - public const int abc_shareactionprovider_share_with_application = 2131427377; - - // aapt resource value: 0x7f0b0032 - public const int abc_toolbar_collapse_description = 2131427378; - - // aapt resource value: 0x7f0b0040 - public const int appbar_scrolling_view_behavior = 2131427392; - - // aapt resource value: 0x7f0b0041 - public const int bottom_sheet_behavior = 2131427393; - - // aapt resource value: 0x7f0b0042 - public const int character_counter_content_description = 2131427394; - - // aapt resource value: 0x7f0b0043 - public const int character_counter_pattern = 2131427395; - - // aapt resource value: 0x7f0b004e - public const int fab_scroll_shrink_grow_autohide_behavior = 2131427406; - - // aapt resource value: 0x7f0b0044 - public const int fab_transformation_scrim_behavior = 2131427396; - - // aapt resource value: 0x7f0b0045 - public const int fab_transformation_sheet_behavior = 2131427397; - - // aapt resource value: 0x7f0b0046 - public const int hide_bottom_view_on_scroll_behavior = 2131427398; - - // aapt resource value: 0x7f0b0050 - public const int library_name = 2131427408; - - // aapt resource value: 0x7f0b0000 - public const int mr_button_content_description = 2131427328; - - // aapt resource value: 0x7f0b0001 - public const int mr_cast_button_connected = 2131427329; - - // aapt resource value: 0x7f0b0002 - public const int mr_cast_button_connecting = 2131427330; - - // aapt resource value: 0x7f0b0003 - public const int mr_cast_button_disconnected = 2131427331; - - // aapt resource value: 0x7f0b0015 - public const int mr_cast_dialog_title_view_placeholder = 2131427349; - - // aapt resource value: 0x7f0b0004 - public const int mr_chooser_searching = 2131427332; - - // aapt resource value: 0x7f0b0005 - public const int mr_chooser_title = 2131427333; - - // aapt resource value: 0x7f0b0006 - public const int mr_controller_album_art = 2131427334; - - // aapt resource value: 0x7f0b0007 - public const int mr_controller_casting_screen = 2131427335; - - // aapt resource value: 0x7f0b0008 - public const int mr_controller_close_description = 2131427336; - - // aapt resource value: 0x7f0b0009 - public const int mr_controller_collapse_group = 2131427337; - - // aapt resource value: 0x7f0b000a - public const int mr_controller_disconnect = 2131427338; - - // aapt resource value: 0x7f0b000b - public const int mr_controller_expand_group = 2131427339; - - // aapt resource value: 0x7f0b000c - public const int mr_controller_no_info_available = 2131427340; - - // aapt resource value: 0x7f0b000d - public const int mr_controller_no_media_selected = 2131427341; - - // aapt resource value: 0x7f0b000e - public const int mr_controller_pause = 2131427342; - - // aapt resource value: 0x7f0b000f - public const int mr_controller_play = 2131427343; - - // aapt resource value: 0x7f0b0010 - public const int mr_controller_stop = 2131427344; - - // aapt resource value: 0x7f0b0011 - public const int mr_controller_stop_casting = 2131427345; - - // aapt resource value: 0x7f0b0012 - public const int mr_controller_volume_slider = 2131427346; - - // aapt resource value: 0x7f0b0016 - public const int mr_dialog_device_header = 2131427350; - - // aapt resource value: 0x7f0b0017 - public const int mr_dialog_route_header = 2131427351; - - // aapt resource value: 0x7f0b0013 - public const int mr_system_route_name = 2131427347; - - // aapt resource value: 0x7f0b0014 - public const int mr_user_route_category_name = 2131427348; - - // aapt resource value: 0x7f0b0047 - public const int mtrl_chip_close_icon_content_description = 2131427399; - - // aapt resource value: 0x7f0b0048 - public const int password_toggle_content_description = 2131427400; - - // aapt resource value: 0x7f0b0049 - public const int path_password_eye = 2131427401; - - // aapt resource value: 0x7f0b004a - public const int path_password_eye_mask_strike_through = 2131427402; - - // aapt resource value: 0x7f0b004b - public const int path_password_eye_mask_visible = 2131427403; - - // aapt resource value: 0x7f0b004c - public const int path_password_strike_through = 2131427404; - - // aapt resource value: 0x7f0b0033 - public const int search_menu_title = 2131427379; - - // aapt resource value: 0x7f0b004d - public const int status_bar_notification_info_overflow = 2131427405; - - // aapt resource value: 0x7f0b004f - public const int view_scroll_translation_autohide_behavior = 2131427407; - - static String() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private String() - { - } - } - - public partial class Style - { - - // aapt resource value: 0x7f080099 - public const int AlertDialog_AppCompat = 2131230873; - - // aapt resource value: 0x7f08009a - public const int AlertDialog_AppCompat_Light = 2131230874; - - // aapt resource value: 0x7f08009b - public const int Animation_AppCompat_Dialog = 2131230875; - - // aapt resource value: 0x7f08009c - public const int Animation_AppCompat_DropDownUp = 2131230876; - - // aapt resource value: 0x7f08009d - public const int Animation_AppCompat_Tooltip = 2131230877; - - // aapt resource value: 0x7f08016e - public const int Animation_Design_BottomSheetDialog = 2131231086; - - // aapt resource value: 0x7f08009e - public const int Base_AlertDialog_AppCompat = 2131230878; - - // aapt resource value: 0x7f08009f - public const int Base_AlertDialog_AppCompat_Light = 2131230879; - - // aapt resource value: 0x7f0800a0 - public const int Base_Animation_AppCompat_Dialog = 2131230880; - - // aapt resource value: 0x7f0800a1 - public const int Base_Animation_AppCompat_DropDownUp = 2131230881; - - // aapt resource value: 0x7f0800a2 - public const int Base_Animation_AppCompat_Tooltip = 2131230882; - - // aapt resource value: 0x7f08000d - public const int Base_CardView = 2131230733; - - // aapt resource value: 0x7f0800a3 - public const int Base_DialogWindowTitle_AppCompat = 2131230883; - - // aapt resource value: 0x7f0800a4 - public const int Base_DialogWindowTitleBackground_AppCompat = 2131230884; - - // aapt resource value: 0x7f08002d - public const int Base_TextAppearance_AppCompat = 2131230765; - - // aapt resource value: 0x7f08002e - public const int Base_TextAppearance_AppCompat_Body1 = 2131230766; - - // aapt resource value: 0x7f08002f - public const int Base_TextAppearance_AppCompat_Body2 = 2131230767; - - // aapt resource value: 0x7f080030 - public const int Base_TextAppearance_AppCompat_Button = 2131230768; - - // aapt resource value: 0x7f080031 - public const int Base_TextAppearance_AppCompat_Caption = 2131230769; - - // aapt resource value: 0x7f080032 - public const int Base_TextAppearance_AppCompat_Display1 = 2131230770; - - // aapt resource value: 0x7f080033 - public const int Base_TextAppearance_AppCompat_Display2 = 2131230771; - - // aapt resource value: 0x7f080034 - public const int Base_TextAppearance_AppCompat_Display3 = 2131230772; - - // aapt resource value: 0x7f080035 - public const int Base_TextAppearance_AppCompat_Display4 = 2131230773; - - // aapt resource value: 0x7f080036 - public const int Base_TextAppearance_AppCompat_Headline = 2131230774; - - // aapt resource value: 0x7f080037 - public const int Base_TextAppearance_AppCompat_Inverse = 2131230775; - - // aapt resource value: 0x7f080038 - public const int Base_TextAppearance_AppCompat_Large = 2131230776; - - // aapt resource value: 0x7f080039 - public const int Base_TextAppearance_AppCompat_Large_Inverse = 2131230777; - - // aapt resource value: 0x7f08003a - public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131230778; - - // aapt resource value: 0x7f08003b - public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131230779; - - // aapt resource value: 0x7f08003c - public const int Base_TextAppearance_AppCompat_Medium = 2131230780; - - // aapt resource value: 0x7f08003d - public const int Base_TextAppearance_AppCompat_Medium_Inverse = 2131230781; - - // aapt resource value: 0x7f08003e - public const int Base_TextAppearance_AppCompat_Menu = 2131230782; - - // aapt resource value: 0x7f0800a5 - public const int Base_TextAppearance_AppCompat_SearchResult = 2131230885; - - // aapt resource value: 0x7f08003f - public const int Base_TextAppearance_AppCompat_SearchResult_Subtitle = 2131230783; - - // aapt resource value: 0x7f080040 - public const int Base_TextAppearance_AppCompat_SearchResult_Title = 2131230784; - - // aapt resource value: 0x7f080041 - public const int Base_TextAppearance_AppCompat_Small = 2131230785; - - // aapt resource value: 0x7f080042 - public const int Base_TextAppearance_AppCompat_Small_Inverse = 2131230786; - - // aapt resource value: 0x7f080043 - public const int Base_TextAppearance_AppCompat_Subhead = 2131230787; - - // aapt resource value: 0x7f0800a6 - public const int Base_TextAppearance_AppCompat_Subhead_Inverse = 2131230886; - - // aapt resource value: 0x7f080044 - public const int Base_TextAppearance_AppCompat_Title = 2131230788; - - // aapt resource value: 0x7f0800a7 - public const int Base_TextAppearance_AppCompat_Title_Inverse = 2131230887; - - // aapt resource value: 0x7f0800a8 - public const int Base_TextAppearance_AppCompat_Tooltip = 2131230888; - - // aapt resource value: 0x7f080088 - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131230856; - - // aapt resource value: 0x7f080045 - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131230789; - - // aapt resource value: 0x7f080046 - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131230790; - - // aapt resource value: 0x7f080047 - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title = 2131230791; - - // aapt resource value: 0x7f080048 - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131230792; - - // aapt resource value: 0x7f080049 - public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131230793; - - // aapt resource value: 0x7f08004a - public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Title = 2131230794; - - // aapt resource value: 0x7f08004b - public const int Base_TextAppearance_AppCompat_Widget_Button = 2131230795; - - // aapt resource value: 0x7f08008f - public const int Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131230863; - - // aapt resource value: 0x7f080090 - public const int Base_TextAppearance_AppCompat_Widget_Button_Colored = 2131230864; - - // aapt resource value: 0x7f080089 - public const int Base_TextAppearance_AppCompat_Widget_Button_Inverse = 2131230857; - - // aapt resource value: 0x7f0800a9 - public const int Base_TextAppearance_AppCompat_Widget_DropDownItem = 2131230889; - - // aapt resource value: 0x7f08004c - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131230796; - - // aapt resource value: 0x7f08004d - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131230797; - - // aapt resource value: 0x7f08004e - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131230798; - - // aapt resource value: 0x7f08004f - public const int Base_TextAppearance_AppCompat_Widget_Switch = 2131230799; - - // aapt resource value: 0x7f080050 - public const int Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131230800; - - // aapt resource value: 0x7f0800aa - public const int Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131230890; - - // aapt resource value: 0x7f080051 - public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131230801; - - // aapt resource value: 0x7f080052 - public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Title = 2131230802; - - // aapt resource value: 0x7f080053 - public const int Base_Theme_AppCompat = 2131230803; - - // aapt resource value: 0x7f0800ab - public const int Base_Theme_AppCompat_CompactMenu = 2131230891; - - // aapt resource value: 0x7f080054 - public const int Base_Theme_AppCompat_Dialog = 2131230804; - - // aapt resource value: 0x7f0800ac - public const int Base_Theme_AppCompat_Dialog_Alert = 2131230892; - - // aapt resource value: 0x7f0800ad - public const int Base_Theme_AppCompat_Dialog_FixedSize = 2131230893; - - // aapt resource value: 0x7f0800ae - public const int Base_Theme_AppCompat_Dialog_MinWidth = 2131230894; - - // aapt resource value: 0x7f080011 - public const int Base_Theme_AppCompat_DialogWhenLarge = 2131230737; - - // aapt resource value: 0x7f080055 - public const int Base_Theme_AppCompat_Light = 2131230805; - - // aapt resource value: 0x7f0800af - public const int Base_Theme_AppCompat_Light_DarkActionBar = 2131230895; - - // aapt resource value: 0x7f080056 - public const int Base_Theme_AppCompat_Light_Dialog = 2131230806; - - // aapt resource value: 0x7f0800b0 - public const int Base_Theme_AppCompat_Light_Dialog_Alert = 2131230896; - - // aapt resource value: 0x7f0800b1 - public const int Base_Theme_AppCompat_Light_Dialog_FixedSize = 2131230897; - - // aapt resource value: 0x7f0800b2 - public const int Base_Theme_AppCompat_Light_Dialog_MinWidth = 2131230898; - - // aapt resource value: 0x7f080012 - public const int Base_Theme_AppCompat_Light_DialogWhenLarge = 2131230738; - - // aapt resource value: 0x7f08016f - public const int Base_Theme_MaterialComponents = 2131231087; - - // aapt resource value: 0x7f080170 - public const int Base_Theme_MaterialComponents_Bridge = 2131231088; - - // aapt resource value: 0x7f080171 - public const int Base_Theme_MaterialComponents_CompactMenu = 2131231089; - - // aapt resource value: 0x7f080172 - public const int Base_Theme_MaterialComponents_Dialog = 2131231090; - - // aapt resource value: 0x7f080173 - public const int Base_Theme_MaterialComponents_Dialog_Alert = 2131231091; - - // aapt resource value: 0x7f080174 - public const int Base_Theme_MaterialComponents_Dialog_FixedSize = 2131231092; - - // aapt resource value: 0x7f080175 - public const int Base_Theme_MaterialComponents_Dialog_MinWidth = 2131231093; - - // aapt resource value: 0x7f080168 - public const int Base_Theme_MaterialComponents_DialogWhenLarge = 2131231080; - - // aapt resource value: 0x7f080176 - public const int Base_Theme_MaterialComponents_Light = 2131231094; - - // aapt resource value: 0x7f080177 - public const int Base_Theme_MaterialComponents_Light_Bridge = 2131231095; - - // aapt resource value: 0x7f080178 - public const int Base_Theme_MaterialComponents_Light_DarkActionBar = 2131231096; - - // aapt resource value: 0x7f080179 - public const int Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131231097; - - // aapt resource value: 0x7f08017a - public const int Base_Theme_MaterialComponents_Light_Dialog = 2131231098; - - // aapt resource value: 0x7f08017b - public const int Base_Theme_MaterialComponents_Light_Dialog_Alert = 2131231099; - - // aapt resource value: 0x7f08017c - public const int Base_Theme_MaterialComponents_Light_Dialog_FixedSize = 2131231100; - - // aapt resource value: 0x7f08017d - public const int Base_Theme_MaterialComponents_Light_Dialog_MinWidth = 2131231101; - - // aapt resource value: 0x7f080169 - public const int Base_Theme_MaterialComponents_Light_DialogWhenLarge = 2131231081; - - // aapt resource value: 0x7f0800b3 - public const int Base_ThemeOverlay_AppCompat = 2131230899; - - // aapt resource value: 0x7f0800b4 - public const int Base_ThemeOverlay_AppCompat_ActionBar = 2131230900; - - // aapt resource value: 0x7f0800b5 - public const int Base_ThemeOverlay_AppCompat_Dark = 2131230901; - - // aapt resource value: 0x7f0800b6 - public const int Base_ThemeOverlay_AppCompat_Dark_ActionBar = 2131230902; - - // aapt resource value: 0x7f080057 - public const int Base_ThemeOverlay_AppCompat_Dialog = 2131230807; - - // aapt resource value: 0x7f0800b7 - public const int Base_ThemeOverlay_AppCompat_Dialog_Alert = 2131230903; - - // aapt resource value: 0x7f0800b8 - public const int Base_ThemeOverlay_AppCompat_Light = 2131230904; - - // aapt resource value: 0x7f08017e - public const int Base_ThemeOverlay_MaterialComponents_Dialog = 2131231102; - - // aapt resource value: 0x7f08017f - public const int Base_ThemeOverlay_MaterialComponents_Dialog_Alert = 2131231103; - - // aapt resource value: 0x7f080180 - public const int Base_V14_Theme_MaterialComponents = 2131231104; - - // aapt resource value: 0x7f080181 - public const int Base_V14_Theme_MaterialComponents_Bridge = 2131231105; - - // aapt resource value: 0x7f080182 - public const int Base_V14_Theme_MaterialComponents_Dialog = 2131231106; - - // aapt resource value: 0x7f080183 - public const int Base_V14_Theme_MaterialComponents_Light = 2131231107; - - // aapt resource value: 0x7f080184 - public const int Base_V14_Theme_MaterialComponents_Light_Bridge = 2131231108; - - // aapt resource value: 0x7f080185 - public const int Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131231109; - - // aapt resource value: 0x7f080186 - public const int Base_V14_Theme_MaterialComponents_Light_Dialog = 2131231110; - - // aapt resource value: 0x7f080187 - public const int Base_V14_ThemeOverlay_MaterialComponents_Dialog = 2131231111; - - // aapt resource value: 0x7f080188 - public const int Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = 2131231112; - - // aapt resource value: 0x7f080058 - public const int Base_V21_Theme_AppCompat = 2131230808; - - // aapt resource value: 0x7f080059 - public const int Base_V21_Theme_AppCompat_Dialog = 2131230809; - - // aapt resource value: 0x7f08005a - public const int Base_V21_Theme_AppCompat_Light = 2131230810; - - // aapt resource value: 0x7f08005b - public const int Base_V21_Theme_AppCompat_Light_Dialog = 2131230811; - - // aapt resource value: 0x7f08005c - public const int Base_V21_ThemeOverlay_AppCompat_Dialog = 2131230812; - - // aapt resource value: 0x7f080086 - public const int Base_V22_Theme_AppCompat = 2131230854; - - // aapt resource value: 0x7f080087 - public const int Base_V22_Theme_AppCompat_Light = 2131230855; - - // aapt resource value: 0x7f08008a - public const int Base_V23_Theme_AppCompat = 2131230858; - - // aapt resource value: 0x7f08008b - public const int Base_V23_Theme_AppCompat_Light = 2131230859; - - // aapt resource value: 0x7f080093 - public const int Base_V26_Theme_AppCompat = 2131230867; - - // aapt resource value: 0x7f080094 - public const int Base_V26_Theme_AppCompat_Light = 2131230868; - - // aapt resource value: 0x7f080095 - public const int Base_V26_Widget_AppCompat_Toolbar = 2131230869; - - // aapt resource value: 0x7f080097 - public const int Base_V28_Theme_AppCompat = 2131230871; - - // aapt resource value: 0x7f080098 - public const int Base_V28_Theme_AppCompat_Light = 2131230872; - - // aapt resource value: 0x7f0800b9 - public const int Base_V7_Theme_AppCompat = 2131230905; - - // aapt resource value: 0x7f0800ba - public const int Base_V7_Theme_AppCompat_Dialog = 2131230906; - - // aapt resource value: 0x7f0800bb - public const int Base_V7_Theme_AppCompat_Light = 2131230907; - - // aapt resource value: 0x7f0800bc - public const int Base_V7_Theme_AppCompat_Light_Dialog = 2131230908; - - // aapt resource value: 0x7f0800bd - public const int Base_V7_ThemeOverlay_AppCompat_Dialog = 2131230909; - - // aapt resource value: 0x7f0800be - public const int Base_V7_Widget_AppCompat_AutoCompleteTextView = 2131230910; - - // aapt resource value: 0x7f0800bf - public const int Base_V7_Widget_AppCompat_EditText = 2131230911; - - // aapt resource value: 0x7f0800c0 - public const int Base_V7_Widget_AppCompat_Toolbar = 2131230912; - - // aapt resource value: 0x7f0800c1 - public const int Base_Widget_AppCompat_ActionBar = 2131230913; - - // aapt resource value: 0x7f0800c2 - public const int Base_Widget_AppCompat_ActionBar_Solid = 2131230914; - - // aapt resource value: 0x7f0800c3 - public const int Base_Widget_AppCompat_ActionBar_TabBar = 2131230915; - - // aapt resource value: 0x7f08005d - public const int Base_Widget_AppCompat_ActionBar_TabText = 2131230813; - - // aapt resource value: 0x7f08005e - public const int Base_Widget_AppCompat_ActionBar_TabView = 2131230814; - - // aapt resource value: 0x7f08005f - public const int Base_Widget_AppCompat_ActionButton = 2131230815; - - // aapt resource value: 0x7f080060 - public const int Base_Widget_AppCompat_ActionButton_CloseMode = 2131230816; - - // aapt resource value: 0x7f080061 - public const int Base_Widget_AppCompat_ActionButton_Overflow = 2131230817; - - // aapt resource value: 0x7f0800c4 - public const int Base_Widget_AppCompat_ActionMode = 2131230916; - - // aapt resource value: 0x7f0800c5 - public const int Base_Widget_AppCompat_ActivityChooserView = 2131230917; - - // aapt resource value: 0x7f080062 - public const int Base_Widget_AppCompat_AutoCompleteTextView = 2131230818; - - // aapt resource value: 0x7f080063 - public const int Base_Widget_AppCompat_Button = 2131230819; - - // aapt resource value: 0x7f080064 - public const int Base_Widget_AppCompat_Button_Borderless = 2131230820; - - // aapt resource value: 0x7f080065 - public const int Base_Widget_AppCompat_Button_Borderless_Colored = 2131230821; - - // aapt resource value: 0x7f0800c6 - public const int Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131230918; - - // aapt resource value: 0x7f08008c - public const int Base_Widget_AppCompat_Button_Colored = 2131230860; - - // aapt resource value: 0x7f080066 - public const int Base_Widget_AppCompat_Button_Small = 2131230822; - - // aapt resource value: 0x7f080067 - public const int Base_Widget_AppCompat_ButtonBar = 2131230823; - - // aapt resource value: 0x7f0800c7 - public const int Base_Widget_AppCompat_ButtonBar_AlertDialog = 2131230919; - - // aapt resource value: 0x7f080068 - public const int Base_Widget_AppCompat_CompoundButton_CheckBox = 2131230824; - - // aapt resource value: 0x7f080069 - public const int Base_Widget_AppCompat_CompoundButton_RadioButton = 2131230825; - - // aapt resource value: 0x7f0800c8 - public const int Base_Widget_AppCompat_CompoundButton_Switch = 2131230920; - - // aapt resource value: 0x7f080010 - public const int Base_Widget_AppCompat_DrawerArrowToggle = 2131230736; - - // aapt resource value: 0x7f0800c9 - public const int Base_Widget_AppCompat_DrawerArrowToggle_Common = 2131230921; - - // aapt resource value: 0x7f08006a - public const int Base_Widget_AppCompat_DropDownItem_Spinner = 2131230826; - - // aapt resource value: 0x7f08006b - public const int Base_Widget_AppCompat_EditText = 2131230827; - - // aapt resource value: 0x7f08006c - public const int Base_Widget_AppCompat_ImageButton = 2131230828; - - // aapt resource value: 0x7f0800ca - public const int Base_Widget_AppCompat_Light_ActionBar = 2131230922; - - // aapt resource value: 0x7f0800cb - public const int Base_Widget_AppCompat_Light_ActionBar_Solid = 2131230923; - - // aapt resource value: 0x7f0800cc - public const int Base_Widget_AppCompat_Light_ActionBar_TabBar = 2131230924; - - // aapt resource value: 0x7f08006d - public const int Base_Widget_AppCompat_Light_ActionBar_TabText = 2131230829; - - // aapt resource value: 0x7f08006e - public const int Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131230830; - - // aapt resource value: 0x7f08006f - public const int Base_Widget_AppCompat_Light_ActionBar_TabView = 2131230831; - - // aapt resource value: 0x7f080070 - public const int Base_Widget_AppCompat_Light_PopupMenu = 2131230832; - - // aapt resource value: 0x7f080071 - public const int Base_Widget_AppCompat_Light_PopupMenu_Overflow = 2131230833; - - // aapt resource value: 0x7f0800cd - public const int Base_Widget_AppCompat_ListMenuView = 2131230925; - - // aapt resource value: 0x7f080072 - public const int Base_Widget_AppCompat_ListPopupWindow = 2131230834; - - // aapt resource value: 0x7f080073 - public const int Base_Widget_AppCompat_ListView = 2131230835; - - // aapt resource value: 0x7f080074 - public const int Base_Widget_AppCompat_ListView_DropDown = 2131230836; - - // aapt resource value: 0x7f080075 - public const int Base_Widget_AppCompat_ListView_Menu = 2131230837; - - // aapt resource value: 0x7f080076 - public const int Base_Widget_AppCompat_PopupMenu = 2131230838; - - // aapt resource value: 0x7f080077 - public const int Base_Widget_AppCompat_PopupMenu_Overflow = 2131230839; - - // aapt resource value: 0x7f0800ce - public const int Base_Widget_AppCompat_PopupWindow = 2131230926; - - // aapt resource value: 0x7f080078 - public const int Base_Widget_AppCompat_ProgressBar = 2131230840; - - // aapt resource value: 0x7f080079 - public const int Base_Widget_AppCompat_ProgressBar_Horizontal = 2131230841; - - // aapt resource value: 0x7f08007a - public const int Base_Widget_AppCompat_RatingBar = 2131230842; - - // aapt resource value: 0x7f08008d - public const int Base_Widget_AppCompat_RatingBar_Indicator = 2131230861; - - // aapt resource value: 0x7f08008e - public const int Base_Widget_AppCompat_RatingBar_Small = 2131230862; - - // aapt resource value: 0x7f0800cf - public const int Base_Widget_AppCompat_SearchView = 2131230927; - - // aapt resource value: 0x7f0800d0 - public const int Base_Widget_AppCompat_SearchView_ActionBar = 2131230928; - - // aapt resource value: 0x7f08007b - public const int Base_Widget_AppCompat_SeekBar = 2131230843; - - // aapt resource value: 0x7f0800d1 - public const int Base_Widget_AppCompat_SeekBar_Discrete = 2131230929; - - // aapt resource value: 0x7f08007c - public const int Base_Widget_AppCompat_Spinner = 2131230844; - - // aapt resource value: 0x7f080013 - public const int Base_Widget_AppCompat_Spinner_Underlined = 2131230739; - - // aapt resource value: 0x7f08007d - public const int Base_Widget_AppCompat_TextView_SpinnerItem = 2131230845; - - // aapt resource value: 0x7f080096 - public const int Base_Widget_AppCompat_Toolbar = 2131230870; - - // aapt resource value: 0x7f08007e - public const int Base_Widget_AppCompat_Toolbar_Button_Navigation = 2131230846; - - // aapt resource value: 0x7f080189 - public const int Base_Widget_Design_TabLayout = 2131231113; - - // aapt resource value: 0x7f08018a - public const int Base_Widget_MaterialComponents_Chip = 2131231114; - - // aapt resource value: 0x7f08018b - public const int Base_Widget_MaterialComponents_TextInputEditText = 2131231115; - - // aapt resource value: 0x7f08018c - public const int Base_Widget_MaterialComponents_TextInputLayout = 2131231116; - - // aapt resource value: 0x7f08000c - public const int CardView = 2131230732; - - // aapt resource value: 0x7f08000e - public const int CardView_Dark = 2131230734; - - // aapt resource value: 0x7f08000f - public const int CardView_Light = 2131230735; - - // aapt resource value: 0x7f080201 - public const int MyTheme = 2131231233; - - // aapt resource value: 0x7f080202 - public const int MyTheme_Base = 2131231234; - - // aapt resource value: 0x7f08007f - public const int Platform_AppCompat = 2131230847; - - // aapt resource value: 0x7f080080 - public const int Platform_AppCompat_Light = 2131230848; - - // aapt resource value: 0x7f08018d - public const int Platform_MaterialComponents = 2131231117; - - // aapt resource value: 0x7f08018e - public const int Platform_MaterialComponents_Dialog = 2131231118; - - // aapt resource value: 0x7f08018f - public const int Platform_MaterialComponents_Light = 2131231119; - - // aapt resource value: 0x7f080190 - public const int Platform_MaterialComponents_Light_Dialog = 2131231120; - - // aapt resource value: 0x7f080081 - public const int Platform_ThemeOverlay_AppCompat = 2131230849; - - // aapt resource value: 0x7f080082 - public const int Platform_ThemeOverlay_AppCompat_Dark = 2131230850; - - // aapt resource value: 0x7f080083 - public const int Platform_ThemeOverlay_AppCompat_Light = 2131230851; - - // aapt resource value: 0x7f080084 - public const int Platform_V21_AppCompat = 2131230852; - - // aapt resource value: 0x7f080085 - public const int Platform_V21_AppCompat_Light = 2131230853; - - // aapt resource value: 0x7f080091 - public const int Platform_V25_AppCompat = 2131230865; - - // aapt resource value: 0x7f080092 - public const int Platform_V25_AppCompat_Light = 2131230866; - - // aapt resource value: 0x7f0800d2 - public const int Platform_Widget_AppCompat_Spinner = 2131230930; - - // aapt resource value: 0x7f08001c - public const int RtlOverlay_DialogWindowTitle_AppCompat = 2131230748; - - // aapt resource value: 0x7f08001d - public const int RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = 2131230749; - - // aapt resource value: 0x7f08001e - public const int RtlOverlay_Widget_AppCompat_DialogTitle_Icon = 2131230750; - - // aapt resource value: 0x7f08001f - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem = 2131230751; - - // aapt resource value: 0x7f080020 - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = 2131230752; - - // aapt resource value: 0x7f080021 - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = 2131230753; - - // aapt resource value: 0x7f080022 - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = 2131230754; - - // aapt resource value: 0x7f080023 - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = 2131230755; - - // aapt resource value: 0x7f080024 - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = 2131230756; - - // aapt resource value: 0x7f080025 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown = 2131230757; - - // aapt resource value: 0x7f080026 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = 2131230758; - - // aapt resource value: 0x7f080027 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = 2131230759; - - // aapt resource value: 0x7f080028 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Query = 2131230760; - - // aapt resource value: 0x7f080029 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Text = 2131230761; - - // aapt resource value: 0x7f08002a - public const int RtlOverlay_Widget_AppCompat_SearchView_MagIcon = 2131230762; - - // aapt resource value: 0x7f08002b - public const int RtlUnderlay_Widget_AppCompat_ActionButton = 2131230763; - - // aapt resource value: 0x7f08002c - public const int RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = 2131230764; - - // aapt resource value: 0x7f0800d3 - public const int TextAppearance_AppCompat = 2131230931; - - // aapt resource value: 0x7f0800d4 - public const int TextAppearance_AppCompat_Body1 = 2131230932; - - // aapt resource value: 0x7f0800d5 - public const int TextAppearance_AppCompat_Body2 = 2131230933; - - // aapt resource value: 0x7f0800d6 - public const int TextAppearance_AppCompat_Button = 2131230934; - - // aapt resource value: 0x7f0800d7 - public const int TextAppearance_AppCompat_Caption = 2131230935; - - // aapt resource value: 0x7f0800d8 - public const int TextAppearance_AppCompat_Display1 = 2131230936; - - // aapt resource value: 0x7f0800d9 - public const int TextAppearance_AppCompat_Display2 = 2131230937; - - // aapt resource value: 0x7f0800da - public const int TextAppearance_AppCompat_Display3 = 2131230938; - - // aapt resource value: 0x7f0800db - public const int TextAppearance_AppCompat_Display4 = 2131230939; - - // aapt resource value: 0x7f0800dc - public const int TextAppearance_AppCompat_Headline = 2131230940; - - // aapt resource value: 0x7f0800dd - public const int TextAppearance_AppCompat_Inverse = 2131230941; - - // aapt resource value: 0x7f0800de - public const int TextAppearance_AppCompat_Large = 2131230942; - - // aapt resource value: 0x7f0800df - public const int TextAppearance_AppCompat_Large_Inverse = 2131230943; - - // aapt resource value: 0x7f0800e0 - public const int TextAppearance_AppCompat_Light_SearchResult_Subtitle = 2131230944; - - // aapt resource value: 0x7f0800e1 - public const int TextAppearance_AppCompat_Light_SearchResult_Title = 2131230945; - - // aapt resource value: 0x7f0800e2 - public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131230946; - - // aapt resource value: 0x7f0800e3 - public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131230947; - - // aapt resource value: 0x7f0800e4 - public const int TextAppearance_AppCompat_Medium = 2131230948; - - // aapt resource value: 0x7f0800e5 - public const int TextAppearance_AppCompat_Medium_Inverse = 2131230949; - - // aapt resource value: 0x7f0800e6 - public const int TextAppearance_AppCompat_Menu = 2131230950; - - // aapt resource value: 0x7f0800e7 - public const int TextAppearance_AppCompat_SearchResult_Subtitle = 2131230951; - - // aapt resource value: 0x7f0800e8 - public const int TextAppearance_AppCompat_SearchResult_Title = 2131230952; - - // aapt resource value: 0x7f0800e9 - public const int TextAppearance_AppCompat_Small = 2131230953; - - // aapt resource value: 0x7f0800ea - public const int TextAppearance_AppCompat_Small_Inverse = 2131230954; - - // aapt resource value: 0x7f0800eb - public const int TextAppearance_AppCompat_Subhead = 2131230955; - - // aapt resource value: 0x7f0800ec - public const int TextAppearance_AppCompat_Subhead_Inverse = 2131230956; - - // aapt resource value: 0x7f0800ed - public const int TextAppearance_AppCompat_Title = 2131230957; - - // aapt resource value: 0x7f0800ee - public const int TextAppearance_AppCompat_Title_Inverse = 2131230958; - - // aapt resource value: 0x7f08001b - public const int TextAppearance_AppCompat_Tooltip = 2131230747; - - // aapt resource value: 0x7f0800ef - public const int TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131230959; - - // aapt resource value: 0x7f0800f0 - public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131230960; - - // aapt resource value: 0x7f0800f1 - public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131230961; - - // aapt resource value: 0x7f0800f2 - public const int TextAppearance_AppCompat_Widget_ActionBar_Title = 2131230962; - - // aapt resource value: 0x7f0800f3 - public const int TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131230963; - - // aapt resource value: 0x7f0800f4 - public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131230964; - - // aapt resource value: 0x7f0800f5 - public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = 2131230965; - - // aapt resource value: 0x7f0800f6 - public const int TextAppearance_AppCompat_Widget_ActionMode_Title = 2131230966; - - // aapt resource value: 0x7f0800f7 - public const int TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = 2131230967; - - // aapt resource value: 0x7f0800f8 - public const int TextAppearance_AppCompat_Widget_Button = 2131230968; - - // aapt resource value: 0x7f0800f9 - public const int TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131230969; - - // aapt resource value: 0x7f0800fa - public const int TextAppearance_AppCompat_Widget_Button_Colored = 2131230970; - - // aapt resource value: 0x7f0800fb - public const int TextAppearance_AppCompat_Widget_Button_Inverse = 2131230971; - - // aapt resource value: 0x7f0800fc - public const int TextAppearance_AppCompat_Widget_DropDownItem = 2131230972; - - // aapt resource value: 0x7f0800fd - public const int TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131230973; - - // aapt resource value: 0x7f0800fe - public const int TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131230974; - - // aapt resource value: 0x7f0800ff - public const int TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131230975; - - // aapt resource value: 0x7f080100 - public const int TextAppearance_AppCompat_Widget_Switch = 2131230976; - - // aapt resource value: 0x7f080101 - public const int TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131230977; - - // aapt resource value: 0x7f0801f9 - public const int TextAppearance_Compat_Notification = 2131231225; - - // aapt resource value: 0x7f0801fa - public const int TextAppearance_Compat_Notification_Info = 2131231226; - - // aapt resource value: 0x7f080162 - public const int TextAppearance_Compat_Notification_Info_Media = 2131231074; - - // aapt resource value: 0x7f0801ff - public const int TextAppearance_Compat_Notification_Line2 = 2131231231; - - // aapt resource value: 0x7f080166 - public const int TextAppearance_Compat_Notification_Line2_Media = 2131231078; - - // aapt resource value: 0x7f080163 - public const int TextAppearance_Compat_Notification_Media = 2131231075; - - // aapt resource value: 0x7f0801fb - public const int TextAppearance_Compat_Notification_Time = 2131231227; - - // aapt resource value: 0x7f080164 - public const int TextAppearance_Compat_Notification_Time_Media = 2131231076; - - // aapt resource value: 0x7f0801fc - public const int TextAppearance_Compat_Notification_Title = 2131231228; - - // aapt resource value: 0x7f080165 - public const int TextAppearance_Compat_Notification_Title_Media = 2131231077; - - // aapt resource value: 0x7f080191 - public const int TextAppearance_Design_CollapsingToolbar_Expanded = 2131231121; - - // aapt resource value: 0x7f080192 - public const int TextAppearance_Design_Counter = 2131231122; - - // aapt resource value: 0x7f080193 - public const int TextAppearance_Design_Counter_Overflow = 2131231123; - - // aapt resource value: 0x7f080194 - public const int TextAppearance_Design_Error = 2131231124; - - // aapt resource value: 0x7f080195 - public const int TextAppearance_Design_HelperText = 2131231125; - - // aapt resource value: 0x7f080196 - public const int TextAppearance_Design_Hint = 2131231126; - - // aapt resource value: 0x7f080197 - public const int TextAppearance_Design_Snackbar_Message = 2131231127; - - // aapt resource value: 0x7f080198 - public const int TextAppearance_Design_Tab = 2131231128; - - // aapt resource value: 0x7f080199 - public const int TextAppearance_MaterialComponents_Body1 = 2131231129; - - // aapt resource value: 0x7f08019a - public const int TextAppearance_MaterialComponents_Body2 = 2131231130; - - // aapt resource value: 0x7f08016a - public const int TextAppearance_MaterialComponents_Button = 2131231082; - - // aapt resource value: 0x7f08019b - public const int TextAppearance_MaterialComponents_Caption = 2131231131; - - // aapt resource value: 0x7f08019c - public const int TextAppearance_MaterialComponents_Chip = 2131231132; - - // aapt resource value: 0x7f08019d - public const int TextAppearance_MaterialComponents_Headline1 = 2131231133; - - // aapt resource value: 0x7f08019e - public const int TextAppearance_MaterialComponents_Headline2 = 2131231134; - - // aapt resource value: 0x7f08019f - public const int TextAppearance_MaterialComponents_Headline3 = 2131231135; - - // aapt resource value: 0x7f0801a0 - public const int TextAppearance_MaterialComponents_Headline4 = 2131231136; - - // aapt resource value: 0x7f0801a1 - public const int TextAppearance_MaterialComponents_Headline5 = 2131231137; - - // aapt resource value: 0x7f08016b - public const int TextAppearance_MaterialComponents_Headline6 = 2131231083; - - // aapt resource value: 0x7f08016c - public const int TextAppearance_MaterialComponents_Overline = 2131231084; - - // aapt resource value: 0x7f0801a2 - public const int TextAppearance_MaterialComponents_Subtitle1 = 2131231138; - - // aapt resource value: 0x7f08016d - public const int TextAppearance_MaterialComponents_Subtitle2 = 2131231085; - - // aapt resource value: 0x7f0801a3 - public const int TextAppearance_MaterialComponents_Tab = 2131231139; - - // aapt resource value: 0x7f080001 - public const int TextAppearance_MediaRouter_PrimaryText = 2131230721; - - // aapt resource value: 0x7f080002 - public const int TextAppearance_MediaRouter_SecondaryText = 2131230722; - - // aapt resource value: 0x7f080003 - public const int TextAppearance_MediaRouter_Title = 2131230723; - - // aapt resource value: 0x7f080102 - public const int TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131230978; - - // aapt resource value: 0x7f080103 - public const int TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131230979; - - // aapt resource value: 0x7f080104 - public const int TextAppearance_Widget_AppCompat_Toolbar_Title = 2131230980; - - // aapt resource value: 0x7f080105 - public const int Theme_AppCompat = 2131230981; - - // aapt resource value: 0x7f080106 - public const int Theme_AppCompat_CompactMenu = 2131230982; - - // aapt resource value: 0x7f080014 - public const int Theme_AppCompat_DayNight = 2131230740; - - // aapt resource value: 0x7f080015 - public const int Theme_AppCompat_DayNight_DarkActionBar = 2131230741; - - // aapt resource value: 0x7f080016 - public const int Theme_AppCompat_DayNight_Dialog = 2131230742; - - // aapt resource value: 0x7f080017 - public const int Theme_AppCompat_DayNight_Dialog_Alert = 2131230743; - - // aapt resource value: 0x7f080018 - public const int Theme_AppCompat_DayNight_Dialog_MinWidth = 2131230744; - - // aapt resource value: 0x7f080019 - public const int Theme_AppCompat_DayNight_DialogWhenLarge = 2131230745; - - // aapt resource value: 0x7f08001a - public const int Theme_AppCompat_DayNight_NoActionBar = 2131230746; - - // aapt resource value: 0x7f080107 - public const int Theme_AppCompat_Dialog = 2131230983; - - // aapt resource value: 0x7f080108 - public const int Theme_AppCompat_Dialog_Alert = 2131230984; - - // aapt resource value: 0x7f080109 - public const int Theme_AppCompat_Dialog_MinWidth = 2131230985; - - // aapt resource value: 0x7f08010a - public const int Theme_AppCompat_DialogWhenLarge = 2131230986; - - // aapt resource value: 0x7f08010b - public const int Theme_AppCompat_Light = 2131230987; - - // aapt resource value: 0x7f08010c - public const int Theme_AppCompat_Light_DarkActionBar = 2131230988; - - // aapt resource value: 0x7f08010d - public const int Theme_AppCompat_Light_Dialog = 2131230989; - - // aapt resource value: 0x7f08010e - public const int Theme_AppCompat_Light_Dialog_Alert = 2131230990; - - // aapt resource value: 0x7f08010f - public const int Theme_AppCompat_Light_Dialog_MinWidth = 2131230991; - - // aapt resource value: 0x7f080110 - public const int Theme_AppCompat_Light_DialogWhenLarge = 2131230992; - - // aapt resource value: 0x7f080111 - public const int Theme_AppCompat_Light_NoActionBar = 2131230993; - - // aapt resource value: 0x7f080112 - public const int Theme_AppCompat_NoActionBar = 2131230994; - - // aapt resource value: 0x7f0801a4 - public const int Theme_Design = 2131231140; - - // aapt resource value: 0x7f0801a5 - public const int Theme_Design_BottomSheetDialog = 2131231141; - - // aapt resource value: 0x7f0801a6 - public const int Theme_Design_Light = 2131231142; - - // aapt resource value: 0x7f0801a7 - public const int Theme_Design_Light_BottomSheetDialog = 2131231143; - - // aapt resource value: 0x7f0801a8 - public const int Theme_Design_Light_NoActionBar = 2131231144; - - // aapt resource value: 0x7f0801a9 - public const int Theme_Design_NoActionBar = 2131231145; - - // aapt resource value: 0x7f0801aa - public const int Theme_MaterialComponents = 2131231146; - - // aapt resource value: 0x7f0801ab - public const int Theme_MaterialComponents_BottomSheetDialog = 2131231147; - - // aapt resource value: 0x7f0801ac - public const int Theme_MaterialComponents_Bridge = 2131231148; - - // aapt resource value: 0x7f0801ad - public const int Theme_MaterialComponents_CompactMenu = 2131231149; - - // aapt resource value: 0x7f0801ae - public const int Theme_MaterialComponents_Dialog = 2131231150; - - // aapt resource value: 0x7f0801af - public const int Theme_MaterialComponents_Dialog_Alert = 2131231151; - - // aapt resource value: 0x7f0801b0 - public const int Theme_MaterialComponents_Dialog_MinWidth = 2131231152; - - // aapt resource value: 0x7f0801b1 - public const int Theme_MaterialComponents_DialogWhenLarge = 2131231153; - - // aapt resource value: 0x7f0801b2 - public const int Theme_MaterialComponents_Light = 2131231154; - - // aapt resource value: 0x7f0801b3 - public const int Theme_MaterialComponents_Light_BottomSheetDialog = 2131231155; - - // aapt resource value: 0x7f0801b4 - public const int Theme_MaterialComponents_Light_Bridge = 2131231156; - - // aapt resource value: 0x7f0801b5 - public const int Theme_MaterialComponents_Light_DarkActionBar = 2131231157; - - // aapt resource value: 0x7f0801b6 - public const int Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131231158; - - // aapt resource value: 0x7f0801b7 - public const int Theme_MaterialComponents_Light_Dialog = 2131231159; - - // aapt resource value: 0x7f0801b8 - public const int Theme_MaterialComponents_Light_Dialog_Alert = 2131231160; - - // aapt resource value: 0x7f0801b9 - public const int Theme_MaterialComponents_Light_Dialog_MinWidth = 2131231161; - - // aapt resource value: 0x7f0801ba - public const int Theme_MaterialComponents_Light_DialogWhenLarge = 2131231162; - - // aapt resource value: 0x7f0801bb - public const int Theme_MaterialComponents_Light_NoActionBar = 2131231163; - - // aapt resource value: 0x7f0801bc - public const int Theme_MaterialComponents_Light_NoActionBar_Bridge = 2131231164; - - // aapt resource value: 0x7f0801bd - public const int Theme_MaterialComponents_NoActionBar = 2131231165; - - // aapt resource value: 0x7f0801be - public const int Theme_MaterialComponents_NoActionBar_Bridge = 2131231166; - - // aapt resource value: 0x7f080004 - public const int Theme_MediaRouter = 2131230724; - - // aapt resource value: 0x7f080005 - public const int Theme_MediaRouter_Light = 2131230725; - - // aapt resource value: 0x7f080006 - public const int Theme_MediaRouter_Light_DarkControlPanel = 2131230726; - - // aapt resource value: 0x7f080007 - public const int Theme_MediaRouter_LightControlPanel = 2131230727; - - // aapt resource value: 0x7f080200 - public const int Theme_Splash = 2131231232; - - // aapt resource value: 0x7f080113 - public const int ThemeOverlay_AppCompat = 2131230995; - - // aapt resource value: 0x7f080114 - public const int ThemeOverlay_AppCompat_ActionBar = 2131230996; - - // aapt resource value: 0x7f080115 - public const int ThemeOverlay_AppCompat_Dark = 2131230997; - - // aapt resource value: 0x7f080116 - public const int ThemeOverlay_AppCompat_Dark_ActionBar = 2131230998; - - // aapt resource value: 0x7f080117 - public const int ThemeOverlay_AppCompat_Dialog = 2131230999; - - // aapt resource value: 0x7f080118 - public const int ThemeOverlay_AppCompat_Dialog_Alert = 2131231000; - - // aapt resource value: 0x7f080119 - public const int ThemeOverlay_AppCompat_Light = 2131231001; - - // aapt resource value: 0x7f0801bf - public const int ThemeOverlay_MaterialComponents = 2131231167; - - // aapt resource value: 0x7f0801c0 - public const int ThemeOverlay_MaterialComponents_ActionBar = 2131231168; - - // aapt resource value: 0x7f0801c1 - public const int ThemeOverlay_MaterialComponents_Dark = 2131231169; - - // aapt resource value: 0x7f0801c2 - public const int ThemeOverlay_MaterialComponents_Dark_ActionBar = 2131231170; - - // aapt resource value: 0x7f0801c3 - public const int ThemeOverlay_MaterialComponents_Dialog = 2131231171; - - // aapt resource value: 0x7f0801c4 - public const int ThemeOverlay_MaterialComponents_Dialog_Alert = 2131231172; - - // aapt resource value: 0x7f0801c5 - public const int ThemeOverlay_MaterialComponents_Light = 2131231173; - - // aapt resource value: 0x7f0801c6 - public const int ThemeOverlay_MaterialComponents_TextInputEditText = 2131231174; - - // aapt resource value: 0x7f0801c7 - public const int ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = 2131231175; - - // aapt resource value: 0x7f0801c8 - public const int ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = 2131231176; - - // aapt resource value: 0x7f0801c9 - public const int ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = 2131231177; - - // aapt resource value: 0x7f0801ca - public const int ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = 2131231178; - - // aapt resource value: 0x7f080008 - public const int ThemeOverlay_MediaRouter_Dark = 2131230728; - - // aapt resource value: 0x7f080009 - public const int ThemeOverlay_MediaRouter_Light = 2131230729; - - // aapt resource value: 0x7f08011a - public const int Widget_AppCompat_ActionBar = 2131231002; - - // aapt resource value: 0x7f08011b - public const int Widget_AppCompat_ActionBar_Solid = 2131231003; - - // aapt resource value: 0x7f08011c - public const int Widget_AppCompat_ActionBar_TabBar = 2131231004; - - // aapt resource value: 0x7f08011d - public const int Widget_AppCompat_ActionBar_TabText = 2131231005; - - // aapt resource value: 0x7f08011e - public const int Widget_AppCompat_ActionBar_TabView = 2131231006; - - // aapt resource value: 0x7f08011f - public const int Widget_AppCompat_ActionButton = 2131231007; - - // aapt resource value: 0x7f080120 - public const int Widget_AppCompat_ActionButton_CloseMode = 2131231008; - - // aapt resource value: 0x7f080121 - public const int Widget_AppCompat_ActionButton_Overflow = 2131231009; - - // aapt resource value: 0x7f080122 - public const int Widget_AppCompat_ActionMode = 2131231010; - - // aapt resource value: 0x7f080123 - public const int Widget_AppCompat_ActivityChooserView = 2131231011; - - // aapt resource value: 0x7f080124 - public const int Widget_AppCompat_AutoCompleteTextView = 2131231012; - - // aapt resource value: 0x7f080125 - public const int Widget_AppCompat_Button = 2131231013; - - // aapt resource value: 0x7f080126 - public const int Widget_AppCompat_Button_Borderless = 2131231014; - - // aapt resource value: 0x7f080127 - public const int Widget_AppCompat_Button_Borderless_Colored = 2131231015; - - // aapt resource value: 0x7f080128 - public const int Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131231016; - - // aapt resource value: 0x7f080129 - public const int Widget_AppCompat_Button_Colored = 2131231017; - - // aapt resource value: 0x7f08012a - public const int Widget_AppCompat_Button_Small = 2131231018; - - // aapt resource value: 0x7f08012b - public const int Widget_AppCompat_ButtonBar = 2131231019; - - // aapt resource value: 0x7f08012c - public const int Widget_AppCompat_ButtonBar_AlertDialog = 2131231020; - - // aapt resource value: 0x7f08012d - public const int Widget_AppCompat_CompoundButton_CheckBox = 2131231021; - - // aapt resource value: 0x7f08012e - public const int Widget_AppCompat_CompoundButton_RadioButton = 2131231022; - - // aapt resource value: 0x7f08012f - public const int Widget_AppCompat_CompoundButton_Switch = 2131231023; - - // aapt resource value: 0x7f080130 - public const int Widget_AppCompat_DrawerArrowToggle = 2131231024; - - // aapt resource value: 0x7f080131 - public const int Widget_AppCompat_DropDownItem_Spinner = 2131231025; - - // aapt resource value: 0x7f080132 - public const int Widget_AppCompat_EditText = 2131231026; - - // aapt resource value: 0x7f080133 - public const int Widget_AppCompat_ImageButton = 2131231027; - - // aapt resource value: 0x7f080134 - public const int Widget_AppCompat_Light_ActionBar = 2131231028; - - // aapt resource value: 0x7f080135 - public const int Widget_AppCompat_Light_ActionBar_Solid = 2131231029; - - // aapt resource value: 0x7f080136 - public const int Widget_AppCompat_Light_ActionBar_Solid_Inverse = 2131231030; - - // aapt resource value: 0x7f080137 - public const int Widget_AppCompat_Light_ActionBar_TabBar = 2131231031; - - // aapt resource value: 0x7f080138 - public const int Widget_AppCompat_Light_ActionBar_TabBar_Inverse = 2131231032; - - // aapt resource value: 0x7f080139 - public const int Widget_AppCompat_Light_ActionBar_TabText = 2131231033; - - // aapt resource value: 0x7f08013a - public const int Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131231034; - - // aapt resource value: 0x7f08013b - public const int Widget_AppCompat_Light_ActionBar_TabView = 2131231035; - - // aapt resource value: 0x7f08013c - public const int Widget_AppCompat_Light_ActionBar_TabView_Inverse = 2131231036; - - // aapt resource value: 0x7f08013d - public const int Widget_AppCompat_Light_ActionButton = 2131231037; - - // aapt resource value: 0x7f08013e - public const int Widget_AppCompat_Light_ActionButton_CloseMode = 2131231038; - - // aapt resource value: 0x7f08013f - public const int Widget_AppCompat_Light_ActionButton_Overflow = 2131231039; - - // aapt resource value: 0x7f080140 - public const int Widget_AppCompat_Light_ActionMode_Inverse = 2131231040; - - // aapt resource value: 0x7f080141 - public const int Widget_AppCompat_Light_ActivityChooserView = 2131231041; - - // aapt resource value: 0x7f080142 - public const int Widget_AppCompat_Light_AutoCompleteTextView = 2131231042; - - // aapt resource value: 0x7f080143 - public const int Widget_AppCompat_Light_DropDownItem_Spinner = 2131231043; - - // aapt resource value: 0x7f080144 - public const int Widget_AppCompat_Light_ListPopupWindow = 2131231044; - - // aapt resource value: 0x7f080145 - public const int Widget_AppCompat_Light_ListView_DropDown = 2131231045; - - // aapt resource value: 0x7f080146 - public const int Widget_AppCompat_Light_PopupMenu = 2131231046; - - // aapt resource value: 0x7f080147 - public const int Widget_AppCompat_Light_PopupMenu_Overflow = 2131231047; - - // aapt resource value: 0x7f080148 - public const int Widget_AppCompat_Light_SearchView = 2131231048; - - // aapt resource value: 0x7f080149 - public const int Widget_AppCompat_Light_Spinner_DropDown_ActionBar = 2131231049; - - // aapt resource value: 0x7f08014a - public const int Widget_AppCompat_ListMenuView = 2131231050; - - // aapt resource value: 0x7f08014b - public const int Widget_AppCompat_ListPopupWindow = 2131231051; - - // aapt resource value: 0x7f08014c - public const int Widget_AppCompat_ListView = 2131231052; - - // aapt resource value: 0x7f08014d - public const int Widget_AppCompat_ListView_DropDown = 2131231053; - - // aapt resource value: 0x7f08014e - public const int Widget_AppCompat_ListView_Menu = 2131231054; - - // aapt resource value: 0x7f08014f - public const int Widget_AppCompat_PopupMenu = 2131231055; - - // aapt resource value: 0x7f080150 - public const int Widget_AppCompat_PopupMenu_Overflow = 2131231056; - - // aapt resource value: 0x7f080151 - public const int Widget_AppCompat_PopupWindow = 2131231057; - - // aapt resource value: 0x7f080152 - public const int Widget_AppCompat_ProgressBar = 2131231058; - - // aapt resource value: 0x7f080153 - public const int Widget_AppCompat_ProgressBar_Horizontal = 2131231059; - - // aapt resource value: 0x7f080154 - public const int Widget_AppCompat_RatingBar = 2131231060; - - // aapt resource value: 0x7f080155 - public const int Widget_AppCompat_RatingBar_Indicator = 2131231061; - - // aapt resource value: 0x7f080156 - public const int Widget_AppCompat_RatingBar_Small = 2131231062; - - // aapt resource value: 0x7f080157 - public const int Widget_AppCompat_SearchView = 2131231063; - - // aapt resource value: 0x7f080158 - public const int Widget_AppCompat_SearchView_ActionBar = 2131231064; - - // aapt resource value: 0x7f080159 - public const int Widget_AppCompat_SeekBar = 2131231065; - - // aapt resource value: 0x7f08015a - public const int Widget_AppCompat_SeekBar_Discrete = 2131231066; - - // aapt resource value: 0x7f08015b - public const int Widget_AppCompat_Spinner = 2131231067; - - // aapt resource value: 0x7f08015c - public const int Widget_AppCompat_Spinner_DropDown = 2131231068; - - // aapt resource value: 0x7f08015d - public const int Widget_AppCompat_Spinner_DropDown_ActionBar = 2131231069; - - // aapt resource value: 0x7f08015e - public const int Widget_AppCompat_Spinner_Underlined = 2131231070; - - // aapt resource value: 0x7f08015f - public const int Widget_AppCompat_TextView_SpinnerItem = 2131231071; - - // aapt resource value: 0x7f080160 - public const int Widget_AppCompat_Toolbar = 2131231072; - - // aapt resource value: 0x7f080161 - public const int Widget_AppCompat_Toolbar_Button_Navigation = 2131231073; - - // aapt resource value: 0x7f0801fd - public const int Widget_Compat_NotificationActionContainer = 2131231229; - - // aapt resource value: 0x7f0801fe - public const int Widget_Compat_NotificationActionText = 2131231230; - - // aapt resource value: 0x7f0801cb - public const int Widget_Design_AppBarLayout = 2131231179; - - // aapt resource value: 0x7f0801cc - public const int Widget_Design_BottomNavigationView = 2131231180; - - // aapt resource value: 0x7f0801cd - public const int Widget_Design_BottomSheet_Modal = 2131231181; - - // aapt resource value: 0x7f0801ce - public const int Widget_Design_CollapsingToolbar = 2131231182; - - // aapt resource value: 0x7f0801cf - public const int Widget_Design_FloatingActionButton = 2131231183; - - // aapt resource value: 0x7f0801d0 - public const int Widget_Design_NavigationView = 2131231184; - - // aapt resource value: 0x7f0801d1 - public const int Widget_Design_ScrimInsetsFrameLayout = 2131231185; - - // aapt resource value: 0x7f0801d2 - public const int Widget_Design_Snackbar = 2131231186; - - // aapt resource value: 0x7f080167 - public const int Widget_Design_TabLayout = 2131231079; - - // aapt resource value: 0x7f0801d3 - public const int Widget_Design_TextInputLayout = 2131231187; - - // aapt resource value: 0x7f0801d4 - public const int Widget_MaterialComponents_BottomAppBar = 2131231188; - - // aapt resource value: 0x7f0801d5 - public const int Widget_MaterialComponents_BottomAppBar_Colored = 2131231189; - - // aapt resource value: 0x7f0801d6 - public const int Widget_MaterialComponents_BottomNavigationView = 2131231190; - - // aapt resource value: 0x7f0801d7 - public const int Widget_MaterialComponents_BottomNavigationView_Colored = 2131231191; - - // aapt resource value: 0x7f0801d8 - public const int Widget_MaterialComponents_BottomSheet_Modal = 2131231192; - - // aapt resource value: 0x7f0801d9 - public const int Widget_MaterialComponents_Button = 2131231193; - - // aapt resource value: 0x7f0801da - public const int Widget_MaterialComponents_Button_Icon = 2131231194; - - // aapt resource value: 0x7f0801db - public const int Widget_MaterialComponents_Button_OutlinedButton = 2131231195; - - // aapt resource value: 0x7f0801dc - public const int Widget_MaterialComponents_Button_OutlinedButton_Icon = 2131231196; - - // aapt resource value: 0x7f0801dd - public const int Widget_MaterialComponents_Button_TextButton = 2131231197; - - // aapt resource value: 0x7f0801de - public const int Widget_MaterialComponents_Button_TextButton_Dialog = 2131231198; - - // aapt resource value: 0x7f0801df - public const int Widget_MaterialComponents_Button_TextButton_Dialog_Icon = 2131231199; - - // aapt resource value: 0x7f0801e0 - public const int Widget_MaterialComponents_Button_TextButton_Icon = 2131231200; - - // aapt resource value: 0x7f0801e1 - public const int Widget_MaterialComponents_Button_UnelevatedButton = 2131231201; - - // aapt resource value: 0x7f0801e2 - public const int Widget_MaterialComponents_Button_UnelevatedButton_Icon = 2131231202; - - // aapt resource value: 0x7f0801e3 - public const int Widget_MaterialComponents_CardView = 2131231203; - - // aapt resource value: 0x7f0801e4 - public const int Widget_MaterialComponents_Chip_Action = 2131231204; - - // aapt resource value: 0x7f0801e5 - public const int Widget_MaterialComponents_Chip_Choice = 2131231205; - - // aapt resource value: 0x7f0801e6 - public const int Widget_MaterialComponents_Chip_Entry = 2131231206; - - // aapt resource value: 0x7f0801e7 - public const int Widget_MaterialComponents_Chip_Filter = 2131231207; - - // aapt resource value: 0x7f0801e8 - public const int Widget_MaterialComponents_ChipGroup = 2131231208; - - // aapt resource value: 0x7f0801e9 - public const int Widget_MaterialComponents_FloatingActionButton = 2131231209; - - // aapt resource value: 0x7f0801ea - public const int Widget_MaterialComponents_NavigationView = 2131231210; - - // aapt resource value: 0x7f0801eb - public const int Widget_MaterialComponents_Snackbar = 2131231211; - - // aapt resource value: 0x7f0801ec - public const int Widget_MaterialComponents_Snackbar_FullWidth = 2131231212; - - // aapt resource value: 0x7f0801ed - public const int Widget_MaterialComponents_TabLayout = 2131231213; - - // aapt resource value: 0x7f0801ee - public const int Widget_MaterialComponents_TabLayout_Colored = 2131231214; - - // aapt resource value: 0x7f0801ef - public const int Widget_MaterialComponents_TextInputEditText_FilledBox = 2131231215; - - // aapt resource value: 0x7f0801f0 - public const int Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = 2131231216; - - // aapt resource value: 0x7f0801f1 - public const int Widget_MaterialComponents_TextInputEditText_OutlinedBox = 2131231217; - - // aapt resource value: 0x7f0801f2 - public const int Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = 2131231218; - - // aapt resource value: 0x7f0801f3 - public const int Widget_MaterialComponents_TextInputLayout_FilledBox = 2131231219; - - // aapt resource value: 0x7f0801f4 - public const int Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = 2131231220; - - // aapt resource value: 0x7f0801f5 - public const int Widget_MaterialComponents_TextInputLayout_OutlinedBox = 2131231221; - - // aapt resource value: 0x7f0801f6 - public const int Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = 2131231222; - - // aapt resource value: 0x7f0801f7 - public const int Widget_MaterialComponents_Toolbar = 2131231223; - - // aapt resource value: 0x7f08000a - public const int Widget_MediaRouter_Light_MediaRouteButton = 2131230730; - - // aapt resource value: 0x7f08000b - public const int Widget_MediaRouter_MediaRouteButton = 2131230731; - - // aapt resource value: 0x7f0801f8 - public const int Widget_Support_CoordinatorLayout = 2131231224; - - // aapt resource value: 0x7f080000 - public const int collectionViewStyle = 2131230720; - - static Style() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Style() - { - } - } - - public partial class Xml - { - - // aapt resource value: 0x7f070000 - public const int Empty = 2131165184; - - static Xml() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Xml() - { - } - } - - public partial class Styleable - { - - public static int[] ActionBar = new int[] { - 2130772004, - 2130772006, - 2130772007, - 2130772008, - 2130772009, - 2130772010, - 2130772011, - 2130772012, - 2130772013, - 2130772014, - 2130772015, - 2130772016, - 2130772017, - 2130772018, - 2130772019, - 2130772020, - 2130772021, - 2130772022, - 2130772023, - 2130772024, - 2130772025, - 2130772026, - 2130772027, - 2130772028, - 2130772029, - 2130772030, - 2130772031, - 2130772032, - 2130772107}; - - // aapt resource value: 10 - public const int ActionBar_background = 10; - - // aapt resource value: 12 - public const int ActionBar_backgroundSplit = 12; - - // aapt resource value: 11 - public const int ActionBar_backgroundStacked = 11; - - // aapt resource value: 21 - public const int ActionBar_contentInsetEnd = 21; - - // aapt resource value: 25 - public const int ActionBar_contentInsetEndWithActions = 25; - - // aapt resource value: 22 - public const int ActionBar_contentInsetLeft = 22; - - // aapt resource value: 23 - public const int ActionBar_contentInsetRight = 23; - - // aapt resource value: 20 - public const int ActionBar_contentInsetStart = 20; - - // aapt resource value: 24 - public const int ActionBar_contentInsetStartWithNavigation = 24; - - // aapt resource value: 13 - public const int ActionBar_customNavigationLayout = 13; - - // aapt resource value: 3 - public const int ActionBar_displayOptions = 3; - - // aapt resource value: 9 - public const int ActionBar_divider = 9; - - // aapt resource value: 26 - public const int ActionBar_elevation = 26; - - // aapt resource value: 0 - public const int ActionBar_height = 0; - - // aapt resource value: 19 - public const int ActionBar_hideOnContentScroll = 19; - - // aapt resource value: 28 - public const int ActionBar_homeAsUpIndicator = 28; - - // aapt resource value: 14 - public const int ActionBar_homeLayout = 14; - - // aapt resource value: 7 - public const int ActionBar_icon = 7; - - // aapt resource value: 16 - public const int ActionBar_indeterminateProgressStyle = 16; - - // aapt resource value: 18 - public const int ActionBar_itemPadding = 18; - - // aapt resource value: 8 - public const int ActionBar_logo = 8; - - // aapt resource value: 2 - public const int ActionBar_navigationMode = 2; - - // aapt resource value: 27 - public const int ActionBar_popupTheme = 27; - - // aapt resource value: 17 - public const int ActionBar_progressBarPadding = 17; - - // aapt resource value: 15 - public const int ActionBar_progressBarStyle = 15; - - // aapt resource value: 4 - public const int ActionBar_subtitle = 4; - - // aapt resource value: 6 - public const int ActionBar_subtitleTextStyle = 6; - - // aapt resource value: 1 - public const int ActionBar_title = 1; - - // aapt resource value: 5 - public const int ActionBar_titleTextStyle = 5; - - public static int[] ActionBarLayout = new int[] { - 16842931}; - - // aapt resource value: 0 - public const int ActionBarLayout_android_layout_gravity = 0; - - public static int[] ActionMenuItemView = new int[] { - 16843071}; - - // aapt resource value: 0 - public const int ActionMenuItemView_android_minWidth = 0; - - public static int[] ActionMenuView; - - public static int[] ActionMode = new int[] { - 2130772004, - 2130772010, - 2130772011, - 2130772015, - 2130772017, - 2130772033}; - - // aapt resource value: 3 - public const int ActionMode_background = 3; - - // aapt resource value: 4 - public const int ActionMode_backgroundSplit = 4; - - // aapt resource value: 5 - public const int ActionMode_closeItemLayout = 5; - - // aapt resource value: 0 - public const int ActionMode_height = 0; - - // aapt resource value: 2 - public const int ActionMode_subtitleTextStyle = 2; - - // aapt resource value: 1 - public const int ActionMode_titleTextStyle = 1; - - public static int[] ActivityChooserView = new int[] { - 2130772034, - 2130772035}; - - // aapt resource value: 1 - public const int ActivityChooserView_expandActivityOverflowButtonDrawable = 1; - - // aapt resource value: 0 - public const int ActivityChooserView_initialActivityCount = 0; - - public static int[] AlertDialog = new int[] { - 16842994, - 2130772036, - 2130772037, - 2130772038, - 2130772039, - 2130772040, - 2130772041, - 2130772042}; - - // aapt resource value: 0 - public const int AlertDialog_android_layout = 0; - - // aapt resource value: 7 - public const int AlertDialog_buttonIconDimen = 7; - - // aapt resource value: 1 - public const int AlertDialog_buttonPanelSideLayout = 1; - - // aapt resource value: 5 - public const int AlertDialog_listItemLayout = 5; - - // aapt resource value: 2 - public const int AlertDialog_listLayout = 2; - - // aapt resource value: 3 - public const int AlertDialog_multiChoiceItemLayout = 3; - - // aapt resource value: 6 - public const int AlertDialog_showTitle = 6; - - // aapt resource value: 4 - public const int AlertDialog_singleChoiceItemLayout = 4; - - public static int[] AnimatedStateListDrawableCompat = new int[] { - 16843036, - 16843156, - 16843157, - 16843158, - 16843532, - 16843533}; - - // aapt resource value: 3 - public const int AnimatedStateListDrawableCompat_android_constantSize = 3; - - // aapt resource value: 0 - public const int AnimatedStateListDrawableCompat_android_dither = 0; - - // aapt resource value: 4 - public const int AnimatedStateListDrawableCompat_android_enterFadeDuration = 4; - - // aapt resource value: 5 - public const int AnimatedStateListDrawableCompat_android_exitFadeDuration = 5; - - // aapt resource value: 2 - public const int AnimatedStateListDrawableCompat_android_variablePadding = 2; - - // aapt resource value: 1 - public const int AnimatedStateListDrawableCompat_android_visible = 1; - - public static int[] AnimatedStateListDrawableItem = new int[] { - 16842960, - 16843161}; - - // aapt resource value: 1 - public const int AnimatedStateListDrawableItem_android_drawable = 1; - - // aapt resource value: 0 - public const int AnimatedStateListDrawableItem_android_id = 0; - - public static int[] AnimatedStateListDrawableTransition = new int[] { - 16843161, - 16843849, - 16843850, - 16843851}; - - // aapt resource value: 0 - public const int AnimatedStateListDrawableTransition_android_drawable = 0; - - // aapt resource value: 2 - public const int AnimatedStateListDrawableTransition_android_fromId = 2; - - // aapt resource value: 3 - public const int AnimatedStateListDrawableTransition_android_reversible = 3; - - // aapt resource value: 1 - public const int AnimatedStateListDrawableTransition_android_toId = 1; - - public static int[] AppBarLayout = new int[] { - 16842964, - 16843919, - 16844096, - 2130772031, - 2130772287, - 2130772288}; - - // aapt resource value: 0 - public const int AppBarLayout_android_background = 0; - - // aapt resource value: 2 - public const int AppBarLayout_android_keyboardNavigationCluster = 2; - - // aapt resource value: 1 - public const int AppBarLayout_android_touchscreenBlocksFocus = 1; - - // aapt resource value: 3 - public const int AppBarLayout_elevation = 3; - - // aapt resource value: 4 - public const int AppBarLayout_expanded = 4; - - // aapt resource value: 5 - public const int AppBarLayout_liftOnScroll = 5; - - public static int[] AppBarLayoutStates = new int[] { - 2130772289, - 2130772290, - 2130772291, - 2130772292}; - - // aapt resource value: 0 - public const int AppBarLayoutStates_state_collapsed = 0; - - // aapt resource value: 1 - public const int AppBarLayoutStates_state_collapsible = 1; - - // aapt resource value: 3 - public const int AppBarLayoutStates_state_liftable = 3; - - // aapt resource value: 2 - public const int AppBarLayoutStates_state_lifted = 2; - - public static int[] AppBarLayout_Layout = new int[] { - 2130772293, - 2130772294}; - - // aapt resource value: 0 - public const int AppBarLayout_Layout_layout_scrollFlags = 0; - - // aapt resource value: 1 - public const int AppBarLayout_Layout_layout_scrollInterpolator = 1; - - public static int[] AppCompatImageView = new int[] { - 16843033, - 2130772043, - 2130772044, - 2130772045}; - - // aapt resource value: 0 - public const int AppCompatImageView_android_src = 0; - - // aapt resource value: 1 - public const int AppCompatImageView_srcCompat = 1; - - // aapt resource value: 2 - public const int AppCompatImageView_tint = 2; - - // aapt resource value: 3 - public const int AppCompatImageView_tintMode = 3; - - public static int[] AppCompatSeekBar = new int[] { - 16843074, - 2130772046, - 2130772047, - 2130772048}; - - // aapt resource value: 0 - public const int AppCompatSeekBar_android_thumb = 0; - - // aapt resource value: 1 - public const int AppCompatSeekBar_tickMark = 1; - - // aapt resource value: 2 - public const int AppCompatSeekBar_tickMarkTint = 2; - - // aapt resource value: 3 - public const int AppCompatSeekBar_tickMarkTintMode = 3; - - public static int[] AppCompatTextHelper = new int[] { - 16842804, - 16843117, - 16843118, - 16843119, - 16843120, - 16843666, - 16843667}; - - // aapt resource value: 2 - public const int AppCompatTextHelper_android_drawableBottom = 2; - - // aapt resource value: 6 - public const int AppCompatTextHelper_android_drawableEnd = 6; - - // aapt resource value: 3 - public const int AppCompatTextHelper_android_drawableLeft = 3; - - // aapt resource value: 4 - public const int AppCompatTextHelper_android_drawableRight = 4; - - // aapt resource value: 5 - public const int AppCompatTextHelper_android_drawableStart = 5; - - // aapt resource value: 1 - public const int AppCompatTextHelper_android_drawableTop = 1; - - // aapt resource value: 0 - public const int AppCompatTextHelper_android_textAppearance = 0; - - public static int[] AppCompatTextView = new int[] { - 16842804, - 2130772049, - 2130772050, - 2130772051, - 2130772052, - 2130772053, - 2130772054, - 2130772055, - 2130772056, - 2130772057, - 2130772058}; - - // aapt resource value: 0 - public const int AppCompatTextView_android_textAppearance = 0; - - // aapt resource value: 6 - public const int AppCompatTextView_autoSizeMaxTextSize = 6; - - // aapt resource value: 5 - public const int AppCompatTextView_autoSizeMinTextSize = 5; - - // aapt resource value: 4 - public const int AppCompatTextView_autoSizePresetSizes = 4; - - // aapt resource value: 3 - public const int AppCompatTextView_autoSizeStepGranularity = 3; - - // aapt resource value: 2 - public const int AppCompatTextView_autoSizeTextType = 2; - - // aapt resource value: 9 - public const int AppCompatTextView_firstBaselineToTopHeight = 9; - - // aapt resource value: 7 - public const int AppCompatTextView_fontFamily = 7; - - // aapt resource value: 10 - public const int AppCompatTextView_lastBaselineToBottomHeight = 10; - - // aapt resource value: 8 - public const int AppCompatTextView_lineHeight = 8; - - // aapt resource value: 1 - public const int AppCompatTextView_textAllCaps = 1; - - public static int[] AppCompatTheme = new int[] { - 16842839, - 16842926, - 2130772059, - 2130772060, - 2130772061, - 2130772062, - 2130772063, - 2130772064, - 2130772065, - 2130772066, - 2130772067, - 2130772068, - 2130772069, - 2130772070, - 2130772071, - 2130772072, - 2130772073, - 2130772074, - 2130772075, - 2130772076, - 2130772077, - 2130772078, - 2130772079, - 2130772080, - 2130772081, - 2130772082, - 2130772083, - 2130772084, - 2130772085, - 2130772086, - 2130772087, - 2130772088, - 2130772089, - 2130772090, - 2130772091, - 2130772092, - 2130772093, - 2130772094, - 2130772095, - 2130772096, - 2130772097, - 2130772098, - 2130772099, - 2130772100, - 2130772101, - 2130772102, - 2130772103, - 2130772104, - 2130772105, - 2130772106, - 2130772107, - 2130772108, - 2130772109, - 2130772110, - 2130772111, - 2130772112, - 2130772113, - 2130772114, - 2130772115, - 2130772116, - 2130772117, - 2130772118, - 2130772119, - 2130772120, - 2130772121, - 2130772122, - 2130772123, - 2130772124, - 2130772125, - 2130772126, - 2130772127, - 2130772128, - 2130772129, - 2130772130, - 2130772131, - 2130772132, - 2130772133, - 2130772134, - 2130772135, - 2130772136, - 2130772137, - 2130772138, - 2130772139, - 2130772140, - 2130772141, - 2130772142, - 2130772143, - 2130772144, - 2130772145, - 2130772146, - 2130772147, - 2130772148, - 2130772149, - 2130772150, - 2130772151, - 2130772152, - 2130772153, - 2130772154, - 2130772155, - 2130772156, - 2130772157, - 2130772158, - 2130772159, - 2130772160, - 2130772161, - 2130772162, - 2130772163, - 2130772164, - 2130772165, - 2130772166, - 2130772167, - 2130772168, - 2130772169, - 2130772170, - 2130772171, - 2130772172, - 2130772173, - 2130772174, - 2130772175, - 2130772176, - 2130772177}; - - // aapt resource value: 23 - public const int AppCompatTheme_actionBarDivider = 23; - - // aapt resource value: 24 - public const int AppCompatTheme_actionBarItemBackground = 24; - - // aapt resource value: 17 - public const int AppCompatTheme_actionBarPopupTheme = 17; - - // aapt resource value: 22 - public const int AppCompatTheme_actionBarSize = 22; - - // aapt resource value: 19 - public const int AppCompatTheme_actionBarSplitStyle = 19; - - // aapt resource value: 18 - public const int AppCompatTheme_actionBarStyle = 18; - - // aapt resource value: 13 - public const int AppCompatTheme_actionBarTabBarStyle = 13; - - // aapt resource value: 12 - public const int AppCompatTheme_actionBarTabStyle = 12; - - // aapt resource value: 14 - public const int AppCompatTheme_actionBarTabTextStyle = 14; - - // aapt resource value: 20 - public const int AppCompatTheme_actionBarTheme = 20; - - // aapt resource value: 21 - public const int AppCompatTheme_actionBarWidgetTheme = 21; - - // aapt resource value: 51 - public const int AppCompatTheme_actionButtonStyle = 51; - - // aapt resource value: 47 - public const int AppCompatTheme_actionDropDownStyle = 47; - - // aapt resource value: 25 - public const int AppCompatTheme_actionMenuTextAppearance = 25; - - // aapt resource value: 26 - public const int AppCompatTheme_actionMenuTextColor = 26; - - // aapt resource value: 29 - public const int AppCompatTheme_actionModeBackground = 29; - - // aapt resource value: 28 - public const int AppCompatTheme_actionModeCloseButtonStyle = 28; - - // aapt resource value: 31 - public const int AppCompatTheme_actionModeCloseDrawable = 31; - - // aapt resource value: 33 - public const int AppCompatTheme_actionModeCopyDrawable = 33; - - // aapt resource value: 32 - public const int AppCompatTheme_actionModeCutDrawable = 32; - - // aapt resource value: 37 - public const int AppCompatTheme_actionModeFindDrawable = 37; - - // aapt resource value: 34 - public const int AppCompatTheme_actionModePasteDrawable = 34; - - // aapt resource value: 39 - public const int AppCompatTheme_actionModePopupWindowStyle = 39; - - // aapt resource value: 35 - public const int AppCompatTheme_actionModeSelectAllDrawable = 35; - - // aapt resource value: 36 - public const int AppCompatTheme_actionModeShareDrawable = 36; - - // aapt resource value: 30 - public const int AppCompatTheme_actionModeSplitBackground = 30; - - // aapt resource value: 27 - public const int AppCompatTheme_actionModeStyle = 27; - - // aapt resource value: 38 - public const int AppCompatTheme_actionModeWebSearchDrawable = 38; - - // aapt resource value: 15 - public const int AppCompatTheme_actionOverflowButtonStyle = 15; - - // aapt resource value: 16 - public const int AppCompatTheme_actionOverflowMenuStyle = 16; - - // aapt resource value: 59 - public const int AppCompatTheme_activityChooserViewStyle = 59; - - // aapt resource value: 96 - public const int AppCompatTheme_alertDialogButtonGroupStyle = 96; - - // aapt resource value: 97 - public const int AppCompatTheme_alertDialogCenterButtons = 97; - - // aapt resource value: 95 - public const int AppCompatTheme_alertDialogStyle = 95; - - // aapt resource value: 98 - public const int AppCompatTheme_alertDialogTheme = 98; - - // aapt resource value: 1 - public const int AppCompatTheme_android_windowAnimationStyle = 1; - - // aapt resource value: 0 - public const int AppCompatTheme_android_windowIsFloating = 0; - - // aapt resource value: 103 - public const int AppCompatTheme_autoCompleteTextViewStyle = 103; - - // aapt resource value: 56 - public const int AppCompatTheme_borderlessButtonStyle = 56; - - // aapt resource value: 53 - public const int AppCompatTheme_buttonBarButtonStyle = 53; - - // aapt resource value: 101 - public const int AppCompatTheme_buttonBarNegativeButtonStyle = 101; - - // aapt resource value: 102 - public const int AppCompatTheme_buttonBarNeutralButtonStyle = 102; - - // aapt resource value: 100 - public const int AppCompatTheme_buttonBarPositiveButtonStyle = 100; - - // aapt resource value: 52 - public const int AppCompatTheme_buttonBarStyle = 52; - - // aapt resource value: 104 - public const int AppCompatTheme_buttonStyle = 104; - - // aapt resource value: 105 - public const int AppCompatTheme_buttonStyleSmall = 105; - - // aapt resource value: 106 - public const int AppCompatTheme_checkboxStyle = 106; - - // aapt resource value: 107 - public const int AppCompatTheme_checkedTextViewStyle = 107; - - // aapt resource value: 87 - public const int AppCompatTheme_colorAccent = 87; - - // aapt resource value: 94 - public const int AppCompatTheme_colorBackgroundFloating = 94; - - // aapt resource value: 91 - public const int AppCompatTheme_colorButtonNormal = 91; - - // aapt resource value: 89 - public const int AppCompatTheme_colorControlActivated = 89; - - // aapt resource value: 90 - public const int AppCompatTheme_colorControlHighlight = 90; - - // aapt resource value: 88 - public const int AppCompatTheme_colorControlNormal = 88; - - // aapt resource value: 119 - public const int AppCompatTheme_colorError = 119; - - // aapt resource value: 85 - public const int AppCompatTheme_colorPrimary = 85; - - // aapt resource value: 86 - public const int AppCompatTheme_colorPrimaryDark = 86; - - // aapt resource value: 92 - public const int AppCompatTheme_colorSwitchThumbNormal = 92; - - // aapt resource value: 93 - public const int AppCompatTheme_controlBackground = 93; - - // aapt resource value: 46 - public const int AppCompatTheme_dialogCornerRadius = 46; - - // aapt resource value: 44 - public const int AppCompatTheme_dialogPreferredPadding = 44; - - // aapt resource value: 43 - public const int AppCompatTheme_dialogTheme = 43; - - // aapt resource value: 58 - public const int AppCompatTheme_dividerHorizontal = 58; - - // aapt resource value: 57 - public const int AppCompatTheme_dividerVertical = 57; - - // aapt resource value: 76 - public const int AppCompatTheme_dropDownListViewStyle = 76; - - // aapt resource value: 48 - public const int AppCompatTheme_dropdownListPreferredItemHeight = 48; - - // aapt resource value: 65 - public const int AppCompatTheme_editTextBackground = 65; - - // aapt resource value: 64 - public const int AppCompatTheme_editTextColor = 64; - - // aapt resource value: 108 - public const int AppCompatTheme_editTextStyle = 108; - - // aapt resource value: 50 - public const int AppCompatTheme_homeAsUpIndicator = 50; - - // aapt resource value: 66 - public const int AppCompatTheme_imageButtonStyle = 66; - - // aapt resource value: 84 - public const int AppCompatTheme_listChoiceBackgroundIndicator = 84; - - // aapt resource value: 45 - public const int AppCompatTheme_listDividerAlertDialog = 45; - - // aapt resource value: 116 - public const int AppCompatTheme_listMenuViewStyle = 116; - - // aapt resource value: 77 - public const int AppCompatTheme_listPopupWindowStyle = 77; - - // aapt resource value: 71 - public const int AppCompatTheme_listPreferredItemHeight = 71; - - // aapt resource value: 73 - public const int AppCompatTheme_listPreferredItemHeightLarge = 73; - - // aapt resource value: 72 - public const int AppCompatTheme_listPreferredItemHeightSmall = 72; - - // aapt resource value: 74 - public const int AppCompatTheme_listPreferredItemPaddingLeft = 74; - - // aapt resource value: 75 - public const int AppCompatTheme_listPreferredItemPaddingRight = 75; - - // aapt resource value: 81 - public const int AppCompatTheme_panelBackground = 81; - - // aapt resource value: 83 - public const int AppCompatTheme_panelMenuListTheme = 83; - - // aapt resource value: 82 - public const int AppCompatTheme_panelMenuListWidth = 82; - - // aapt resource value: 62 - public const int AppCompatTheme_popupMenuStyle = 62; - - // aapt resource value: 63 - public const int AppCompatTheme_popupWindowStyle = 63; - - // aapt resource value: 109 - public const int AppCompatTheme_radioButtonStyle = 109; - - // aapt resource value: 110 - public const int AppCompatTheme_ratingBarStyle = 110; - - // aapt resource value: 111 - public const int AppCompatTheme_ratingBarStyleIndicator = 111; - - // aapt resource value: 112 - public const int AppCompatTheme_ratingBarStyleSmall = 112; - - // aapt resource value: 70 - public const int AppCompatTheme_searchViewStyle = 70; - - // aapt resource value: 113 - public const int AppCompatTheme_seekBarStyle = 113; - - // aapt resource value: 54 - public const int AppCompatTheme_selectableItemBackground = 54; - - // aapt resource value: 55 - public const int AppCompatTheme_selectableItemBackgroundBorderless = 55; - - // aapt resource value: 49 - public const int AppCompatTheme_spinnerDropDownItemStyle = 49; - - // aapt resource value: 114 - public const int AppCompatTheme_spinnerStyle = 114; - - // aapt resource value: 115 - public const int AppCompatTheme_switchStyle = 115; - - // aapt resource value: 40 - public const int AppCompatTheme_textAppearanceLargePopupMenu = 40; - - // aapt resource value: 78 - public const int AppCompatTheme_textAppearanceListItem = 78; - - // aapt resource value: 79 - public const int AppCompatTheme_textAppearanceListItemSecondary = 79; - - // aapt resource value: 80 - public const int AppCompatTheme_textAppearanceListItemSmall = 80; - - // aapt resource value: 42 - public const int AppCompatTheme_textAppearancePopupMenuHeader = 42; - - // aapt resource value: 68 - public const int AppCompatTheme_textAppearanceSearchResultSubtitle = 68; - - // aapt resource value: 67 - public const int AppCompatTheme_textAppearanceSearchResultTitle = 67; - - // aapt resource value: 41 - public const int AppCompatTheme_textAppearanceSmallPopupMenu = 41; - - // aapt resource value: 99 - public const int AppCompatTheme_textColorAlertDialogListItem = 99; - - // aapt resource value: 69 - public const int AppCompatTheme_textColorSearchUrl = 69; - - // aapt resource value: 61 - public const int AppCompatTheme_toolbarNavigationButtonStyle = 61; - - // aapt resource value: 60 - public const int AppCompatTheme_toolbarStyle = 60; - - // aapt resource value: 118 - public const int AppCompatTheme_tooltipForegroundColor = 118; - - // aapt resource value: 117 - public const int AppCompatTheme_tooltipFrameBackground = 117; - - // aapt resource value: 120 - public const int AppCompatTheme_viewInflaterClass = 120; - - // aapt resource value: 2 - public const int AppCompatTheme_windowActionBar = 2; - - // aapt resource value: 4 - public const int AppCompatTheme_windowActionBarOverlay = 4; - - // aapt resource value: 5 - public const int AppCompatTheme_windowActionModeOverlay = 5; - - // aapt resource value: 9 - public const int AppCompatTheme_windowFixedHeightMajor = 9; - - // aapt resource value: 7 - public const int AppCompatTheme_windowFixedHeightMinor = 7; - - // aapt resource value: 6 - public const int AppCompatTheme_windowFixedWidthMajor = 6; - - // aapt resource value: 8 - public const int AppCompatTheme_windowFixedWidthMinor = 8; - - // aapt resource value: 10 - public const int AppCompatTheme_windowMinWidthMajor = 10; - - // aapt resource value: 11 - public const int AppCompatTheme_windowMinWidthMinor = 11; - - // aapt resource value: 3 - public const int AppCompatTheme_windowNoTitle = 3; - - public static int[] BottomAppBar = new int[] { - 2130772252, - 2130772295, - 2130772296, - 2130772297, - 2130772298, - 2130772299}; - - // aapt resource value: 0 - public const int BottomAppBar_backgroundTint = 0; - - // aapt resource value: 1 - public const int BottomAppBar_fabAlignmentMode = 1; - - // aapt resource value: 2 - public const int BottomAppBar_fabCradleMargin = 2; - - // aapt resource value: 3 - public const int BottomAppBar_fabCradleRoundedCornerRadius = 3; - - // aapt resource value: 4 - public const int BottomAppBar_fabCradleVerticalOffset = 4; - - // aapt resource value: 5 - public const int BottomAppBar_hideOnScroll = 5; - - public static int[] BottomNavigationView = new int[] { - 2130772031, - 2130772300, - 2130772301, - 2130772302, - 2130772303, - 2130772304, - 2130772372, - 2130772373, - 2130772374, - 2130772375}; - - // aapt resource value: 0 - public const int BottomNavigationView_elevation = 0; - - // aapt resource value: 9 - public const int BottomNavigationView_itemBackground = 9; - - // aapt resource value: 5 - public const int BottomNavigationView_itemHorizontalTranslationEnabled = 5; - - // aapt resource value: 2 - public const int BottomNavigationView_itemIconSize = 2; - - // aapt resource value: 7 - public const int BottomNavigationView_itemIconTint = 7; - - // aapt resource value: 4 - public const int BottomNavigationView_itemTextAppearanceActive = 4; - - // aapt resource value: 3 - public const int BottomNavigationView_itemTextAppearanceInactive = 3; - - // aapt resource value: 8 - public const int BottomNavigationView_itemTextColor = 8; - - // aapt resource value: 1 - public const int BottomNavigationView_labelVisibilityMode = 1; - - // aapt resource value: 6 - public const int BottomNavigationView_menu = 6; - - public static int[] BottomSheetBehavior_Layout = new int[] { - 2130772305, - 2130772306, - 2130772307, - 2130772308}; - - // aapt resource value: 3 - public const int BottomSheetBehavior_Layout_behavior_fitToContents = 3; - - // aapt resource value: 1 - public const int BottomSheetBehavior_Layout_behavior_hideable = 1; - - // aapt resource value: 0 - public const int BottomSheetBehavior_Layout_behavior_peekHeight = 0; - - // aapt resource value: 2 - public const int BottomSheetBehavior_Layout_behavior_skipCollapsed = 2; - - public static int[] ButtonBarLayout = new int[] { - 2130772178}; - - // aapt resource value: 0 - public const int ButtonBarLayout_allowStacking = 0; - - public static int[] CardView = new int[] { - 16843071, - 16843072, - 2130771992, - 2130771993, - 2130771994, - 2130771995, - 2130771996, - 2130771997, - 2130771998, - 2130771999, - 2130772000, - 2130772001, - 2130772002}; - - // aapt resource value: 1 - public const int CardView_android_minHeight = 1; - - // aapt resource value: 0 - public const int CardView_android_minWidth = 0; - - // aapt resource value: 2 - public const int CardView_cardBackgroundColor = 2; - - // aapt resource value: 3 - public const int CardView_cardCornerRadius = 3; - - // aapt resource value: 4 - public const int CardView_cardElevation = 4; - - // aapt resource value: 5 - public const int CardView_cardMaxElevation = 5; - - // aapt resource value: 7 - public const int CardView_cardPreventCornerOverlap = 7; - - // aapt resource value: 6 - public const int CardView_cardUseCompatPadding = 6; - - // aapt resource value: 8 - public const int CardView_contentPadding = 8; - - // aapt resource value: 12 - public const int CardView_contentPaddingBottom = 12; - - // aapt resource value: 9 - public const int CardView_contentPaddingLeft = 9; - - // aapt resource value: 10 - public const int CardView_contentPaddingRight = 10; - - // aapt resource value: 11 - public const int CardView_contentPaddingTop = 11; - - public static int[] Chip = new int[] { - 16842804, - 16842923, - 16843039, - 16843087, - 16843237, - 2130772212, - 2130772263, - 2130772267, - 2130772269, - 2130772309, - 2130772310, - 2130772311, - 2130772312, - 2130772313, - 2130772314, - 2130772315, - 2130772316, - 2130772317, - 2130772318, - 2130772319, - 2130772320, - 2130772321, - 2130772322, - 2130772323, - 2130772324, - 2130772325, - 2130772326, - 2130772327, - 2130772328, - 2130772329, - 2130772330, - 2130772331, - 2130772332, - 2130772333}; - - // aapt resource value: 4 - public const int Chip_android_checkable = 4; - - // aapt resource value: 1 - public const int Chip_android_ellipsize = 1; - - // aapt resource value: 2 - public const int Chip_android_maxWidth = 2; - - // aapt resource value: 3 - public const int Chip_android_text = 3; - - // aapt resource value: 0 - public const int Chip_android_textAppearance = 0; - - // aapt resource value: 25 - public const int Chip_checkedIcon = 25; - - // aapt resource value: 24 - public const int Chip_checkedIconEnabled = 24; - - // aapt resource value: 23 - public const int Chip_checkedIconVisible = 23; - - // aapt resource value: 9 - public const int Chip_chipBackgroundColor = 9; - - // aapt resource value: 11 - public const int Chip_chipCornerRadius = 11; - - // aapt resource value: 33 - public const int Chip_chipEndPadding = 33; - - // aapt resource value: 16 - public const int Chip_chipIcon = 16; - - // aapt resource value: 15 - public const int Chip_chipIconEnabled = 15; - - // aapt resource value: 18 - public const int Chip_chipIconSize = 18; - - // aapt resource value: 17 - public const int Chip_chipIconTint = 17; - - // aapt resource value: 14 - public const int Chip_chipIconVisible = 14; - - // aapt resource value: 10 - public const int Chip_chipMinHeight = 10; - - // aapt resource value: 26 - public const int Chip_chipStartPadding = 26; - - // aapt resource value: 12 - public const int Chip_chipStrokeColor = 12; - - // aapt resource value: 13 - public const int Chip_chipStrokeWidth = 13; - - // aapt resource value: 5 - public const int Chip_closeIcon = 5; - - // aapt resource value: 20 - public const int Chip_closeIconEnabled = 20; - - // aapt resource value: 32 - public const int Chip_closeIconEndPadding = 32; - - // aapt resource value: 22 - public const int Chip_closeIconSize = 22; - - // aapt resource value: 31 - public const int Chip_closeIconStartPadding = 31; - - // aapt resource value: 21 - public const int Chip_closeIconTint = 21; - - // aapt resource value: 19 - public const int Chip_closeIconVisible = 19; - - // aapt resource value: 6 - public const int Chip_hideMotionSpec = 6; - - // aapt resource value: 28 - public const int Chip_iconEndPadding = 28; - - // aapt resource value: 27 - public const int Chip_iconStartPadding = 27; - - // aapt resource value: 7 - public const int Chip_rippleColor = 7; - - // aapt resource value: 8 - public const int Chip_showMotionSpec = 8; - - // aapt resource value: 30 - public const int Chip_textEndPadding = 30; - - // aapt resource value: 29 - public const int Chip_textStartPadding = 29; - - public static int[] ChipGroup = new int[] { - 2130772334, - 2130772335, - 2130772336, - 2130772337, - 2130772338, - 2130772339}; - - // aapt resource value: 5 - public const int ChipGroup_checkedChip = 5; - - // aapt resource value: 0 - public const int ChipGroup_chipSpacing = 0; - - // aapt resource value: 1 - public const int ChipGroup_chipSpacingHorizontal = 1; - - // aapt resource value: 2 - public const int ChipGroup_chipSpacingVertical = 2; - - // aapt resource value: 3 - public const int ChipGroup_singleLine = 3; - - // aapt resource value: 4 - public const int ChipGroup_singleSelection = 4; - - public static int[] CollapsingToolbarLayout = new int[] { - 2130772006, - 2130772340, - 2130772341, - 2130772342, - 2130772343, - 2130772344, - 2130772345, - 2130772346, - 2130772347, - 2130772348, - 2130772349, - 2130772350, - 2130772351, - 2130772352, - 2130772353, - 2130772354}; - - // aapt resource value: 13 - public const int CollapsingToolbarLayout_collapsedTitleGravity = 13; - - // aapt resource value: 7 - public const int CollapsingToolbarLayout_collapsedTitleTextAppearance = 7; - - // aapt resource value: 8 - public const int CollapsingToolbarLayout_contentScrim = 8; - - // aapt resource value: 14 - public const int CollapsingToolbarLayout_expandedTitleGravity = 14; - - // aapt resource value: 1 - public const int CollapsingToolbarLayout_expandedTitleMargin = 1; - - // aapt resource value: 5 - public const int CollapsingToolbarLayout_expandedTitleMarginBottom = 5; - - // aapt resource value: 4 - public const int CollapsingToolbarLayout_expandedTitleMarginEnd = 4; - - // aapt resource value: 2 - public const int CollapsingToolbarLayout_expandedTitleMarginStart = 2; - - // aapt resource value: 3 - public const int CollapsingToolbarLayout_expandedTitleMarginTop = 3; - - // aapt resource value: 6 - public const int CollapsingToolbarLayout_expandedTitleTextAppearance = 6; - - // aapt resource value: 12 - public const int CollapsingToolbarLayout_scrimAnimationDuration = 12; - - // aapt resource value: 11 - public const int CollapsingToolbarLayout_scrimVisibleHeightTrigger = 11; - - // aapt resource value: 9 - public const int CollapsingToolbarLayout_statusBarScrim = 9; - - // aapt resource value: 0 - public const int CollapsingToolbarLayout_title = 0; - - // aapt resource value: 15 - public const int CollapsingToolbarLayout_titleEnabled = 15; - - // aapt resource value: 10 - public const int CollapsingToolbarLayout_toolbarId = 10; - - public static int[] CollapsingToolbarLayout_Layout = new int[] { - 2130772355, - 2130772356}; - - // aapt resource value: 0 - public const int CollapsingToolbarLayout_Layout_layout_collapseMode = 0; - - // aapt resource value: 1 - public const int CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = 1; - - public static int[] ColorStateListItem = new int[] { - 16843173, - 16843551, - 2130772447}; - - // aapt resource value: 2 - public const int ColorStateListItem_alpha = 2; - - // aapt resource value: 1 - public const int ColorStateListItem_android_alpha = 1; - - // aapt resource value: 0 - public const int ColorStateListItem_android_color = 0; - - public static int[] CompoundButton = new int[] { - 16843015, - 2130772179, - 2130772180}; - - // aapt resource value: 0 - public const int CompoundButton_android_button = 0; - - // aapt resource value: 1 - public const int CompoundButton_buttonTint = 1; - - // aapt resource value: 2 - public const int CompoundButton_buttonTintMode = 2; - - public static int[] CoordinatorLayout = new int[] { - 2130772439, - 2130772440}; - - // aapt resource value: 0 - public const int CoordinatorLayout_keylines = 0; - - // aapt resource value: 1 - public const int CoordinatorLayout_statusBarBackground = 1; - - public static int[] CoordinatorLayout_Layout = new int[] { - 16842931, - 2130772441, - 2130772442, - 2130772443, - 2130772444, - 2130772445, - 2130772446}; - - // aapt resource value: 0 - public const int CoordinatorLayout_Layout_android_layout_gravity = 0; - - // aapt resource value: 2 - public const int CoordinatorLayout_Layout_layout_anchor = 2; - - // aapt resource value: 4 - public const int CoordinatorLayout_Layout_layout_anchorGravity = 4; - - // aapt resource value: 1 - public const int CoordinatorLayout_Layout_layout_behavior = 1; - - // aapt resource value: 6 - public const int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 6; - - // aapt resource value: 5 - public const int CoordinatorLayout_Layout_layout_insetEdge = 5; - - // aapt resource value: 3 - public const int CoordinatorLayout_Layout_layout_keyline = 3; - - public static int[] DesignTheme = new int[] { - 2130772256, - 2130772257}; - - // aapt resource value: 0 - public const int DesignTheme_bottomSheetDialogTheme = 0; - - // aapt resource value: 1 - public const int DesignTheme_bottomSheetStyle = 1; - - public static int[] DrawerArrowToggle = new int[] { - 2130772181, - 2130772182, - 2130772183, - 2130772184, - 2130772185, - 2130772186, - 2130772187, - 2130772188}; - - // aapt resource value: 4 - public const int DrawerArrowToggle_arrowHeadLength = 4; - - // aapt resource value: 5 - public const int DrawerArrowToggle_arrowShaftLength = 5; - - // aapt resource value: 6 - public const int DrawerArrowToggle_barLength = 6; - - // aapt resource value: 0 - public const int DrawerArrowToggle_color = 0; - - // aapt resource value: 2 - public const int DrawerArrowToggle_drawableSize = 2; - - // aapt resource value: 3 - public const int DrawerArrowToggle_gapBetweenBars = 3; - - // aapt resource value: 1 - public const int DrawerArrowToggle_spinBars = 1; - - // aapt resource value: 7 - public const int DrawerArrowToggle_thickness = 7; - - public static int[] FloatingActionButton = new int[] { - 2130772031, - 2130772252, - 2130772253, - 2130772263, - 2130772267, - 2130772269, - 2130772357, - 2130772358, - 2130772359, - 2130772360, - 2130772361, - 2130772362, - 2130772363}; - - // aapt resource value: 1 - public const int FloatingActionButton_backgroundTint = 1; - - // aapt resource value: 2 - public const int FloatingActionButton_backgroundTintMode = 2; - - // aapt resource value: 10 - public const int FloatingActionButton_borderWidth = 10; - - // aapt resource value: 0 - public const int FloatingActionButton_elevation = 0; - - // aapt resource value: 7 - public const int FloatingActionButton_fabCustomSize = 7; - - // aapt resource value: 6 - public const int FloatingActionButton_fabSize = 6; - - // aapt resource value: 3 - public const int FloatingActionButton_hideMotionSpec = 3; - - // aapt resource value: 8 - public const int FloatingActionButton_hoveredFocusedTranslationZ = 8; - - // aapt resource value: 12 - public const int FloatingActionButton_maxImageSize = 12; - - // aapt resource value: 9 - public const int FloatingActionButton_pressedTranslationZ = 9; - - // aapt resource value: 4 - public const int FloatingActionButton_rippleColor = 4; - - // aapt resource value: 5 - public const int FloatingActionButton_showMotionSpec = 5; - - // aapt resource value: 11 - public const int FloatingActionButton_useCompatPadding = 11; - - public static int[] FloatingActionButton_Behavior_Layout = new int[] { - 2130772364}; - - // aapt resource value: 0 - public const int FloatingActionButton_Behavior_Layout_behavior_autoHide = 0; - - public static int[] FlowLayout = new int[] { - 2130772365, - 2130772366}; - - // aapt resource value: 0 - public const int FlowLayout_itemSpacing = 0; - - // aapt resource value: 1 - public const int FlowLayout_lineSpacing = 1; - - public static int[] FontFamily = new int[] { - 2130772448, - 2130772449, - 2130772450, - 2130772451, - 2130772452, - 2130772453}; - - // aapt resource value: 0 - public const int FontFamily_fontProviderAuthority = 0; - - // aapt resource value: 3 - public const int FontFamily_fontProviderCerts = 3; - - // aapt resource value: 4 - public const int FontFamily_fontProviderFetchStrategy = 4; - - // aapt resource value: 5 - public const int FontFamily_fontProviderFetchTimeout = 5; - - // aapt resource value: 1 - public const int FontFamily_fontProviderPackage = 1; - - // aapt resource value: 2 - public const int FontFamily_fontProviderQuery = 2; - - public static int[] FontFamilyFont = new int[] { - 16844082, - 16844083, - 16844095, - 16844143, - 16844144, - 2130772454, - 2130772455, - 2130772456, - 2130772457, - 2130772458}; - - // aapt resource value: 0 - public const int FontFamilyFont_android_font = 0; - - // aapt resource value: 2 - public const int FontFamilyFont_android_fontStyle = 2; - - // aapt resource value: 4 - public const int FontFamilyFont_android_fontVariationSettings = 4; - - // aapt resource value: 1 - public const int FontFamilyFont_android_fontWeight = 1; - - // aapt resource value: 3 - public const int FontFamilyFont_android_ttcIndex = 3; - - // aapt resource value: 6 - public const int FontFamilyFont_font = 6; - - // aapt resource value: 5 - public const int FontFamilyFont_fontStyle = 5; - - // aapt resource value: 8 - public const int FontFamilyFont_fontVariationSettings = 8; - - // aapt resource value: 7 - public const int FontFamilyFont_fontWeight = 7; - - // aapt resource value: 9 - public const int FontFamilyFont_ttcIndex = 9; - - public static int[] ForegroundLinearLayout = new int[] { - 16843017, - 16843264, - 2130772367}; - - // aapt resource value: 0 - public const int ForegroundLinearLayout_android_foreground = 0; - - // aapt resource value: 1 - public const int ForegroundLinearLayout_android_foregroundGravity = 1; - - // aapt resource value: 2 - public const int ForegroundLinearLayout_foregroundInsidePadding = 2; - - public static int[] GradientColor = new int[] { - 16843165, - 16843166, - 16843169, - 16843170, - 16843171, - 16843172, - 16843265, - 16843275, - 16844048, - 16844049, - 16844050, - 16844051}; - - // aapt resource value: 7 - public const int GradientColor_android_centerColor = 7; - - // aapt resource value: 3 - public const int GradientColor_android_centerX = 3; - - // aapt resource value: 4 - public const int GradientColor_android_centerY = 4; - - // aapt resource value: 1 - public const int GradientColor_android_endColor = 1; - - // aapt resource value: 10 - public const int GradientColor_android_endX = 10; - - // aapt resource value: 11 - public const int GradientColor_android_endY = 11; - - // aapt resource value: 5 - public const int GradientColor_android_gradientRadius = 5; - - // aapt resource value: 0 - public const int GradientColor_android_startColor = 0; - - // aapt resource value: 8 - public const int GradientColor_android_startX = 8; - - // aapt resource value: 9 - public const int GradientColor_android_startY = 9; - - // aapt resource value: 6 - public const int GradientColor_android_tileMode = 6; - - // aapt resource value: 2 - public const int GradientColor_android_type = 2; - - public static int[] GradientColorItem = new int[] { - 16843173, - 16844052}; - - // aapt resource value: 0 - public const int GradientColorItem_android_color = 0; - - // aapt resource value: 1 - public const int GradientColorItem_android_offset = 1; - - public static int[] LinearLayoutCompat = new int[] { - 16842927, - 16842948, - 16843046, - 16843047, - 16843048, - 2130772014, - 2130772189, - 2130772190, - 2130772191}; - - // aapt resource value: 2 - public const int LinearLayoutCompat_android_baselineAligned = 2; - - // aapt resource value: 3 - public const int LinearLayoutCompat_android_baselineAlignedChildIndex = 3; - - // aapt resource value: 0 - public const int LinearLayoutCompat_android_gravity = 0; - - // aapt resource value: 1 - public const int LinearLayoutCompat_android_orientation = 1; - - // aapt resource value: 4 - public const int LinearLayoutCompat_android_weightSum = 4; - - // aapt resource value: 5 - public const int LinearLayoutCompat_divider = 5; - - // aapt resource value: 8 - public const int LinearLayoutCompat_dividerPadding = 8; - - // aapt resource value: 6 - public const int LinearLayoutCompat_measureWithLargestChild = 6; - - // aapt resource value: 7 - public const int LinearLayoutCompat_showDividers = 7; - - public static int[] LinearLayoutCompat_Layout = new int[] { - 16842931, - 16842996, - 16842997, - 16843137}; - - // aapt resource value: 0 - public const int LinearLayoutCompat_Layout_android_layout_gravity = 0; - - // aapt resource value: 2 - public const int LinearLayoutCompat_Layout_android_layout_height = 2; - - // aapt resource value: 3 - public const int LinearLayoutCompat_Layout_android_layout_weight = 3; - - // aapt resource value: 1 - public const int LinearLayoutCompat_Layout_android_layout_width = 1; - - public static int[] ListPopupWindow = new int[] { - 16843436, - 16843437}; - - // aapt resource value: 0 - public const int ListPopupWindow_android_dropDownHorizontalOffset = 0; - - // aapt resource value: 1 - public const int ListPopupWindow_android_dropDownVerticalOffset = 1; - - public static int[] MaterialButton = new int[] { - 16843191, - 16843192, - 16843193, - 16843194, - 2130772012, - 2130772200, - 2130772201, - 2130772252, - 2130772253, - 2130772267, - 2130772270, - 2130772271, - 2130772368, - 2130772369, - 2130772370, - 2130772371}; - - // aapt resource value: 3 - public const int MaterialButton_android_insetBottom = 3; - - // aapt resource value: 0 - public const int MaterialButton_android_insetLeft = 0; - - // aapt resource value: 1 - public const int MaterialButton_android_insetRight = 1; - - // aapt resource value: 2 - public const int MaterialButton_android_insetTop = 2; - - // aapt resource value: 7 - public const int MaterialButton_backgroundTint = 7; - - // aapt resource value: 8 - public const int MaterialButton_backgroundTintMode = 8; - - // aapt resource value: 15 - public const int MaterialButton_cornerRadius = 15; - - // aapt resource value: 4 - public const int MaterialButton_icon = 4; - - // aapt resource value: 14 - public const int MaterialButton_iconGravity = 14; - - // aapt resource value: 13 - public const int MaterialButton_iconPadding = 13; - - // aapt resource value: 12 - public const int MaterialButton_iconSize = 12; - - // aapt resource value: 5 - public const int MaterialButton_iconTint = 5; - - // aapt resource value: 6 - public const int MaterialButton_iconTintMode = 6; - - // aapt resource value: 9 - public const int MaterialButton_rippleColor = 9; - - // aapt resource value: 10 - public const int MaterialButton_strokeColor = 10; - - // aapt resource value: 11 - public const int MaterialButton_strokeWidth = 11; - - public static int[] MaterialCardView = new int[] { - 2130772270, - 2130772271}; - - // aapt resource value: 0 - public const int MaterialCardView_strokeColor = 0; - - // aapt resource value: 1 - public const int MaterialCardView_strokeWidth = 1; - - public static int[] MaterialComponentsTheme = new int[] { - 2130772142, - 2130772143, - 2130772144, - 2130772151, - 2130772165, - 2130772256, - 2130772257, - 2130772258, - 2130772259, - 2130772260, - 2130772261, - 2130772262, - 2130772264, - 2130772265, - 2130772266, - 2130772268, - 2130772272, - 2130772273, - 2130772274, - 2130772275, - 2130772276, - 2130772277, - 2130772278, - 2130772279, - 2130772280, - 2130772281, - 2130772282, - 2130772283, - 2130772284, - 2130772285, - 2130772286, - 2130772383}; - - // aapt resource value: 5 - public const int MaterialComponentsTheme_bottomSheetDialogTheme = 5; - - // aapt resource value: 6 - public const int MaterialComponentsTheme_bottomSheetStyle = 6; - - // aapt resource value: 7 - public const int MaterialComponentsTheme_chipGroupStyle = 7; - - // aapt resource value: 8 - public const int MaterialComponentsTheme_chipStandaloneStyle = 8; - - // aapt resource value: 9 - public const int MaterialComponentsTheme_chipStyle = 9; - - // aapt resource value: 2 - public const int MaterialComponentsTheme_colorAccent = 2; - - // aapt resource value: 3 - public const int MaterialComponentsTheme_colorBackgroundFloating = 3; - - // aapt resource value: 0 - public const int MaterialComponentsTheme_colorPrimary = 0; - - // aapt resource value: 1 - public const int MaterialComponentsTheme_colorPrimaryDark = 1; - - // aapt resource value: 10 - public const int MaterialComponentsTheme_colorSecondary = 10; - - // aapt resource value: 4 - public const int MaterialComponentsTheme_editTextStyle = 4; - - // aapt resource value: 11 - public const int MaterialComponentsTheme_floatingActionButtonStyle = 11; - - // aapt resource value: 12 - public const int MaterialComponentsTheme_materialButtonStyle = 12; - - // aapt resource value: 13 - public const int MaterialComponentsTheme_materialCardViewStyle = 13; - - // aapt resource value: 14 - public const int MaterialComponentsTheme_navigationViewStyle = 14; - - // aapt resource value: 15 - public const int MaterialComponentsTheme_scrimBackground = 15; - - // aapt resource value: 31 - public const int MaterialComponentsTheme_snackbarButtonStyle = 31; - - // aapt resource value: 16 - public const int MaterialComponentsTheme_tabStyle = 16; - - // aapt resource value: 17 - public const int MaterialComponentsTheme_textAppearanceBody1 = 17; - - // aapt resource value: 18 - public const int MaterialComponentsTheme_textAppearanceBody2 = 18; - - // aapt resource value: 19 - public const int MaterialComponentsTheme_textAppearanceButton = 19; - - // aapt resource value: 20 - public const int MaterialComponentsTheme_textAppearanceCaption = 20; - - // aapt resource value: 21 - public const int MaterialComponentsTheme_textAppearanceHeadline1 = 21; - - // aapt resource value: 22 - public const int MaterialComponentsTheme_textAppearanceHeadline2 = 22; - - // aapt resource value: 23 - public const int MaterialComponentsTheme_textAppearanceHeadline3 = 23; - - // aapt resource value: 24 - public const int MaterialComponentsTheme_textAppearanceHeadline4 = 24; - - // aapt resource value: 25 - public const int MaterialComponentsTheme_textAppearanceHeadline5 = 25; - - // aapt resource value: 26 - public const int MaterialComponentsTheme_textAppearanceHeadline6 = 26; - - // aapt resource value: 27 - public const int MaterialComponentsTheme_textAppearanceOverline = 27; - - // aapt resource value: 28 - public const int MaterialComponentsTheme_textAppearanceSubtitle1 = 28; - - // aapt resource value: 29 - public const int MaterialComponentsTheme_textAppearanceSubtitle2 = 29; - - // aapt resource value: 30 - public const int MaterialComponentsTheme_textInputStyle = 30; - - public static int[] MediaRouteButton = new int[] { - 16843071, - 16843072, - 2130771989, - 2130771990}; - - // aapt resource value: 1 - public const int MediaRouteButton_android_minHeight = 1; - - // aapt resource value: 0 - public const int MediaRouteButton_android_minWidth = 0; - - // aapt resource value: 2 - public const int MediaRouteButton_externalRouteEnabledDrawable = 2; - - // aapt resource value: 3 - public const int MediaRouteButton_mediaRouteButtonTint = 3; - - public static int[] MenuGroup = new int[] { - 16842766, - 16842960, - 16843156, - 16843230, - 16843231, - 16843232}; - - // aapt resource value: 5 - public const int MenuGroup_android_checkableBehavior = 5; - - // aapt resource value: 0 - public const int MenuGroup_android_enabled = 0; - - // aapt resource value: 1 - public const int MenuGroup_android_id = 1; - - // aapt resource value: 3 - public const int MenuGroup_android_menuCategory = 3; - - // aapt resource value: 4 - public const int MenuGroup_android_orderInCategory = 4; - - // aapt resource value: 2 - public const int MenuGroup_android_visible = 2; - - public static int[] MenuItem = new int[] { - 16842754, - 16842766, - 16842960, - 16843014, - 16843156, - 16843230, - 16843231, - 16843233, - 16843234, - 16843235, - 16843236, - 16843237, - 16843375, - 2130772192, - 2130772193, - 2130772194, - 2130772195, - 2130772196, - 2130772197, - 2130772198, - 2130772199, - 2130772200, - 2130772201}; - - // aapt resource value: 16 - public const int MenuItem_actionLayout = 16; - - // aapt resource value: 18 - public const int MenuItem_actionProviderClass = 18; - - // aapt resource value: 17 - public const int MenuItem_actionViewClass = 17; - - // aapt resource value: 13 - public const int MenuItem_alphabeticModifiers = 13; - - // aapt resource value: 9 - public const int MenuItem_android_alphabeticShortcut = 9; - - // aapt resource value: 11 - public const int MenuItem_android_checkable = 11; - - // aapt resource value: 3 - public const int MenuItem_android_checked = 3; - - // aapt resource value: 1 - public const int MenuItem_android_enabled = 1; - - // aapt resource value: 0 - public const int MenuItem_android_icon = 0; - - // aapt resource value: 2 - public const int MenuItem_android_id = 2; - - // aapt resource value: 5 - public const int MenuItem_android_menuCategory = 5; - - // aapt resource value: 10 - public const int MenuItem_android_numericShortcut = 10; - - // aapt resource value: 12 - public const int MenuItem_android_onClick = 12; - - // aapt resource value: 6 - public const int MenuItem_android_orderInCategory = 6; - - // aapt resource value: 7 - public const int MenuItem_android_title = 7; - - // aapt resource value: 8 - public const int MenuItem_android_titleCondensed = 8; - - // aapt resource value: 4 - public const int MenuItem_android_visible = 4; - - // aapt resource value: 19 - public const int MenuItem_contentDescription = 19; - - // aapt resource value: 21 - public const int MenuItem_iconTint = 21; - - // aapt resource value: 22 - public const int MenuItem_iconTintMode = 22; - - // aapt resource value: 14 - public const int MenuItem_numericModifiers = 14; - - // aapt resource value: 15 - public const int MenuItem_showAsAction = 15; - - // aapt resource value: 20 - public const int MenuItem_tooltipText = 20; - - public static int[] MenuView = new int[] { - 16842926, - 16843052, - 16843053, - 16843054, - 16843055, - 16843056, - 16843057, - 2130772202, - 2130772203}; - - // aapt resource value: 4 - public const int MenuView_android_headerBackground = 4; - - // aapt resource value: 2 - public const int MenuView_android_horizontalDivider = 2; - - // aapt resource value: 5 - public const int MenuView_android_itemBackground = 5; - - // aapt resource value: 6 - public const int MenuView_android_itemIconDisabledAlpha = 6; - - // aapt resource value: 1 - public const int MenuView_android_itemTextAppearance = 1; - - // aapt resource value: 3 - public const int MenuView_android_verticalDivider = 3; - - // aapt resource value: 0 - public const int MenuView_android_windowAnimationStyle = 0; - - // aapt resource value: 7 - public const int MenuView_preserveIconSpacing = 7; - - // aapt resource value: 8 - public const int MenuView_subMenuArrow = 8; - - public static int[] MvxBinding = new int[] { - 2130772459, - 2130772460}; - - // aapt resource value: 0 - public const int MvxBinding_MvxBind = 0; - - // aapt resource value: 1 - public const int MvxBinding_MvxLang = 1; - - public static int[] MvxControl = new int[] { - 2130772461}; - - // aapt resource value: 0 - public const int MvxControl_MvxTemplate = 0; - - public static int[] MvxExpandableListView = new int[] { - 2130772464}; - - // aapt resource value: 0 - public const int MvxExpandableListView_MvxGroupItemTemplate = 0; - - public static int[] MvxListView = new int[] { - 2130772462, - 2130772463}; - - // aapt resource value: 1 - public const int MvxListView_MvxDropDownItemTemplate = 1; - - // aapt resource value: 0 - public const int MvxListView_MvxItemTemplate = 0; - - public static int[] NavigationView = new int[] { - 16842964, - 16842973, - 16843039, - 2130772031, - 2130772372, - 2130772373, - 2130772374, - 2130772375, - 2130772376, - 2130772377, - 2130772378, - 2130772379}; - - // aapt resource value: 0 - public const int NavigationView_android_background = 0; - - // aapt resource value: 1 - public const int NavigationView_android_fitsSystemWindows = 1; - - // aapt resource value: 2 - public const int NavigationView_android_maxWidth = 2; - - // aapt resource value: 3 - public const int NavigationView_elevation = 3; - - // aapt resource value: 9 - public const int NavigationView_headerLayout = 9; - - // aapt resource value: 7 - public const int NavigationView_itemBackground = 7; - - // aapt resource value: 10 - public const int NavigationView_itemHorizontalPadding = 10; - - // aapt resource value: 11 - public const int NavigationView_itemIconPadding = 11; - - // aapt resource value: 5 - public const int NavigationView_itemIconTint = 5; - - // aapt resource value: 8 - public const int NavigationView_itemTextAppearance = 8; - - // aapt resource value: 6 - public const int NavigationView_itemTextColor = 6; - - // aapt resource value: 4 - public const int NavigationView_menu = 4; - - public static int[] PopupWindow = new int[] { - 16843126, - 16843465, - 2130772204}; - - // aapt resource value: 1 - public const int PopupWindow_android_popupAnimationStyle = 1; - - // aapt resource value: 0 - public const int PopupWindow_android_popupBackground = 0; - - // aapt resource value: 2 - public const int PopupWindow_overlapAnchor = 2; - - public static int[] PopupWindowBackgroundState = new int[] { - 2130772205}; - - // aapt resource value: 0 - public const int PopupWindowBackgroundState_state_above_anchor = 0; - - public static int[] ProgressWheel = new int[] { - 2130772465, - 2130772466, - 2130772467, - 2130772468, - 2130772469, - 2130772470, - 2130772471, - 2130772472, - 2130772473, - 2130772474, - 2130772475, - 2130772476}; - - // aapt resource value: 3 - public const int ProgressWheel_ahBarColor = 3; - - // aapt resource value: 11 - public const int ProgressWheel_ahBarLength = 11; - - // aapt resource value: 10 - public const int ProgressWheel_ahBarWidth = 10; - - // aapt resource value: 8 - public const int ProgressWheel_ahCircleColor = 8; - - // aapt resource value: 7 - public const int ProgressWheel_ahDelayMillis = 7; - - // aapt resource value: 9 - public const int ProgressWheel_ahRadius = 9; - - // aapt resource value: 4 - public const int ProgressWheel_ahRimColor = 4; - - // aapt resource value: 5 - public const int ProgressWheel_ahRimWidth = 5; - - // aapt resource value: 6 - public const int ProgressWheel_ahSpinSpeed = 6; - - // aapt resource value: 0 - public const int ProgressWheel_ahText = 0; - - // aapt resource value: 1 - public const int ProgressWheel_ahTextColor = 1; - - // aapt resource value: 2 - public const int ProgressWheel_ahTextSize = 2; - - public static int[] RecycleListView = new int[] { - 2130772206, - 2130772207}; - - // aapt resource value: 0 - public const int RecycleListView_paddingBottomNoButtons = 0; - - // aapt resource value: 1 - public const int RecycleListView_paddingTopNoTitle = 1; - - public static int[] RecyclerView = new int[] { - 16842948, - 16842993, - 2130771968, - 2130771969, - 2130771970, - 2130771971, - 2130771972, - 2130771973, - 2130771974, - 2130771975, - 2130771976}; - - // aapt resource value: 1 - public const int RecyclerView_android_descendantFocusability = 1; - - // aapt resource value: 0 - public const int RecyclerView_android_orientation = 0; - - // aapt resource value: 6 - public const int RecyclerView_fastScrollEnabled = 6; - - // aapt resource value: 9 - public const int RecyclerView_fastScrollHorizontalThumbDrawable = 9; - - // aapt resource value: 10 - public const int RecyclerView_fastScrollHorizontalTrackDrawable = 10; - - // aapt resource value: 7 - public const int RecyclerView_fastScrollVerticalThumbDrawable = 7; - - // aapt resource value: 8 - public const int RecyclerView_fastScrollVerticalTrackDrawable = 8; - - // aapt resource value: 2 - public const int RecyclerView_layoutManager = 2; - - // aapt resource value: 4 - public const int RecyclerView_reverseLayout = 4; - - // aapt resource value: 3 - public const int RecyclerView_spanCount = 3; - - // aapt resource value: 5 - public const int RecyclerView_stackFromEnd = 5; - - public static int[] ScrimInsetsFrameLayout = new int[] { - 2130772380}; - - // aapt resource value: 0 - public const int ScrimInsetsFrameLayout_insetForeground = 0; - - public static int[] ScrollingViewBehavior_Layout = new int[] { - 2130772381}; - - // aapt resource value: 0 - public const int ScrollingViewBehavior_Layout_behavior_overlapTop = 0; - - public static int[] SearchView = new int[] { - 16842970, - 16843039, - 16843296, - 16843364, - 2130772208, - 2130772209, - 2130772210, - 2130772211, - 2130772212, - 2130772213, - 2130772214, - 2130772215, - 2130772216, - 2130772217, - 2130772218, - 2130772219, - 2130772220}; - - // aapt resource value: 0 - public const int SearchView_android_focusable = 0; - - // aapt resource value: 3 - public const int SearchView_android_imeOptions = 3; - - // aapt resource value: 2 - public const int SearchView_android_inputType = 2; - - // aapt resource value: 1 - public const int SearchView_android_maxWidth = 1; - - // aapt resource value: 8 - public const int SearchView_closeIcon = 8; - - // aapt resource value: 13 - public const int SearchView_commitIcon = 13; - - // aapt resource value: 7 - public const int SearchView_defaultQueryHint = 7; - - // aapt resource value: 9 - public const int SearchView_goIcon = 9; - - // aapt resource value: 5 - public const int SearchView_iconifiedByDefault = 5; - - // aapt resource value: 4 - public const int SearchView_layout = 4; - - // aapt resource value: 15 - public const int SearchView_queryBackground = 15; - - // aapt resource value: 6 - public const int SearchView_queryHint = 6; - - // aapt resource value: 11 - public const int SearchView_searchHintIcon = 11; - - // aapt resource value: 10 - public const int SearchView_searchIcon = 10; - - // aapt resource value: 16 - public const int SearchView_submitBackground = 16; - - // aapt resource value: 14 - public const int SearchView_suggestionRowLayout = 14; - - // aapt resource value: 12 - public const int SearchView_voiceIcon = 12; - - public static int[] Snackbar = new int[] { - 2130772382, - 2130772383}; - - // aapt resource value: 1 - public const int Snackbar_snackbarButtonStyle = 1; - - // aapt resource value: 0 - public const int Snackbar_snackbarStyle = 0; - - public static int[] SnackbarLayout = new int[] { - 16843039, - 2130772031, - 2130772384}; - - // aapt resource value: 0 - public const int SnackbarLayout_android_maxWidth = 0; - - // aapt resource value: 1 - public const int SnackbarLayout_elevation = 1; - - // aapt resource value: 2 - public const int SnackbarLayout_maxActionInlineWidth = 2; - - public static int[] Spinner = new int[] { - 16842930, - 16843126, - 16843131, - 16843362, - 2130772032}; - - // aapt resource value: 3 - public const int Spinner_android_dropDownWidth = 3; - - // aapt resource value: 0 - public const int Spinner_android_entries = 0; - - // aapt resource value: 1 - public const int Spinner_android_popupBackground = 1; - - // aapt resource value: 2 - public const int Spinner_android_prompt = 2; - - // aapt resource value: 4 - public const int Spinner_popupTheme = 4; - - public static int[] StateListDrawable = new int[] { - 16843036, - 16843156, - 16843157, - 16843158, - 16843532, - 16843533}; - - // aapt resource value: 3 - public const int StateListDrawable_android_constantSize = 3; - - // aapt resource value: 0 - public const int StateListDrawable_android_dither = 0; - - // aapt resource value: 4 - public const int StateListDrawable_android_enterFadeDuration = 4; - - // aapt resource value: 5 - public const int StateListDrawable_android_exitFadeDuration = 5; - - // aapt resource value: 2 - public const int StateListDrawable_android_variablePadding = 2; - - // aapt resource value: 1 - public const int StateListDrawable_android_visible = 1; - - public static int[] StateListDrawableItem = new int[] { - 16843161}; - - // aapt resource value: 0 - public const int StateListDrawableItem_android_drawable = 0; - - public static int[] SwitchCompat = new int[] { - 16843044, - 16843045, - 16843074, - 2130772221, - 2130772222, - 2130772223, - 2130772224, - 2130772225, - 2130772226, - 2130772227, - 2130772228, - 2130772229, - 2130772230, - 2130772231}; - - // aapt resource value: 1 - public const int SwitchCompat_android_textOff = 1; - - // aapt resource value: 0 - public const int SwitchCompat_android_textOn = 0; - - // aapt resource value: 2 - public const int SwitchCompat_android_thumb = 2; - - // aapt resource value: 13 - public const int SwitchCompat_showText = 13; - - // aapt resource value: 12 - public const int SwitchCompat_splitTrack = 12; - - // aapt resource value: 10 - public const int SwitchCompat_switchMinWidth = 10; - - // aapt resource value: 11 - public const int SwitchCompat_switchPadding = 11; - - // aapt resource value: 9 - public const int SwitchCompat_switchTextAppearance = 9; - - // aapt resource value: 8 - public const int SwitchCompat_thumbTextPadding = 8; - - // aapt resource value: 3 - public const int SwitchCompat_thumbTint = 3; - - // aapt resource value: 4 - public const int SwitchCompat_thumbTintMode = 4; - - // aapt resource value: 5 - public const int SwitchCompat_track = 5; - - // aapt resource value: 6 - public const int SwitchCompat_trackTint = 6; - - // aapt resource value: 7 - public const int SwitchCompat_trackTintMode = 7; - - public static int[] TabItem = new int[] { - 16842754, - 16842994, - 16843087}; - - // aapt resource value: 0 - public const int TabItem_android_icon = 0; - - // aapt resource value: 1 - public const int TabItem_android_layout = 1; - - // aapt resource value: 2 - public const int TabItem_android_text = 2; - - public static int[] TabLayout = new int[] { - 2130772385, - 2130772386, - 2130772387, - 2130772388, - 2130772389, - 2130772390, - 2130772391, - 2130772392, - 2130772393, - 2130772394, - 2130772395, - 2130772396, - 2130772397, - 2130772398, - 2130772399, - 2130772400, - 2130772401, - 2130772402, - 2130772403, - 2130772404, - 2130772405, - 2130772406, - 2130772407, - 2130772408, - 2130772409}; - - // aapt resource value: 3 - public const int TabLayout_tabBackground = 3; - - // aapt resource value: 2 - public const int TabLayout_tabContentStart = 2; - - // aapt resource value: 9 - public const int TabLayout_tabGravity = 9; - - // aapt resource value: 21 - public const int TabLayout_tabIconTint = 21; - - // aapt resource value: 22 - public const int TabLayout_tabIconTintMode = 22; - - // aapt resource value: 4 - public const int TabLayout_tabIndicator = 4; - - // aapt resource value: 6 - public const int TabLayout_tabIndicatorAnimationDuration = 6; - - // aapt resource value: 0 - public const int TabLayout_tabIndicatorColor = 0; - - // aapt resource value: 7 - public const int TabLayout_tabIndicatorFullWidth = 7; - - // aapt resource value: 5 - public const int TabLayout_tabIndicatorGravity = 5; - - // aapt resource value: 1 - public const int TabLayout_tabIndicatorHeight = 1; - - // aapt resource value: 10 - public const int TabLayout_tabInlineLabel = 10; - - // aapt resource value: 12 - public const int TabLayout_tabMaxWidth = 12; - - // aapt resource value: 11 - public const int TabLayout_tabMinWidth = 11; - - // aapt resource value: 8 - public const int TabLayout_tabMode = 8; - - // aapt resource value: 20 - public const int TabLayout_tabPadding = 20; - - // aapt resource value: 19 - public const int TabLayout_tabPaddingBottom = 19; - - // aapt resource value: 18 - public const int TabLayout_tabPaddingEnd = 18; - - // aapt resource value: 16 - public const int TabLayout_tabPaddingStart = 16; - - // aapt resource value: 17 - public const int TabLayout_tabPaddingTop = 17; - - // aapt resource value: 23 - public const int TabLayout_tabRippleColor = 23; - - // aapt resource value: 15 - public const int TabLayout_tabSelectedTextColor = 15; - - // aapt resource value: 13 - public const int TabLayout_tabTextAppearance = 13; - - // aapt resource value: 14 - public const int TabLayout_tabTextColor = 14; - - // aapt resource value: 24 - public const int TabLayout_tabUnboundedRipple = 24; - - public static int[] TextAppearance = new int[] { - 16842901, - 16842902, - 16842903, - 16842904, - 16842906, - 16842907, - 16843105, - 16843106, - 16843107, - 16843108, - 16843692, - 2130772049, - 2130772055}; - - // aapt resource value: 10 - public const int TextAppearance_android_fontFamily = 10; - - // aapt resource value: 6 - public const int TextAppearance_android_shadowColor = 6; - - // aapt resource value: 7 - public const int TextAppearance_android_shadowDx = 7; - - // aapt resource value: 8 - public const int TextAppearance_android_shadowDy = 8; - - // aapt resource value: 9 - public const int TextAppearance_android_shadowRadius = 9; - - // aapt resource value: 3 - public const int TextAppearance_android_textColor = 3; - - // aapt resource value: 4 - public const int TextAppearance_android_textColorHint = 4; - - // aapt resource value: 5 - public const int TextAppearance_android_textColorLink = 5; - - // aapt resource value: 0 - public const int TextAppearance_android_textSize = 0; - - // aapt resource value: 2 - public const int TextAppearance_android_textStyle = 2; - - // aapt resource value: 1 - public const int TextAppearance_android_typeface = 1; - - // aapt resource value: 12 - public const int TextAppearance_fontFamily = 12; - - // aapt resource value: 11 - public const int TextAppearance_textAllCaps = 11; - - public static int[] TextInputLayout = new int[] { - 16842906, - 16843088, - 2130772410, - 2130772411, - 2130772412, - 2130772413, - 2130772414, - 2130772415, - 2130772416, - 2130772417, - 2130772418, - 2130772419, - 2130772420, - 2130772421, - 2130772422, - 2130772423, - 2130772424, - 2130772425, - 2130772426, - 2130772427, - 2130772428, - 2130772429, - 2130772430, - 2130772431, - 2130772432, - 2130772433, - 2130772434, - 2130772435}; - - // aapt resource value: 1 - public const int TextInputLayout_android_hint = 1; - - // aapt resource value: 0 - public const int TextInputLayout_android_textColorHint = 0; - - // aapt resource value: 26 - public const int TextInputLayout_boxBackgroundColor = 26; - - // aapt resource value: 19 - public const int TextInputLayout_boxBackgroundMode = 19; - - // aapt resource value: 20 - public const int TextInputLayout_boxCollapsedPaddingTop = 20; - - // aapt resource value: 24 - public const int TextInputLayout_boxCornerRadiusBottomEnd = 24; - - // aapt resource value: 23 - public const int TextInputLayout_boxCornerRadiusBottomStart = 23; - - // aapt resource value: 22 - public const int TextInputLayout_boxCornerRadiusTopEnd = 22; - - // aapt resource value: 21 - public const int TextInputLayout_boxCornerRadiusTopStart = 21; - - // aapt resource value: 25 - public const int TextInputLayout_boxStrokeColor = 25; - - // aapt resource value: 27 - public const int TextInputLayout_boxStrokeWidth = 27; - - // aapt resource value: 10 - public const int TextInputLayout_counterEnabled = 10; - - // aapt resource value: 11 - public const int TextInputLayout_counterMaxLength = 11; - - // aapt resource value: 13 - public const int TextInputLayout_counterOverflowTextAppearance = 13; - - // aapt resource value: 12 - public const int TextInputLayout_counterTextAppearance = 12; - - // aapt resource value: 8 - public const int TextInputLayout_errorEnabled = 8; - - // aapt resource value: 9 - public const int TextInputLayout_errorTextAppearance = 9; - - // aapt resource value: 5 - public const int TextInputLayout_helperText = 5; - - // aapt resource value: 6 - public const int TextInputLayout_helperTextEnabled = 6; - - // aapt resource value: 7 - public const int TextInputLayout_helperTextTextAppearance = 7; - - // aapt resource value: 3 - public const int TextInputLayout_hintAnimationEnabled = 3; - - // aapt resource value: 2 - public const int TextInputLayout_hintEnabled = 2; - - // aapt resource value: 4 - public const int TextInputLayout_hintTextAppearance = 4; - - // aapt resource value: 16 - public const int TextInputLayout_passwordToggleContentDescription = 16; - - // aapt resource value: 15 - public const int TextInputLayout_passwordToggleDrawable = 15; - - // aapt resource value: 14 - public const int TextInputLayout_passwordToggleEnabled = 14; - - // aapt resource value: 17 - public const int TextInputLayout_passwordToggleTint = 17; - - // aapt resource value: 18 - public const int TextInputLayout_passwordToggleTintMode = 18; - - public static int[] ThemeEnforcement = new int[] { - 16842804, - 2130772436, - 2130772437}; - - // aapt resource value: 0 - public const int ThemeEnforcement_android_textAppearance = 0; - - // aapt resource value: 1 - public const int ThemeEnforcement_enforceMaterialTheme = 1; - - // aapt resource value: 2 - public const int ThemeEnforcement_enforceTextAppearance = 2; - - public static int[] Toolbar = new int[] { - 16842927, - 16843072, - 2130772006, - 2130772009, - 2130772013, - 2130772025, - 2130772026, - 2130772027, - 2130772028, - 2130772029, - 2130772030, - 2130772032, - 2130772232, - 2130772233, - 2130772234, - 2130772235, - 2130772236, - 2130772237, - 2130772238, - 2130772239, - 2130772240, - 2130772241, - 2130772242, - 2130772243, - 2130772244, - 2130772245, - 2130772246, - 2130772247, - 2130772248}; - - // aapt resource value: 0 - public const int Toolbar_android_gravity = 0; - - // aapt resource value: 1 - public const int Toolbar_android_minHeight = 1; - - // aapt resource value: 21 - public const int Toolbar_buttonGravity = 21; - - // aapt resource value: 23 - public const int Toolbar_collapseContentDescription = 23; - - // aapt resource value: 22 - public const int Toolbar_collapseIcon = 22; - - // aapt resource value: 6 - public const int Toolbar_contentInsetEnd = 6; - - // aapt resource value: 10 - public const int Toolbar_contentInsetEndWithActions = 10; - - // aapt resource value: 7 - public const int Toolbar_contentInsetLeft = 7; - - // aapt resource value: 8 - public const int Toolbar_contentInsetRight = 8; - - // aapt resource value: 5 - public const int Toolbar_contentInsetStart = 5; - - // aapt resource value: 9 - public const int Toolbar_contentInsetStartWithNavigation = 9; - - // aapt resource value: 4 - public const int Toolbar_logo = 4; - - // aapt resource value: 26 - public const int Toolbar_logoDescription = 26; - - // aapt resource value: 20 - public const int Toolbar_maxButtonHeight = 20; - - // aapt resource value: 25 - public const int Toolbar_navigationContentDescription = 25; - - // aapt resource value: 24 - public const int Toolbar_navigationIcon = 24; - - // aapt resource value: 11 - public const int Toolbar_popupTheme = 11; - - // aapt resource value: 3 - public const int Toolbar_subtitle = 3; - - // aapt resource value: 13 - public const int Toolbar_subtitleTextAppearance = 13; - - // aapt resource value: 28 - public const int Toolbar_subtitleTextColor = 28; - - // aapt resource value: 2 - public const int Toolbar_title = 2; - - // aapt resource value: 14 - public const int Toolbar_titleMargin = 14; - - // aapt resource value: 18 - public const int Toolbar_titleMarginBottom = 18; - - // aapt resource value: 16 - public const int Toolbar_titleMarginEnd = 16; - - // aapt resource value: 15 - public const int Toolbar_titleMarginStart = 15; - - // aapt resource value: 17 - public const int Toolbar_titleMarginTop = 17; - - // aapt resource value: 19 - public const int Toolbar_titleMargins = 19; - - // aapt resource value: 12 - public const int Toolbar_titleTextAppearance = 12; - - // aapt resource value: 27 - public const int Toolbar_titleTextColor = 27; - - public static int[] View = new int[] { - 16842752, - 16842970, - 2130772249, - 2130772250, - 2130772251}; - - // aapt resource value: 1 - public const int View_android_focusable = 1; - - // aapt resource value: 0 - public const int View_android_theme = 0; - - // aapt resource value: 3 - public const int View_paddingEnd = 3; - - // aapt resource value: 2 - public const int View_paddingStart = 2; - - // aapt resource value: 4 - public const int View_theme = 4; - - public static int[] ViewBackgroundHelper = new int[] { - 16842964, - 2130772252, - 2130772253}; - - // aapt resource value: 0 - public const int ViewBackgroundHelper_android_background = 0; - - // aapt resource value: 1 - public const int ViewBackgroundHelper_backgroundTint = 1; - - // aapt resource value: 2 - public const int ViewBackgroundHelper_backgroundTintMode = 2; - - public static int[] ViewStubCompat = new int[] { - 16842960, - 16842994, - 16842995}; - - // aapt resource value: 0 - public const int ViewStubCompat_android_id = 0; - - // aapt resource value: 2 - public const int ViewStubCompat_android_inflatedId = 2; - - // aapt resource value: 1 - public const int ViewStubCompat_android_layout = 1; - - static Styleable() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Styleable() - { - } - } - } -} -#pragma warning restore 1591 diff --git a/Source/MvvmCross.Plugins.BLE.Droid/Resources/Resource.Designer.cs b/Source/MvvmCross.Plugins.BLE.Droid/Resources/Resource.Designer.cs deleted file mode 100644 index e69de29b..00000000 diff --git a/Source/Plugin.BLE.Android/Resources/Resource.Designer.cs b/Source/Plugin.BLE.Android/Resources/Resource.Designer.cs deleted file mode 100644 index e69de29b..00000000 From 0b3da63dda45fdf74e720aee57d97b8e44eaf288 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 10 Apr 2021 11:22:11 +0200 Subject: [PATCH 117/527] add Resource.Designer.cs to .gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 677f9ce2..c989a7f6 100644 --- a/.gitignore +++ b/.gitignore @@ -137,7 +137,7 @@ publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings +# TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj @@ -206,3 +206,5 @@ FakesAssemblies/ /.build/PluginNugetTest/testbuild .build/tools/ tools/ + +Resource.Designer.cs From 22bed210e32d6e207c0468ab4acddea1d3d36555 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 12 Apr 2021 22:16:05 +0200 Subject: [PATCH 118/527] add a GitHub Actions config * builds the code with cake (on MacOS), generates the nuget packages (using a package version based on "git describe") and uploads them as artifacts * this fixes #501 --- .github/workflows/dotnet.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/dotnet.yml diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 00000000..003a3e82 --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,35 @@ +name: ci/github-actions + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: nuget/setup-nuget@v1 + - name: Setup .NET + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 5.0.x + - name: Build + uses: cake-build/cake-action@v1 + with: + script-path: .build/build.cake + - name: Generate nuget package (Vanilla) + run: nuget pack .build/Plugin.BLE.nuspec -Version $(git describe) + - name: Generate nuget package (MvvmCross) + run: nuget pack .build/MvvmCross.Plugin.BLE.nuspec -Version $(git describe) + - name: Upload packages + uses: actions/upload-artifact@v2 + with: + name: nupkg + path: ./*Plugin.BLE*.nupkg From 95cc0b93f0dbc3874a0340f53fc613ef10edf6ae Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 14 Apr 2021 21:05:33 +0200 Subject: [PATCH 119/527] add a mailmap --- .mailmap | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .mailmap diff --git a/.mailmap b/.mailmap new file mode 100644 index 00000000..b897d4c2 --- /dev/null +++ b/.mailmap @@ -0,0 +1,42 @@ +Adrian Seceleanu +Adrian Seceleanu +Adrian Seceleanu +Adrian Seceleanu +Adrian Seceleanu +Ahmet Kiyak +Andrey Dolgov +Anton Sadovsky +Benoit Bergeron +Benoit Bergeron +Dave Humphreys +Felix.x +Francois Cholette +German Enriquez +HannesZei <40183844+HannesZei@users.noreply.github.com> +Irina Catalina +Janus Weil +Jason +Jean Bédard +Jean Bédard +Joe Chrysler +Jordan S +Kai Ruhnau +Kerry W. Lothrop +MarcAlx +Marco Bellino +Martin Kuckert +Martin Kuckert +Matthias Fasching +Michael Probst +Michael Probst +Michael Probst +Michael Spoehr +Morgan Oneka +Nithin Raj +Parth Patel +Sam Macpherson +Settar Tanriogen +Simon Trény +Sven-Michael Stübe +jaredballen +m-anthoine From 136f0f2c1a68595d40cfb59a57a367d4faa870fa Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 14 Apr 2021 22:51:53 +0200 Subject: [PATCH 120/527] fix warnings when building nuget packages --- .build/MvvmCross.Plugin.BLE.nuspec | 14 ++++++++++---- .build/Plugin.BLE.nuspec | 11 ++++++----- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/.build/MvvmCross.Plugin.BLE.nuspec b/.build/MvvmCross.Plugin.BLE.nuspec index 65acb9f2..7c04794a 100644 --- a/.build/MvvmCross.Plugin.BLE.nuspec +++ b/.build/MvvmCross.Plugin.BLE.nuspec @@ -5,7 +5,7 @@ Bluetooth LE Plugin for MvvmCross Adrian Seceleanu, Sven-Michael Stübe Adrian Seceleanu, Sven-Michael Stübe - http://www.apache.org/licenses/LICENSE-2.0 + Apache-2.0 https://github.com/xabre/xamarin-bluetooth-le false @@ -14,9 +14,10 @@ mvvm mvvmcross mvx xamarin monodroid Xamarin.iOS Xamarin.Android Bluetooth Low Energy BLE LE BTLE Smart ios android forms xamarinforms https://raw.githubusercontent.com/xabre/xamarin-bluetooth-le/master/icon_small.png + icon_small.png [2.1.1] - - iOS #373, #377 Fixed trace ouptut that caused NRE. + - iOS #373, #377 Fixed trace ouptut that caused NRE. [2.1.0] - Use IReadOnlyLists for Services/ Charactersitics/ Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices Should prevent crashes like: #320 @@ -55,7 +56,7 @@ Should prevent crashes like: #320 - Breaking changes: ConnectDeviceAsync optional parameters are now encapsulated in a ConnectParameter class for older releases: https://github.com/xabre/xamarin-bluetooth-le/blob/master/doc/changelog.md - + @@ -87,5 +88,10 @@ Should prevent crashes like: #320 + + + + + - \ No newline at end of file + diff --git a/.build/Plugin.BLE.nuspec b/.build/Plugin.BLE.nuspec index 7a59c303..d9a06830 100644 --- a/.build/Plugin.BLE.nuspec +++ b/.build/Plugin.BLE.nuspec @@ -5,7 +5,7 @@ Bluetooth LE Plugin for Xamarin Adrian Seceleanu, Sven-Michael Stübe Adrian Seceleanu, Sven-Michael Stübe - http://www.apache.org/licenses/LICENSE-2.0 + Apache-2.0 https://github.com/xabre/xamarin-bluetooth-le false @@ -14,9 +14,10 @@ xamarin monodroid Xamarin.iOS bluetooth BLE LE BTLE Smart xamarin.forms ios android forms xamarinforms https://raw.githubusercontent.com/xabre/xamarin-bluetooth-le/master/icon_small.png + icon_small.png [2.1.1] - - iOS #373, #377 Fixed trace ouptut that caused NRE. + - iOS #373, #377 Fixed trace ouptut that caused NRE. [2.1.0] - Use IReadOnlyLists for Services/ Charactersitics/ Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices Should prevent crashes like: #320 @@ -65,8 +66,6 @@ Should prevent crashes like: #320 - - @@ -78,5 +77,7 @@ Should prevent crashes like: #320 + + - \ No newline at end of file + From 495ed18cfd0cb22e027dc1b25c080954d665f800 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 15 Apr 2021 12:14:52 +0200 Subject: [PATCH 121/527] remove mailmap again --- .mailmap | 42 ------------------------------------------ 1 file changed, 42 deletions(-) delete mode 100644 .mailmap diff --git a/.mailmap b/.mailmap deleted file mode 100644 index b897d4c2..00000000 --- a/.mailmap +++ /dev/null @@ -1,42 +0,0 @@ -Adrian Seceleanu -Adrian Seceleanu -Adrian Seceleanu -Adrian Seceleanu -Adrian Seceleanu -Ahmet Kiyak -Andrey Dolgov -Anton Sadovsky -Benoit Bergeron -Benoit Bergeron -Dave Humphreys -Felix.x -Francois Cholette -German Enriquez -HannesZei <40183844+HannesZei@users.noreply.github.com> -Irina Catalina -Janus Weil -Jason -Jean Bédard -Jean Bédard -Joe Chrysler -Jordan S -Kai Ruhnau -Kerry W. Lothrop -MarcAlx -Marco Bellino -Martin Kuckert -Martin Kuckert -Matthias Fasching -Michael Probst -Michael Probst -Michael Probst -Michael Spoehr -Morgan Oneka -Nithin Raj -Parth Patel -Sam Macpherson -Settar Tanriogen -Simon Trény -Sven-Michael Stübe -jaredballen -m-anthoine From d2b0187080b1e65d573ff726f2df217e8cb54c98 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 14 Apr 2021 23:12:29 +0200 Subject: [PATCH 122/527] update Xamarin.Forms from 4.2 to 5.0 * for BLE.Client.Droid, this also requires an update of the TargetFrameworkVersion from 9 to 10, and two additional AndroidX packages --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 12 +++++++++--- .../BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj | 2 +- .../BLE.Client.macOS/BLE.Client.macOS.csproj | 2 +- Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index d44c8680..b5e68244 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -1,4 +1,4 @@ - + Debug @@ -15,7 +15,7 @@ Properties\AndroidManifest.xml Resources Assets - v9.0 + v10.0 false @@ -127,7 +127,13 @@ 3.1.1 - 4.2.0.709249 + 5.0.0.2012 + + + 1.2.2.1 + + + 1.0.0.7 diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index 8ffda61a..ebba50eb 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -200,7 +200,7 @@ 3.1.1 - 4.2.0.709249 + 5.0.0.2012 diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index c6f7b9a2..592d0c09 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -109,7 +109,7 @@ 3.1.1 - 4.2.0.709249 + 5.0.0.2012 diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index b258f80a..d1294d31 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -14,7 +14,7 @@ - + From 681a2e399b93768c4979b073966223ff308ca91b Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 14 Apr 2021 23:12:29 +0200 Subject: [PATCH 123/527] update MvvmCross from 6.3.1 to 7.1.2 --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 2 +- Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj | 2 +- Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj | 2 +- Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- .../MvvmCross.Plugins.BLE.Droid.csproj | 2 +- .../MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj | 2 +- .../MvvmCross.Plugins.BLE.macOS.csproj | 2 +- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index b5e68244..4cd8c79d 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -115,7 +115,7 @@ 7.0.4 - 6.3.1 + 7.1.2 6.3.1 diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index ebba50eb..5e555372 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -188,7 +188,7 @@ 7.0.4 - 6.3.1 + 7.1.2 6.3.1 diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index 592d0c09..9c0b69fa 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -97,7 +97,7 @@ 7.0.4 - 6.3.1 + 7.1.2 6.3.1 diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index d1294d31..1b2f620d 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/MvvmCross.Plugins.BLE.Droid/MvvmCross.Plugins.BLE.Droid.csproj b/Source/MvvmCross.Plugins.BLE.Droid/MvvmCross.Plugins.BLE.Droid.csproj index 9aed7f4d..dd0df23e 100644 --- a/Source/MvvmCross.Plugins.BLE.Droid/MvvmCross.Plugins.BLE.Droid.csproj +++ b/Source/MvvmCross.Plugins.BLE.Droid/MvvmCross.Plugins.BLE.Droid.csproj @@ -70,7 +70,7 @@ - 6.3.1 + 7.1.2 diff --git a/Source/MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj b/Source/MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj index 1644a72e..70a2a7b3 100644 --- a/Source/MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj +++ b/Source/MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj @@ -62,7 +62,7 @@ - 6.3.1 + 7.1.2 diff --git a/Source/MvvmCross.Plugins.BLE.macOS/MvvmCross.Plugins.BLE.macOS.csproj b/Source/MvvmCross.Plugins.BLE.macOS/MvvmCross.Plugins.BLE.macOS.csproj index d7727aab..e66fc932 100644 --- a/Source/MvvmCross.Plugins.BLE.macOS/MvvmCross.Plugins.BLE.macOS.csproj +++ b/Source/MvvmCross.Plugins.BLE.macOS/MvvmCross.Plugins.BLE.macOS.csproj @@ -77,7 +77,7 @@ - 6.3.1 + 7.1.2 diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index f64c5e49..4f5f50c4 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -3,7 +3,7 @@ netstandard2.0 - + From 2e4dceaeec1dde75014acac5b257edbf7a64ce5c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 14 Apr 2021 23:29:32 +0200 Subject: [PATCH 124/527] update MvvmCross.Forms from 6.3.1 to 7.1.2 --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 2 +- .../Properties/AndroidManifest.xml | 2 +- Source/BLE.Client/BLE.Client.Droid/Setup.cs | 9 +++++---- .../BLE.Client.iOS/BLE.Client.iOS.csproj | 2 +- Source/BLE.Client/BLE.Client.iOS/Setup.cs | 14 +++++--------- .../BLE.Client.macOS/BLE.Client.macOS.csproj | 2 +- Source/BLE.Client/BLE.Client.macOS/Setup.cs | 9 +++++---- Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- 8 files changed, 20 insertions(+), 22 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index 4cd8c79d..e2e592fa 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -118,7 +118,7 @@ 7.1.2 - 6.3.1 + 7.1.2 3.0.0.12 diff --git a/Source/BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml b/Source/BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml index 74a32236..27366450 100644 --- a/Source/BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml +++ b/Source/BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml @@ -1,6 +1,6 @@  - + diff --git a/Source/BLE.Client/BLE.Client.Droid/Setup.cs b/Source/BLE.Client/BLE.Client.Droid/Setup.cs index 97b7b93b..59c37ca1 100644 --- a/Source/BLE.Client/BLE.Client.Droid/Setup.cs +++ b/Source/BLE.Client/BLE.Client.Droid/Setup.cs @@ -2,10 +2,9 @@ using System.Linq; using System.Reflection; using Acr.UserDialogs; -using Android.Content; -using MvvmCross.ViewModels; using MvvmCross; using MvvmCross.Forms.Platforms.Android.Core; +using MvvmCross.IoC; using Plugin.Permissions; using Plugin.Settings; @@ -18,13 +17,15 @@ public override IEnumerable GetViewAssemblies() return new List(base.GetViewAssemblies().Union(new[] { typeof(BleMvxFormsApp).GetTypeInfo().Assembly })); } - protected override void InitializeIoC() + protected override IMvxIoCProvider InitializeIoC() { - base.InitializeIoC(); + var result = base.InitializeIoC(); Mvx.IoCProvider.RegisterSingleton(() => UserDialogs.Instance); Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); Mvx.IoCProvider.RegisterSingleton(() => CrossPermissions.Current); + + return result; } } } diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index 5e555372..e0020e53 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -191,7 +191,7 @@ 7.1.2 - 6.3.1 + 7.1.2 3.0.0.12 diff --git a/Source/BLE.Client/BLE.Client.iOS/Setup.cs b/Source/BLE.Client/BLE.Client.iOS/Setup.cs index b1f32c23..66ce6565 100644 --- a/Source/BLE.Client/BLE.Client.iOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.iOS/Setup.cs @@ -1,16 +1,10 @@ -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; using Acr.UserDialogs; using MvvmCross; using MvvmCross.Forms.Platforms.Ios.Core; -using MvvmCross.Plugin; +using MvvmCross.IoC; using MvvmCross.ViewModels; using Plugin.Permissions; using Plugin.Settings; -using UIKit; -using Xamarin.Forms; namespace BLE.Client.iOS { @@ -21,13 +15,15 @@ protected override IMvxApplication CreateApp() return new BleMvxApplication(); } - protected override void InitializeIoC() + protected override IMvxIoCProvider InitializeIoC() { - base.InitializeIoC(); + var result = base.InitializeIoC(); Mvx.RegisterSingleton(() => UserDialogs.Instance); Mvx.RegisterSingleton(() => CrossSettings.Current); Mvx.RegisterSingleton(() => CrossPermissions.Current); + + return result; } protected override Xamarin.Forms.Application CreateFormsApplication() diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index 9c0b69fa..16b3e681 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -100,7 +100,7 @@ 7.1.2 - 6.3.1 + 7.1.2 3.0.0.12 diff --git a/Source/BLE.Client/BLE.Client.macOS/Setup.cs b/Source/BLE.Client/BLE.Client.macOS/Setup.cs index a9bb589a..58a422de 100644 --- a/Source/BLE.Client/BLE.Client.macOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.macOS/Setup.cs @@ -7,8 +7,7 @@ using Acr.UserDialogs; using MvvmCross; using MvvmCross.Forms.Platforms.Mac.Core; -using MvvmCross.ViewModels; -using Plugin.Permissions; +using MvvmCross.IoC; using Plugin.Permissions.Abstractions; using Plugin.Settings; using Xamarin.Forms; @@ -17,15 +16,17 @@ namespace BLE.Client.macOS { public class Setup : MvxFormsMacSetup { - protected override void InitializeIoC() + protected override IMvxIoCProvider InitializeIoC() { - base.InitializeIoC(); + var result = base.InitializeIoC(); // Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current); // Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current.Adapter); Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); Mvx.IoCProvider.RegisterSingleton(() => new PermissionMac()); Mvx.IoCProvider.RegisterSingleton(() => new UserDialogsMac()); + + return result; } public override IEnumerable GetPluginAssemblies() diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 1b2f620d..681d8ed4 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -11,7 +11,7 @@ - + From eed061adf8554909bcc012612e8da3293d6c34ed Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 16 Apr 2021 21:45:47 +0200 Subject: [PATCH 125/527] MvvmCross.Plugins.BLE.macOS: fix some obsolescence warnings * use the same code as in MvvmCross.Plugins.BLE.iOS Warning CS0618: 'Mvx.Resolve()' is obsolete: 'Use Mvx.IoCProvider instead' (CS0618) (MvvmCross.Plugins.BLE.macOS) Warning CS0618: 'Mvx.LazyConstructAndRegisterSingleton(Func)' is obsolete: 'Use Mvx.IoCProvider instead' (CS0618) (MvvmCross.Plugins.BLE.macOS) --- Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs b/Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs index 93bf1f73..3570a00b 100644 --- a/Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs +++ b/Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs @@ -1,4 +1,5 @@ using Foundation; +using MvvmCross.IoC; using MvvmCross.Logging; using MvvmCross.Plugin; using Plugin.BLE; @@ -17,15 +18,15 @@ public class Plugin public Plugin() { - var log = Mvx.Resolve(); + var log = Mvx.IoCProvider.Resolve(); Trace.TraceImplementation = log.Trace; } public void Load() { Trace.Message("Loading bluetooth low energy plugin"); - Mvx.LazyConstructAndRegisterSingleton(() => CrossBluetoothLE.Current); - Mvx.LazyConstructAndRegisterSingleton(() => Mvx.Resolve().Adapter); + Mvx.IoCProvider.LazyConstructAndRegisterSingleton(() => CrossBluetoothLE.Current); + Mvx.IoCProvider.LazyConstructAndRegisterSingleton(() => Mvx.IoCProvider.Resolve().Adapter); } } } \ No newline at end of file From b0b0aaf667712d21b09f21102f97cbbeb9b2e73f Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 16 Apr 2021 21:51:47 +0200 Subject: [PATCH 126/527] update Acr.UserDialogs from 7.0.4 to 7.1.0 --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 2 +- Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj | 2 +- Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj | 2 +- Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index e2e592fa..b04e16b9 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -112,7 +112,7 @@ - 7.0.4 + 7.1.0.483 7.1.2 diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index e0020e53..7d161d24 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -185,7 +185,7 @@ - 7.0.4 + 7.1.0.483 7.1.2 diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index 16b3e681..bb0df456 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -94,7 +94,7 @@ - 7.0.4 + 7.1.0.483 7.1.2 diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 681d8ed4..8a559439 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -9,7 +9,7 @@ - + From bf10bfcf75e1011f6565556dced81d5fad00d28c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 16 Apr 2021 21:56:28 +0200 Subject: [PATCH 127/527] update xunit.runner.visualstudio from 2.4.1 to 2.4.3 --- Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj index 49da0adc..249cf612 100644 --- a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj +++ b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj @@ -8,7 +8,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 23c95dbf149c5d0c83f90d22f1053db20fdfc87b Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 16 Apr 2021 22:39:04 +0200 Subject: [PATCH 128/527] update Plugin.Permissions from 3.0.0.12 to 6.0.1 --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 5 ++++- Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj | 2 +- .../BLE.Client.macOS/BLE.Client.macOS.csproj | 2 +- Source/BLE.Client/BLE.Client.macOS/Setup.cs | 10 ++++++++++ Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index b04e16b9..ec6c6925 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -121,7 +121,7 @@ 7.1.2 - 3.0.0.12 + 6.0.1 3.1.1 @@ -135,6 +135,9 @@ 1.0.0.7 + + 2.1.0.4 + \ No newline at end of file diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index 7d161d24..2b7d8e08 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -194,7 +194,7 @@ 7.1.2 - 3.0.0.12 + 6.0.1 3.1.1 diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index bb0df456..96fb97de 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -103,7 +103,7 @@ 7.1.2 - 3.0.0.12 + 6.0.1 3.1.1 diff --git a/Source/BLE.Client/BLE.Client.macOS/Setup.cs b/Source/BLE.Client/BLE.Client.macOS/Setup.cs index 58a422de..aa126f9c 100644 --- a/Source/BLE.Client/BLE.Client.macOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.macOS/Setup.cs @@ -48,6 +48,11 @@ public Task CheckPermissionStatusAsync(Permission permission) return Task.FromResult(PermissionStatus.Granted); } + public Task CheckPermissionStatusAsync() where T : Plugin.Permissions.BasePermission, new() + { + return Task.FromResult(PermissionStatus.Granted); + } + public bool OpenAppSettings() { return true; @@ -58,6 +63,11 @@ public Task> RequestPermissionsAsync(pa return Task.FromResult(permissions.ToDictionary(p => p, p => PermissionStatus.Granted)); } + public Task RequestPermissionAsync() where T : Plugin.Permissions.BasePermission, new() + { + return Task.FromResult(PermissionStatus.Granted); + } + public Task ShouldShowRequestPermissionRationaleAsync(Permission permission) { return Task.FromResult(true); diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 8a559439..8c81254c 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -12,7 +12,7 @@ - + From 21449168bbdf58193208a0e7074c88f01e035853 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 16 Apr 2021 23:05:07 +0200 Subject: [PATCH 129/527] BLE.Client.iOS: fix some obsolescence warnings Warning CS0618: 'Mvx.RegisterSingleton(Func)' is obsolete: 'Use Mvx.IoCProvider instead' (CS0618) (BLE.Client.iOS) --- Source/BLE.Client/BLE.Client.iOS/Setup.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.iOS/Setup.cs b/Source/BLE.Client/BLE.Client.iOS/Setup.cs index 66ce6565..57a13e80 100644 --- a/Source/BLE.Client/BLE.Client.iOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.iOS/Setup.cs @@ -19,9 +19,9 @@ protected override IMvxIoCProvider InitializeIoC() { var result = base.InitializeIoC(); - Mvx.RegisterSingleton(() => UserDialogs.Instance); - Mvx.RegisterSingleton(() => CrossSettings.Current); - Mvx.RegisterSingleton(() => CrossPermissions.Current); + Mvx.IoCProvider.RegisterSingleton(() => UserDialogs.Instance); + Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); + Mvx.IoCProvider.RegisterSingleton(() => CrossPermissions.Current); return result; } From 3210b49632b273ec5dac1ccf2b4cd9a441bf57c2 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 16 Apr 2021 23:18:06 +0200 Subject: [PATCH 130/527] BLE.Client: fix some obsolescence warnings --- .../BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs index fd39ec9f..78171ab1 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs @@ -225,12 +225,12 @@ private async void TryStartScanning(bool refresh = false) { if (Xamarin.Forms.Device.RuntimePlatform == Device.Android) { - var status = await _permissions.CheckPermissionStatusAsync(Permission.Location); + var status = await _permissions.CheckPermissionStatusAsync(); if (status != PermissionStatus.Granted) { - var permissionResult = await _permissions.RequestPermissionsAsync(Permission.Location); + var permissionResult = await _permissions.RequestPermissionAsync(); - if (permissionResult.First().Value != PermissionStatus.Granted) + if (permissionResult != PermissionStatus.Granted) { await _userDialogs.AlertAsync("Permission denied. Not scanning."); _permissions.OpenAppSettings(); From b46e75204c665b4604c3b64075bf6526fc51aeb6 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 16 Apr 2021 23:32:05 +0200 Subject: [PATCH 131/527] update Xam.Plugins.Settings from 3.1.1 to 4.1.0-beta --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 2 +- Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj | 2 +- Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj | 2 +- Source/BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index ec6c6925..d555cdf9 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -124,7 +124,7 @@ 6.0.1 - 3.1.1 + 4.1.0-beta 5.0.0.2012 diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index 2b7d8e08..179e69ea 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -197,7 +197,7 @@ 6.0.1 - 3.1.1 + 4.1.0-beta 5.0.0.2012 diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index 96fb97de..1cb6ab94 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -106,7 +106,7 @@ 6.0.1 - 3.1.1 + 4.1.0-beta 5.0.0.2012 diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 8c81254c..942d7ed3 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -13,7 +13,7 @@ - + From 8b127b13ede7895d331c2020e5ce393cb81c3cb1 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 16 Apr 2021 22:08:08 +0200 Subject: [PATCH 132/527] BLE.Client.macOS: fix a warning Warning MSB3276: Found conflicts between different versions of the same dependent assembly. Please set the "AutoGenerateBindingRedirects" property to true in the project file. For more information, see http://go.microsoft.com/fwlink/?LinkId=294190. (MSB3276) (BLE.Client.macOS) --- Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index 1cb6ab94..87352cdb 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -11,6 +11,7 @@ v2.0 Xamarin.Mac Resources + true true @@ -128,4 +129,4 @@ - \ No newline at end of file + From 71bc71171e385f8429a37cc3b109fe0b00e23ced Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 17 Apr 2021 23:39:53 +0200 Subject: [PATCH 133/527] work around https://github.com/xamarin/Xamarin.Forms/issues/13969 * building BLE.Client.Droid in Release mode failed with XALNK7000 errors related to AndroidX (e.g. in the Bitrise build) --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index d555cdf9..5edaf22f 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -138,6 +138,12 @@ 2.1.0.4 + + 1.2.0 + + + 1.1.1.8 + \ No newline at end of file From 3592543695da0aaa3e0c9f71eba132d20d001883 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 19 Apr 2021 11:31:09 +0200 Subject: [PATCH 134/527] BLE.Client.Droid: get rid of two exceptions (Android.Views.InflateException) Android.Views.InflateException: Binary XML file line #1 in com.ble.client:layout/toolbar: Binary XML file line #1 in com.ble.client:layout/toolbar: Error inflating class android.support.v7.widget.Toolbar Android.Views.InflateException: Binary XML file line #1 in com.ble.client:layout/tabs: Binary XML file line #1 in com.ble.client:layout/tabs: Error inflating class android.support.design.widget.TabLayout --- Source/BLE.Client/BLE.Client.Droid/Resources/layout/tabs.axml | 2 +- .../BLE.Client/BLE.Client.Droid/Resources/layout/toolbar.axml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/Resources/layout/tabs.axml b/Source/BLE.Client/BLE.Client.Droid/Resources/layout/tabs.axml index 97cb27ad..c78ab91e 100644 --- a/Source/BLE.Client/BLE.Client.Droid/Resources/layout/tabs.axml +++ b/Source/BLE.Client/BLE.Client.Droid/Resources/layout/tabs.axml @@ -1,5 +1,5 @@ - - Date: Mon, 19 Apr 2021 22:59:05 +0200 Subject: [PATCH 135/527] extend the cake script * add a target for building the clients * add a target for building the libs without cleaning and restoring * fix the paths in the Clean target * extend the functions 'GetProjectsDir' and 'BuildProject' with a path prefix --- .build/build.cake | 51 +++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/.build/build.cake b/.build/build.cake index d87e6805..873bf613 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -12,15 +12,15 @@ var BuildTargetDir = MakeAbsolute(Directory("./out/lib")); var ProjectSources = MakeAbsolute(Directory("../Source")); var NuspecFiles = new [] { "Plugin.BLE.nuspec", "MvvmCross.Plugin.BLE.nuspec" }; -string GetProjectDir(string projectName) +string GetProjectPath(string pathPrefix, string projectName) { - return ProjectSources.Combine(projectName).CombineWithFilePath(projectName + ".csproj").FullPath; + return ProjectSources.Combine(pathPrefix).Combine(projectName).CombineWithFilePath(projectName + ".csproj").FullPath; } -void BuildProject(string projectName, string targetSubDir) +void BuildProject(string pathPrefix, string projectName, string targetSubDir) { Information("Building {0} ...", projectName); - var project = GetProjectDir(projectName); + var project = GetProjectPath(pathPrefix, projectName); var outputDir = BuildTargetDir.Combine(targetSubDir); MSBuild(project, settings => settings .SetConfiguration("Release") @@ -59,30 +59,43 @@ Task("Restore") } }); -Task("Build") - .IsDependentOn("Clean") - .IsDependentOn("Restore") +Task("BuildLibs") .Does(() => { - BuildProject("Plugin.BLE.Abstractions", "netstandard2.0"); - BuildProject("Plugin.BLE", "netstandard2.0"); - BuildProject("Plugin.BLE.Android", "android"); - BuildProject("Plugin.BLE.iOS", "ios"); - BuildProject("Plugin.BLE.macOS", "macOS"); - - BuildProject("MvvmCross.Plugins.BLE", Path.Combine("mvx","netstandard2.0")); - BuildProject("MvvmCross.Plugins.BLE.Droid", Path.Combine("mvx", "android")); - BuildProject("MvvmCross.Plugins.BLE.iOS", Path.Combine("mvx","ios")); - BuildProject("MvvmCross.Plugins.BLE.macOS", Path.Combine("mvx","macOS")); + BuildProject(".", "Plugin.BLE.Abstractions", "netstandard2.0"); + BuildProject(".", "Plugin.BLE", "netstandard2.0"); + BuildProject(".", "Plugin.BLE.Android", "android"); + BuildProject(".", "Plugin.BLE.iOS", "ios"); + BuildProject(".", "Plugin.BLE.macOS", "macOS"); + + BuildProject(".", "MvvmCross.Plugins.BLE", Path.Combine("mvx","netstandard2.0")); + BuildProject(".", "MvvmCross.Plugins.BLE.Droid", Path.Combine("mvx", "android")); + BuildProject(".", "MvvmCross.Plugins.BLE.iOS", Path.Combine("mvx","ios")); + BuildProject(".", "MvvmCross.Plugins.BLE.macOS", Path.Combine("mvx","macOS")); }); +Task("BuildClients") + .Does(() => +{ + BuildProject("BLE.Client", "BLE.Client", Path.Combine("clients", "netstandard2.0")); + BuildProject("BLE.Client", "BLE.Client.Droid", Path.Combine("clients", "android")); + BuildProject("BLE.Client", "BLE.Client.iOS", Path.Combine("clients", "ios")); + BuildProject("BLE.Client", "BLE.Client.macOS", Path.Combine("clients", "macOS")); +}); + +Task("Build") + .IsDependentOn("Clean") + .IsDependentOn("Restore") + .IsDependentOn("BuildLibs") + .Does(() => {}); + Task("Clean").Does (() => { if (DirectoryExists (BuildTargetDir)) DeleteDirectory (BuildTargetDir, new DeleteDirectorySettings {Recursive = true}); - CleanDirectories ("./**/bin"); - CleanDirectories ("./**/obj"); + CleanDirectories ("../**/bin"); + CleanDirectories ("../**/obj"); }); // ./build.ps1 -Target UpdateVersion -newVersion="2.0.1" From 6897ffd52b651f2a5ccba10fd7e61ff71bf41293 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 20 Apr 2021 10:56:35 +0200 Subject: [PATCH 136/527] extend the GitHub Actions build * split up the 'Build' step into three separate steps ('Clean', 'Restore' and 'BuildLibs') * add a new step ('BuildClients') --- .github/workflows/dotnet.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 003a3e82..5cb8928f 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -20,10 +20,26 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.x - - name: Build + - name: Clean uses: cake-build/cake-action@v1 with: script-path: .build/build.cake + target: Clean + - name: Restore + uses: cake-build/cake-action@v1 + with: + script-path: .build/build.cake + target: Restore + - name: Build Libs + uses: cake-build/cake-action@v1 + with: + script-path: .build/build.cake + target: BuildLibs + - name: Build Clients + uses: cake-build/cake-action@v1 + with: + script-path: .build/build.cake + target: BuildClients - name: Generate nuget package (Vanilla) run: nuget pack .build/Plugin.BLE.nuspec -Version $(git describe) - name: Generate nuget package (MvvmCross) From 880bd96c034de516cd9f927172503aa597184883 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 20 Apr 2021 20:05:50 +0200 Subject: [PATCH 137/527] GitHub Actions: build on Windows instead of MacOS --- .github/workflows/dotnet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 5cb8928f..f6fd63a7 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -10,7 +10,7 @@ on: jobs: build: - runs-on: macos-latest + runs-on: windows-latest steps: - uses: actions/checkout@v2 with: From f916758de21ee316b7ef4c16b097fb99de9632e2 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 22 Apr 2021 20:29:57 +0200 Subject: [PATCH 138/527] Release 2.1.2 - update version via: cake .build/build.cake --target=UpdateVersion --newVersion=2.1.2 - amend changelog.md - amend releaseNotes in nuspec files --- .build/MvvmCross.Plugin.BLE.nuspec | 18 ++++++++--- .build/Plugin.BLE.nuspec | 10 +++++- .../Properties/AssemblyInfo.cs | 4 +-- .../Properties/AssemblyInfo.cs | 4 +-- .../Properties/AssemblyInfo.cs | 4 +-- .../Properties/AssemblyInfo.cs | 4 +-- .../Properties/AssemblyInfo.cs | 4 +-- doc/changelog.md | 31 ++++++++++++------- 8 files changed, 52 insertions(+), 27 deletions(-) diff --git a/.build/MvvmCross.Plugin.BLE.nuspec b/.build/MvvmCross.Plugin.BLE.nuspec index 7c04794a..da0d59cd 100644 --- a/.build/MvvmCross.Plugin.BLE.nuspec +++ b/.build/MvvmCross.Plugin.BLE.nuspec @@ -1,7 +1,7 @@ MvvmCross.Plugin.BLE - 2.1.1 + 2.1.2 Bluetooth LE Plugin for MvvmCross Adrian Seceleanu, Sven-Michael Stübe Adrian Seceleanu, Sven-Michael Stübe @@ -16,6 +16,14 @@ https://raw.githubusercontent.com/xabre/xamarin-bluetooth-le/master/icon_small.png icon_small.png + [2.1.2] + - Correctly close a gatt when a connection attempt is cancelled (fixes #484) + - Use NSBluetoothAlwaysUsageDescription in iOS and macOS samples (fixes #455, #498) + - Android: enable BT5 advertising extensions (fixes #495) + - Fixed cake build and updated build instructions (fixes #492) + - Added locking to DeviceBase.KnownServices (fixes #406) + - Updated Mac project to output the same filename as the other platforms (fixes #430, #491) + - Added iOS/Mac support for 32-bit and 16-bit Service UUIDs (fixes #445) [2.1.1] - iOS #373, #377 Fixed trace ouptut that caused NRE. [2.1.0] @@ -58,19 +66,19 @@ Should prevent crashes like: #320 - + - + - + - + diff --git a/.build/Plugin.BLE.nuspec b/.build/Plugin.BLE.nuspec index d9a06830..fb32b2b7 100644 --- a/.build/Plugin.BLE.nuspec +++ b/.build/Plugin.BLE.nuspec @@ -1,7 +1,7 @@ Plugin.BLE - 2.1.1 + 2.1.2 Bluetooth LE Plugin for Xamarin Adrian Seceleanu, Sven-Michael Stübe Adrian Seceleanu, Sven-Michael Stübe @@ -16,6 +16,14 @@ https://raw.githubusercontent.com/xabre/xamarin-bluetooth-le/master/icon_small.png icon_small.png + [2.1.2] + - Correctly close a gatt when a connection attempt is cancelled (fixes #484) + - Use NSBluetoothAlwaysUsageDescription in iOS and macOS samples (fixes #455, #498) + - Android: enable BT5 advertising extensions (fixes #495) + - Fixed cake build and updated build instructions (fixes #492) + - Added locking to DeviceBase.KnownServices (fixes #406) + - Updated Mac project to output the same filename as the other platforms (fixes #430, #491) + - Added iOS/Mac support for 32-bit and 16-bit Service UUIDs (fixes #445) [2.1.1] - iOS #373, #377 Fixed trace ouptut that caused NRE. [2.1.0] diff --git a/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs index 7ed18461..745e370f 100644 --- a/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/MvxPluginNugetTest.Android/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.1")] -[assembly: AssemblyVersion("2.1.1")] +// [assembly: AssemblyVersion("2.1.2")] +[assembly: AssemblyVersion("2.1.2")] [assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs index 0f34eeea..4b4d6da9 100644 --- a/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/MvxPluginNugetTest.iOS/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.1")] -[assembly: AssemblyVersion("2.1.1")] +// [assembly: AssemblyVersion("2.1.2")] +[assembly: AssemblyVersion("2.1.2")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs index 24f3d3e1..ebace151 100644 --- a/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest.Android/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.1")] -[assembly: AssemblyVersion("2.1.1")] +// [assembly: AssemblyVersion("2.1.2")] +[assembly: AssemblyVersion("2.1.2")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs index b17adc06..14f02efe 100644 --- a/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest.iOS/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.1")] -[assembly: AssemblyVersion("2.1.1")] +// [assembly: AssemblyVersion("2.1.2")] +[assembly: AssemblyVersion("2.1.2")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs b/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs index fc8d0768..67c84377 100644 --- a/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs +++ b/.build/PluginNugetTest/PluginNugetTest/Properties/AssemblyInfo.cs @@ -25,6 +25,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("2.1.1")] -[assembly: AssemblyVersion("2.1.1")] +// [assembly: AssemblyVersion("2.1.2")] +[assembly: AssemblyVersion("2.1.2")] [assembly: AssemblyFileVersion("2.0.0")] diff --git a/doc/changelog.md b/doc/changelog.md index c9106c8d..0ed76523 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,9 +1,18 @@ # Changelog - -## 2.1.0 MacOS + +## 2.1 MacOS + +### 2.1.2 +- Correctly close a gatt when a connection attempt is cancelled (fixes #484) +- Use NSBluetoothAlwaysUsageDescription in iOS and macOS samples (fixes #455, #498) +- Android: enable BT5 advertising extensions (fixes #495) +- Fixed cake build and updated build instructions (fixes #492) +- Added locking to DeviceBase.KnownServices (fixes #406) +- Updated Mac project to output the same filename as the other platforms (fixes #430, #491) +- Added iOS/Mac support for 32-bit and 16-bit Service UUIDs (fixes #445) ### 2.1.1 Service Release for 2.1.0 -- [iOS] #373, #377 Fixed trace ouptut that caused NRE. +- [iOS] #373, #377 Fixed trace ouptut that caused NRE. ### 2.1.0 Stable Release MacOS - Use IReadOnlyLists for Services/Charactersitics/Descriptors and concurrent collections for DiscoveredDevices/ConnectedDevices @@ -12,7 +21,7 @@ Should prevent crashes like: #320 #### 2.1.0-pre.1 - #54 macOS support -## 2.0.0 .NETStanard +## 2.0 .NETStanard #### 2.0.1 - Fix #367 @@ -28,7 +37,7 @@ Should prevent crashes like: #320 ## 1.3.0 - Stable release including all the 1.3.0-beta.x previous releases. -- Merge pull request #229 and #224 which fixed #227 set descriptor for android characteristic stop notify. +- Merge pull request #229 and #224 which fixed #227 set descriptor for android characteristic stop notify. #### 1.3.0-beta.2 - Merge pull request #200. Possibility to change ConnectionPriority/ ConnectionInterval for Android @@ -53,7 +62,7 @@ Should prevent crashes like: #320 - Merge PR #148 Added a boolean (forceBleTransport) to force the use of 'transport' parameter to BLE in connectGatt() method in Android - Breaking changes: ConnectDeviceAsync optional parameters are now encapsulated in a ConnectParameter class -## 1.2.0 +## 1.2.0 - #150 iOS: No disconnect when the connect CancelationToken is cancelled after a successful connect. #### 1.2.0-beta4 - #122 Android: Introduced a extra connectivity state to distinguish system connected device from app connected devices. System connected devices can't be used by the app because we have no gatt instance so we should allow to connect them via the adapter even though the ProfileState is -Connected- @@ -67,21 +76,21 @@ Should prevent crashes like: #320 ## 1.1.0 -#### 1.1.0-beta5 +#### 1.1.0-beta5 - #97 Fixe iOS GetSystemConnectedDevices implementation. FYI method is now called GetSystemConnectedOrPairedDevices -- #98 and #96 Merged GetSystemConnectedDevices and GetSystemPairedDevice into single method. iOS has no equivalent method for this so it makes more sense like this. +- #98 and #96 Merged GetSystemConnectedDevices and GetSystemPairedDevice into single method. iOS has no equivalent method for this so it makes more sense like this. - #94 iOS: Quickfix, change to GetDescriptorsAsync in order to wait for callback #### 1.1.0-beta4 - #94 Android: Quickfix for descriptor read async, callback not invoked -#### 1.1.0-beta3 +#### 1.1.0-beta3 - #82 Enable setting PeripheralScanningOptions for ScanForPeripherals on iOS - #93 Fixed iOS crash when ble is off and ConnectingToKnownDeviceAsync. Wait for state & proper use of cancellation token. - #94 Implementation of descriptor Write/Read for iOS and Android. - #95 Async for start/stop notifications so that the descriptor write callback is invoked -#### 1.1.0-beta2 +#### 1.1.0-beta2 - #78 BluetoothStateChangedArgs contain the old state and the new state - #81 iOS: Removed code smell which caused crash. Temporarily removed UpdateName subscription. - Android <=4.4: fixed gatt callback to correctly detect gatt error when connecting to known device and not in range @@ -98,7 +107,7 @@ With this release we deliver a streamlined async API, additional functionality, #### 1.0.0-beta5 - added indicate support for notifications - + #### 1.0.0-beta4 - fixed #47, clear cached services on disconnect - IDevice is IDisposable now and disconnects the device on disposal From 9ea913e295e19a4163dad8c199db887fcbc3a565 Mon Sep 17 00:00:00 2001 From: Tobias Karlsson Date: Wed, 9 Jun 2021 10:37:05 +0200 Subject: [PATCH 139/527] Only do gatt close if autoConnect is disabled --- Source/Plugin.BLE.Android/Adapter.cs | 11 +++++++++++ Source/Plugin.BLE.Android/GattCallback.cs | 7 +++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE.Android/Adapter.cs b/Source/Plugin.BLE.Android/Adapter.cs index e56a8e58..63202bb1 100644 --- a/Source/Plugin.BLE.Android/Adapter.cs +++ b/Source/Plugin.BLE.Android/Adapter.cs @@ -19,6 +19,7 @@ namespace Plugin.BLE.Android { public class Adapter : AdapterBase { + private ConnectParameters connectParameters; private readonly BluetoothManager _bluetoothManager; private readonly BluetoothAdapter _bluetoothAdapter; private readonly Api18BleScanCallback _api18ScanCallback; @@ -138,6 +139,7 @@ protected override void StopScanNative() protected override Task ConnectToDeviceNativeAsync(IDevice device, ConnectParameters connectParameters, CancellationToken cancellationToken) { + this.connectParameters = connectParameters; ((Device)device).Connect(connectParameters, cancellationToken); return Task.CompletedTask; } @@ -155,6 +157,7 @@ protected override void DisconnectDeviceNative(IDevice device) var device = new Device(this, nativeDevice, null, 0, new byte[] { }); + this.connectParameters = connectParameters; await ConnectToDeviceAsync(device, connectParameters, cancellationToken); return device; } @@ -187,6 +190,14 @@ public int GetHashCode(BluetoothDevice obj) } } + public ConnectParameters GetConnectParameters + { + get + { + return connectParameters; + } + } + public class Api18BleScanCallback : Object, BluetoothAdapter.ILeScanCallback { diff --git a/Source/Plugin.BLE.Android/GattCallback.cs b/Source/Plugin.BLE.Android/GattCallback.cs index 41ba8d12..5956b8b7 100644 --- a/Source/Plugin.BLE.Android/GattCallback.cs +++ b/Source/Plugin.BLE.Android/GattCallback.cs @@ -57,8 +57,11 @@ public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus stat // disconnected case ProfileState.Disconnected: - // Close GATT regardless, else we can accumulate zombie gatts. - CloseGattInstances(gatt); + // Close GATT if autoConnect is disabled, else we can accumulate zombie gatts. + if (!_adapter.GetConnectParameters.AutoConnect) + { + CloseGattInstances(gatt); + } // If status == 19, then connection was closed by the peripheral device (clean disconnect), consider this as a DeviceDisconnected if (_device.IsOperationRequested || (int)status == 19) From 435c45e2260e917afa618f35ccf54ad9f88fc99c Mon Sep 17 00:00:00 2001 From: Tobias Karlsson Date: Wed, 9 Jun 2021 11:29:51 +0200 Subject: [PATCH 140/527] Moved saved connectParameter to Device Enables multiple devices with different parameters --- Source/Plugin.BLE.Android/Adapter.cs | 11 ----------- Source/Plugin.BLE.Android/Device.cs | 14 ++++++++++++++ Source/Plugin.BLE.Android/GattCallback.cs | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/Source/Plugin.BLE.Android/Adapter.cs b/Source/Plugin.BLE.Android/Adapter.cs index 63202bb1..e56a8e58 100644 --- a/Source/Plugin.BLE.Android/Adapter.cs +++ b/Source/Plugin.BLE.Android/Adapter.cs @@ -19,7 +19,6 @@ namespace Plugin.BLE.Android { public class Adapter : AdapterBase { - private ConnectParameters connectParameters; private readonly BluetoothManager _bluetoothManager; private readonly BluetoothAdapter _bluetoothAdapter; private readonly Api18BleScanCallback _api18ScanCallback; @@ -139,7 +138,6 @@ protected override void StopScanNative() protected override Task ConnectToDeviceNativeAsync(IDevice device, ConnectParameters connectParameters, CancellationToken cancellationToken) { - this.connectParameters = connectParameters; ((Device)device).Connect(connectParameters, cancellationToken); return Task.CompletedTask; } @@ -157,7 +155,6 @@ protected override void DisconnectDeviceNative(IDevice device) var device = new Device(this, nativeDevice, null, 0, new byte[] { }); - this.connectParameters = connectParameters; await ConnectToDeviceAsync(device, connectParameters, cancellationToken); return device; } @@ -190,14 +187,6 @@ public int GetHashCode(BluetoothDevice obj) } } - public ConnectParameters GetConnectParameters - { - get - { - return connectParameters; - } - } - public class Api18BleScanCallback : Object, BluetoothAdapter.ILeScanCallback { diff --git a/Source/Plugin.BLE.Android/Device.cs b/Source/Plugin.BLE.Android/Device.cs index 9309c0dd..cfd9f718 100644 --- a/Source/Plugin.BLE.Android/Device.cs +++ b/Source/Plugin.BLE.Android/Device.cs @@ -38,6 +38,11 @@ public class Device : DeviceBase /// private CancellationTokenRegistration _connectCancellationTokenRegistration; + /// + /// the connect paramaters used when connecting to this device + /// + private ConnectParameters connectParameters; + public Device(Adapter adapter, BluetoothDevice nativeDevice, BluetoothGatt gatt, int rssi, byte[] advertisementData = null) : base(adapter) { Update(nativeDevice, gatt); @@ -88,6 +93,7 @@ protected override async Task> GetServicesNativeAsync() public void Connect(ConnectParameters connectParameters, CancellationToken cancellationToken) { IsOperationRequested = true; + this.connectParameters = connectParameters; if (connectParameters.ForceBleTransport) { @@ -171,6 +177,14 @@ public void CloseGatt() ClearServices(); } + public ConnectParameters GetConnectParameters + { + get + { + return connectParameters; + } + } + protected override DeviceState GetState() { var manager = (BluetoothManager)Application.Context.GetSystemService(Context.BluetoothService); diff --git a/Source/Plugin.BLE.Android/GattCallback.cs b/Source/Plugin.BLE.Android/GattCallback.cs index 5956b8b7..6acddd07 100644 --- a/Source/Plugin.BLE.Android/GattCallback.cs +++ b/Source/Plugin.BLE.Android/GattCallback.cs @@ -58,7 +58,7 @@ public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus stat case ProfileState.Disconnected: // Close GATT if autoConnect is disabled, else we can accumulate zombie gatts. - if (!_adapter.GetConnectParameters.AutoConnect) + if (!_device.GetConnectParameters.AutoConnect) { CloseGattInstances(gatt); } From 9ec8adaca6320e330df02d9b58e3d6a8e3872be2 Mon Sep 17 00:00:00 2001 From: Frank Folsche Date: Mon, 19 Jul 2021 10:41:39 +0200 Subject: [PATCH 141/527] Updated logger to support MVVMCross 8 --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 8 +++---- Source/BLE.Client/BLE.Client.Droid/Setup.cs | 13 ++++++++++++ .../BLE.Client.iOS/BLE.Client.iOS.csproj | 4 ++-- Source/BLE.Client/BLE.Client.iOS/Setup.cs | 21 ++++++++++++++----- .../BLE.Client.macOS/BLE.Client.macOS.csproj | 6 +++--- .../BLE.Client/BLE.Client/BLE.Client.csproj | 4 ++-- .../BLE.Client/ViewModels/BaseViewModel.cs | 9 ++++---- .../MvvmCross.Plugins.BLE.Droid.csproj | 5 ++++- Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs | 9 +++++--- .../MvvmCross.Plugins.BLE.iOS.csproj | 5 ++++- Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs | 8 +++++-- .../MvvmCross.Plugins.BLE.macOS.csproj | 2 +- Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs | 8 +++++-- .../MvvmCross.Plugins.BLE.csproj | 2 +- 14 files changed, 73 insertions(+), 31 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index 5edaf22f..3e6dc06c 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -1,4 +1,4 @@ - + Debug @@ -115,10 +115,10 @@ 7.1.0.483 - 7.1.2 + 8.0.1 - 7.1.2 + 8.0.1 6.0.1 @@ -130,7 +130,7 @@ 5.0.0.2012 - 1.2.2.1 + 1.2.4 1.0.0.7 diff --git a/Source/BLE.Client/BLE.Client.Droid/Setup.cs b/Source/BLE.Client/BLE.Client.Droid/Setup.cs index 59c37ca1..33065562 100644 --- a/Source/BLE.Client/BLE.Client.Droid/Setup.cs +++ b/Source/BLE.Client/BLE.Client.Droid/Setup.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Reflection; using Acr.UserDialogs; +using Microsoft.Extensions.Logging; using MvvmCross; using MvvmCross.Forms.Platforms.Android.Core; using MvvmCross.IoC; @@ -17,6 +18,18 @@ public override IEnumerable GetViewAssemblies() return new List(base.GetViewAssemblies().Union(new[] { typeof(BleMvxFormsApp).GetTypeInfo().Assembly })); } + /// + protected override ILoggerProvider CreateLogProvider() + { + return null; + } + + /// + protected override ILoggerFactory CreateLogFactory() + { + return null; + } + protected override IMvxIoCProvider InitializeIoC() { var result = base.InitializeIoC(); diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index 179e69ea..0412cc49 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -188,10 +188,10 @@ 7.1.0.483 - 7.1.2 + 8.0.1 - 7.1.2 + 8.0.1 6.0.1 diff --git a/Source/BLE.Client/BLE.Client.iOS/Setup.cs b/Source/BLE.Client/BLE.Client.iOS/Setup.cs index 57a13e80..fe7a6a41 100644 --- a/Source/BLE.Client/BLE.Client.iOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.iOS/Setup.cs @@ -1,4 +1,5 @@ using Acr.UserDialogs; +using Microsoft.Extensions.Logging; using MvvmCross; using MvvmCross.Forms.Platforms.Ios.Core; using MvvmCross.IoC; @@ -10,11 +11,6 @@ namespace BLE.Client.iOS { public class Setup : MvxFormsIosSetup { - protected override IMvxApplication CreateApp() - { - return new BleMvxApplication(); - } - protected override IMvxIoCProvider InitializeIoC() { var result = base.InitializeIoC(); @@ -31,6 +27,21 @@ protected override Xamarin.Forms.Application CreateFormsApplication() return new BleMvxFormsApp(); } + protected override IMvxApplication CreateApp(IMvxIoCProvider iocProvider) + { + return new BleMvxApplication(); + } + + protected override ILoggerProvider CreateLogProvider() + { + return null; + } + + protected override ILoggerFactory CreateLogFactory() + { + return null; + } + /* public override IEnumerable GetPluginAssemblies() { diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index 87352cdb..6359d7b0 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -98,10 +98,10 @@ 7.1.0.483 - 7.1.2 + 8.0.1 - 7.1.2 + 8.0.1 6.0.1 @@ -129,4 +129,4 @@ - + \ No newline at end of file diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 942d7ed3..0083850c 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/Source/BLE.Client/BLE.Client/ViewModels/BaseViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/BaseViewModel.cs index 2ab29512..7b76377f 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/BaseViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/BaseViewModel.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; using MvvmCross; using MvvmCross.Logging; using MvvmCross.ViewModels; @@ -17,22 +18,22 @@ public class BaseViewModel : MvxViewModel protected const string CharacteristicIdKey = "CharacteristicIdNavigationKey"; protected const string DescriptorIdKey = "DescriptorIdNavigationKey"; - private readonly IMvxLog _log; + private readonly ILogger _log; public BaseViewModel(IAdapter adapter) { Adapter = adapter; - _log = Mvx.IoCProvider.Resolve(); + _log = Mvx.IoCProvider.Resolve>(); } public override void ViewAppeared() { - _log.Trace("ViewAppeared {0}", GetType().Name); + _log.LogTrace("ViewAppeared {0}", GetType().Name); } public override void ViewDisappeared() { - _log.Trace("ViewDisappeared {0}", GetType().Name); + _log.LogTrace("ViewDisappeared {0}", GetType().Name); } public override void Prepare(MvxBundle parameters) diff --git a/Source/MvvmCross.Plugins.BLE.Droid/MvvmCross.Plugins.BLE.Droid.csproj b/Source/MvvmCross.Plugins.BLE.Droid/MvvmCross.Plugins.BLE.Droid.csproj index dd0df23e..de4582f3 100644 --- a/Source/MvvmCross.Plugins.BLE.Droid/MvvmCross.Plugins.BLE.Droid.csproj +++ b/Source/MvvmCross.Plugins.BLE.Droid/MvvmCross.Plugins.BLE.Droid.csproj @@ -69,8 +69,11 @@ + + 5.0.0 + - 7.1.2 + 8.0.1 diff --git a/Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs b/Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs index 3cea5490..61bdd6bb 100644 --- a/Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs +++ b/Source/MvvmCross.Plugins.BLE.Droid/Plugin.cs @@ -1,5 +1,5 @@ +using Microsoft.Extensions.Logging; using MvvmCross.IoC; -using MvvmCross.Logging; using MvvmCross.Plugin; using Plugin.BLE; using Plugin.BLE.Abstractions; @@ -13,8 +13,11 @@ public class Plugin { public Plugin() { - var log = Mvx.IoCProvider.Resolve(); - Trace.TraceImplementation = log.Trace; + ILogger log; + if (Mvx.IoCProvider.TryResolve(out log)) + { + Trace.TraceImplementation = log.LogTrace; + } } public void Load() { diff --git a/Source/MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj b/Source/MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj index 70a2a7b3..d46b5bff 100644 --- a/Source/MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj +++ b/Source/MvvmCross.Plugins.BLE.iOS/MvvmCross.Plugins.BLE.iOS.csproj @@ -61,8 +61,11 @@ + + 5.0.0 + - 7.1.2 + 8.0.1 diff --git a/Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs b/Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs index 122aed91..decc7f74 100644 --- a/Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs +++ b/Source/MvvmCross.Plugins.BLE.iOS/Plugin.cs @@ -1,4 +1,5 @@ using Foundation; +using Microsoft.Extensions.Logging; using MvvmCross.IoC; using MvvmCross.Logging; using MvvmCross.Plugin; @@ -18,8 +19,11 @@ public class Plugin public Plugin() { - var log = Mvx.IoCProvider.Resolve(); - Trace.TraceImplementation = log.Trace; + ILogger log; + if (Mvx.IoCProvider.TryResolve(out log)) + { + Trace.TraceImplementation = log.LogTrace; + } } public void Load() diff --git a/Source/MvvmCross.Plugins.BLE.macOS/MvvmCross.Plugins.BLE.macOS.csproj b/Source/MvvmCross.Plugins.BLE.macOS/MvvmCross.Plugins.BLE.macOS.csproj index e66fc932..42cf151f 100644 --- a/Source/MvvmCross.Plugins.BLE.macOS/MvvmCross.Plugins.BLE.macOS.csproj +++ b/Source/MvvmCross.Plugins.BLE.macOS/MvvmCross.Plugins.BLE.macOS.csproj @@ -77,7 +77,7 @@ - 7.1.2 + 8.0.1 diff --git a/Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs b/Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs index 3570a00b..4300509b 100644 --- a/Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs +++ b/Source/MvvmCross.Plugins.BLE.macOS/Plugin.cs @@ -1,4 +1,5 @@ using Foundation; +using Microsoft.Extensions.Logging; using MvvmCross.IoC; using MvvmCross.Logging; using MvvmCross.Plugin; @@ -18,8 +19,11 @@ public class Plugin public Plugin() { - var log = Mvx.IoCProvider.Resolve(); - Trace.TraceImplementation = log.Trace; + ILogger log; + if (Mvx.IoCProvider.TryResolve(out log)) + { + Trace.TraceImplementation = log.LogTrace; + } } public void Load() diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index 4f5f50c4..ffc8c8d0 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -3,7 +3,7 @@ netstandard2.0 - + From 22df095dd98f900a490ba317818b4cf08e3a135d Mon Sep 17 00:00:00 2001 From: Felix Krischak Date: Mon, 6 Sep 2021 16:30:21 +0200 Subject: [PATCH 142/527] Adds GetKnownDevicesByIds to get paired devices without the need of connecting to them --- Source/Plugin.BLE.Abstractions/AdapterBase.cs | 1 + .../Plugin.BLE.Abstractions/Contracts/IAdapter.cs | 8 ++++++++ Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs | 6 ++++++ Source/Plugin.BLE.Android/Adapter.cs | 6 ++++++ Source/Plugin.BLE.iOS/Adapter.cs | 13 +++++++++++++ 5 files changed, 34 insertions(+) diff --git a/Source/Plugin.BLE.Abstractions/AdapterBase.cs b/Source/Plugin.BLE.Abstractions/AdapterBase.cs index bbbabfa0..1ae454b8 100644 --- a/Source/Plugin.BLE.Abstractions/AdapterBase.cs +++ b/Source/Plugin.BLE.Abstractions/AdapterBase.cs @@ -239,5 +239,6 @@ public void HandleConnectionFail(IDevice device, string errorMessage) public abstract Task ConnectToKnownDeviceAsync(Guid deviceGuid, ConnectParameters connectParameters = default, CancellationToken cancellationToken = default); public abstract IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null); + public abstract IReadOnlyList GetKnownDevicesByIds(Guid[] ids); } } diff --git a/Source/Plugin.BLE.Abstractions/Contracts/IAdapter.cs b/Source/Plugin.BLE.Abstractions/Contracts/IAdapter.cs index c98cfc74..a055b0b8 100644 --- a/Source/Plugin.BLE.Abstractions/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE.Abstractions/Contracts/IAdapter.cs @@ -126,5 +126,13 @@ public interface IAdapter /// IMPORTANT: Only considered by iOS due to platform limitations. Filters devices by advertised services. SET THIS VALUE FOR ANY RESULTS /// List of IDevices connected to the OS. In case of no devices the list is empty. IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] services = null); + + /// + /// Returns a list of paired BLE devices for the given UUIDs. + /// + /// When ids is null + /// The list of UUIDs + /// The known device. Empty list if no device known. + IReadOnlyList GetKnownDevicesByIds(Guid[] ids); } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs b/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs index a6a90a0c..02f67e1e 100644 --- a/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs +++ b/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs @@ -46,5 +46,11 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] TraceUnavailability(); return new List(); } + + public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) + { + TraceUnavailability(); + return new List(); + } } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Android/Adapter.cs b/Source/Plugin.BLE.Android/Adapter.cs index e56a8e58..a8972f9f 100644 --- a/Source/Plugin.BLE.Android/Adapter.cs +++ b/Source/Plugin.BLE.Android/Adapter.cs @@ -174,6 +174,12 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] return connectedDevices.Union(bondedDevices, new DeviceComparer()).Select(d => new Device(this, d, null, 0)).Cast().ToList(); } + public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) + { + var devices = GetSystemConnectedOrPairedDevices(); + return devices.Where(item => ids.Contains(item.Id)).ToList(); + } + private class DeviceComparer : IEqualityComparer { public bool Equals(BluetoothDevice x, BluetoothDevice y) diff --git a/Source/Plugin.BLE.iOS/Adapter.cs b/Source/Plugin.BLE.iOS/Adapter.cs index bff5e27a..0f2fa2ef 100644 --- a/Source/Plugin.BLE.iOS/Adapter.cs +++ b/Source/Plugin.BLE.iOS/Adapter.cs @@ -266,6 +266,19 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] return nativeDevices.Select(d => new Device(this, d, _bleCentralManagerDelegate)).Cast().ToList(); } + public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) + { + if (ids == null) + { + throw new ArgumentNullException(nameof(ids)); + } + + var nativeDevices = _centralManager.RetrievePeripheralsWithIdentifiers( + ids.Select(guid => new NSUuid(guid.ToString())).ToArray()); + + return nativeDevices.Select(d => new Device(this, d, _bleCentralManagerDelegate)).Cast().ToList(); + } + private async Task WaitForState(CBCentralManagerState state, CancellationToken cancellationToken, bool configureAwait = false) { Trace.Message("Adapter: Waiting for state: " + state); From f7c9883c4c94377ce9288febba34d972c59d6d62 Mon Sep 17 00:00:00 2001 From: UwpDev Date: Thu, 4 Nov 2021 14:50:39 +0530 Subject: [PATCH 143/527] Added cancellation token support in characteristic start and stop update methods --- .../Plugin.BLE.Abstractions/CharacteristicBase.cs | 10 +++++----- .../Contracts/ICharacteristic.cs | 8 +++++--- Source/Plugin.BLE.Android/Characteristic.cs | 15 ++++++++------- .../Plugin.BLE.Tests/Mocks/CharacteristicMock.cs | 5 +++-- Source/Plugin.BLE.iOS/Characteristic.cs | 11 +++++++---- 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs b/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs index 9018e78d..4824bb9e 100644 --- a/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs +++ b/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs @@ -102,7 +102,7 @@ private CharacteristicWriteType GetWriteType() CharacteristicWriteType.WithoutResponse; } - public Task StartUpdatesAsync() + public Task StartUpdatesAsync(CancellationToken cancellationToken = default) { if (!CanUpdate) { @@ -110,10 +110,10 @@ public Task StartUpdatesAsync() } Trace.Message("Characteristic.StartUpdates"); - return StartUpdatesNativeAsync(); + return StartUpdatesNativeAsync(cancellationToken); } - public Task StopUpdatesAsync() + public Task StopUpdatesAsync(CancellationToken cancellationToken = default) { if (!CanUpdate) { @@ -137,7 +137,7 @@ public async Task GetDescriptorAsync(Guid id, CancellationToken can protected abstract Task> GetDescriptorsNativeAsync(); protected abstract Task ReadNativeAsync(); protected abstract Task WriteNativeAsync(byte[] data, CharacteristicWriteType writeType); - protected abstract Task StartUpdatesNativeAsync(); - protected abstract Task StopUpdatesNativeAsync(); + protected abstract Task StartUpdatesNativeAsync(CancellationToken cancellationToken = default); + protected abstract Task StopUpdatesNativeAsync(CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/Source/Plugin.BLE.Abstractions/Contracts/ICharacteristic.cs b/Source/Plugin.BLE.Abstractions/Contracts/ICharacteristic.cs index 8a0237d9..0dcc9091 100644 --- a/Source/Plugin.BLE.Abstractions/Contracts/ICharacteristic.cs +++ b/Source/Plugin.BLE.Abstractions/Contracts/ICharacteristic.cs @@ -102,15 +102,17 @@ public interface ICharacteristic /// /// Starts listening for notify events on this characteristic. /// + /// /// Thrown if characteristic doesn't support notify. See: /// Thrown if an error occurs while starting notifications - Task StartUpdatesAsync(); + Task StartUpdatesAsync(CancellationToken cancellationToken = default); /// /// Stops listening for notify events on this characteristic. - /// Thrown if an error occurs while starting notifications /// - Task StopUpdatesAsync(); + /// + /// Thrown if an error occurs while starting notifications + Task StopUpdatesAsync(CancellationToken cancellationToken = default); /// /// Gets the descriptors of the characteristic. diff --git a/Source/Plugin.BLE.Android/Characteristic.cs b/Source/Plugin.BLE.Android/Characteristic.cs index cb3cdf85..f406f802 100644 --- a/Source/Plugin.BLE.Android/Characteristic.cs +++ b/Source/Plugin.BLE.Android/Characteristic.cs @@ -10,6 +10,7 @@ using Plugin.BLE.Android.CallbackEventArgs; using Plugin.BLE.Extensions; using Plugin.BLE.Abstractions.Utils; +using System.Threading; namespace Plugin.BLE.Android { @@ -111,7 +112,7 @@ private void InternalWrite(byte[] data) } } - protected override async Task StartUpdatesNativeAsync() + protected override async Task StartUpdatesNativeAsync(CancellationToken cancellationToken = default) { // wire up the characteristic value updating on the gattcallback for event forwarding _gattCallback.CharacteristicValueUpdated -= OnCharacteristicValueChanged; @@ -127,20 +128,20 @@ protected override async Task StartUpdatesNativeAsync() if (_nativeCharacteristic.Descriptors.Count > 0) { - var descriptors = await GetDescriptorsAsync(); + var descriptors = await GetDescriptorsAsync(cancellationToken); var descriptor = descriptors.FirstOrDefault(d => d.Id.Equals(ClientCharacteristicConfigurationDescriptorId)) ?? descriptors.FirstOrDefault(); // fallback just in case manufacturer forgot // has to have one of these (either indicate or notify) if (descriptor != null && Properties.HasFlag(CharacteristicPropertyType.Indicate)) { - await descriptor.WriteAsync(BluetoothGattDescriptor.EnableIndicationValue.ToArray()); + await descriptor.WriteAsync(BluetoothGattDescriptor.EnableIndicationValue.ToArray(), cancellationToken); Trace.Message("Descriptor set value: INDICATE"); } if (descriptor != null && Properties.HasFlag(CharacteristicPropertyType.Notify)) { - await descriptor.WriteAsync(BluetoothGattDescriptor.EnableNotificationValue.ToArray()); + await descriptor.WriteAsync(BluetoothGattDescriptor.EnableNotificationValue.ToArray(), cancellationToken); Trace.Message("Descriptor set value: NOTIFY"); } } @@ -152,7 +153,7 @@ protected override async Task StartUpdatesNativeAsync() Trace.Message("Characteristic.StartUpdates, successful!"); } - protected override async Task StopUpdatesNativeAsync() + protected override async Task StopUpdatesNativeAsync(CancellationToken cancellationToken = default) { _gattCallback.CharacteristicValueUpdated -= OnCharacteristicValueChanged; @@ -165,13 +166,13 @@ protected override async Task StopUpdatesNativeAsync() if (_nativeCharacteristic.Descriptors.Count > 0) { - var descriptors = await GetDescriptorsAsync(); + var descriptors = await GetDescriptorsAsync(cancellationToken); var descriptor = descriptors.FirstOrDefault(d => d.Id.Equals(ClientCharacteristicConfigurationDescriptorId)) ?? descriptors.FirstOrDefault(); // fallback just in case manufacturer forgot if (Properties.HasFlag(CharacteristicPropertyType.Notify) || Properties.HasFlag(CharacteristicPropertyType.Indicate)) { - await descriptor.WriteAsync(BluetoothGattDescriptor.DisableNotificationValue.ToArray()); + await descriptor.WriteAsync(BluetoothGattDescriptor.DisableNotificationValue.ToArray(), cancellationToken); Trace.Message("Descriptor set value: DISABLE_NOTIFY"); } } diff --git a/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs b/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs index ccb6eff2..beb45bb7 100644 --- a/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs +++ b/Source/Plugin.BLE.Tests/Mocks/CharacteristicMock.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; @@ -53,12 +54,12 @@ protected override Task WriteNativeAsync(byte[] data, CharacteristicWriteT return Task.FromResult(true); } - protected override Task StartUpdatesNativeAsync() + protected override Task StartUpdatesNativeAsync(CancellationToken cancellationToken = default) { throw new NotImplementedException(); } - protected override Task StopUpdatesNativeAsync() + protected override Task StopUpdatesNativeAsync(CancellationToken cancellationToken = default) { throw new NotImplementedException(); } diff --git a/Source/Plugin.BLE.iOS/Characteristic.cs b/Source/Plugin.BLE.iOS/Characteristic.cs index 431199d7..771335ec 100644 --- a/Source/Plugin.BLE.iOS/Characteristic.cs +++ b/Source/Plugin.BLE.iOS/Characteristic.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using CoreBluetooth; using Foundation; @@ -165,7 +166,7 @@ protected override Task WriteNativeAsync(byte[] data, CharacteristicWriteT return task; } - protected override Task StartUpdatesNativeAsync() + protected override Task StartUpdatesNativeAsync(CancellationToken cancellationToken = default) { var exception = new Exception($"Device {Service.Device.Id} disconnected while starting updates for characteristic with {Id}."); @@ -204,10 +205,11 @@ protected override Task StartUpdatesNativeAsync() reject(new Exception($"Device {Service.Device.Id} disconnected while starting updates for characteristic with {Id}.")); }), subscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral += handler, - unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler); + unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler, + token: cancellationToken); } - protected override Task StopUpdatesNativeAsync() + protected override Task StopUpdatesNativeAsync(CancellationToken cancellationToken = default) { var exception = new Exception($"Device {Service.Device.Id} disconnected while stopping updates for characteristic with {Id}."); @@ -244,7 +246,8 @@ protected override Task StopUpdatesNativeAsync() reject(exception); }), subscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral += handler, - unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler); + unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler, + token: cancellationToken); } private void UpdatedNotify(object sender, CBCharacteristicEventArgs e) From bf4cc1ac6bfca70f0e7cdb29a637f4e3588d77e0 Mon Sep 17 00:00:00 2001 From: Gerald Madlmayr Date: Fri, 10 Dec 2021 21:52:08 +0100 Subject: [PATCH 144/527] Adding unacknowledge writes to iOS (#473) --- Source/Plugin.BLE.iOS/Characteristic.cs | 29 ++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE.iOS/Characteristic.cs b/Source/Plugin.BLE.iOS/Characteristic.cs index 431199d7..d20cea85 100644 --- a/Source/Plugin.BLE.iOS/Characteristic.cs +++ b/Source/Plugin.BLE.iOS/Characteristic.cs @@ -154,9 +154,36 @@ protected override Task WriteNativeAsync(byte[] data, CharacteristicWriteT subscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral += handler, unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler); } + + // CBCharacteristicWriteType is an Enum; so else path is alweay WithoutResponse. else { - task = Task.FromResult(true); + if (_parentDevice.CanSendWriteWithoutResponse) + { + task = TaskBuilder.FromEvent>( + execute: () => + { + if (_parentDevice.State != CBPeripheralState.Connected) + throw exception; + }, + getCompleteHandler: (complete, reject) => (sender, args) => + { + complete(true); + }, + subscribeComplete: handler => _parentDevice.IsReadyToSendWriteWithoutResponse += handler, + unsubscribeComplete: handler => _parentDevice.IsReadyToSendWriteWithoutResponse -= handler, + getRejectHandler: reject => ((sender, args) => + { + if (args.Peripheral.Identifier == _parentDevice.Identifier) + reject(exception); + }), + subscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral += handler, + unsubscribeReject: handler => _bleCentralManagerDelegate.DisconnectedPeripheral -= handler); + + } + else { + task = Task.FromResult(true); + } } var nsdata = NSData.FromArray(data); From 230e11483da116a33a6e40e9752aac7b326f4a81 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 17 Mar 2022 22:11:13 +0100 Subject: [PATCH 145/527] update cake package versions --- .build/build.cake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.build/build.cake b/.build/build.cake index 873bf613..d91de195 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -1,5 +1,5 @@ -#addin nuget:?package=Cake.Git&version=1.0.1 -#addin nuget:?package=Cake.FileHelpers&version=4.0.0 +#addin nuget:?package=Cake.Git&version=2.0.0 +#addin nuget:?package=Cake.FileHelpers&version=5.0.0 using Path = System.IO.Path; using System.Xml.Linq; From 2ff2510fd482d27f597722a1c6b200a44be3f5c2 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 17 Mar 2022 22:27:49 +0100 Subject: [PATCH 146/527] cake: update MSBuild tool version to VS2022 --- .build/build.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.build/build.cake b/.build/build.cake index d91de195..c775d0dc 100644 --- a/.build/build.cake +++ b/.build/build.cake @@ -25,7 +25,7 @@ void BuildProject(string pathPrefix, string projectName, string targetSubDir) MSBuild(project, settings => settings .SetConfiguration("Release") .WithTarget("Build") - .UseToolVersion(MSBuildToolVersion.VS2019) + .UseToolVersion(MSBuildToolVersion.VS2022) .SetMSBuildPlatform(MSBuildPlatform.x86) .WithProperty("OutDir", outputDir.FullPath)); } From 3e4f04387091d764d49634b13414638a646efe9e Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 17 Mar 2022 22:47:20 +0100 Subject: [PATCH 147/527] github actions: add msbuild to PATH --- .github/workflows/dotnet.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index f6fd63a7..b29d07be 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -20,6 +20,8 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.x + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 - name: Clean uses: cake-build/cake-action@v1 with: From 0a45d2d1a1414d767771ff19551f7ff3c881fd93 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 17 Mar 2022 23:25:06 +0100 Subject: [PATCH 148/527] Plugin.BLE.Android: update target framework to version 8.1 (API level 27) --- Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj b/Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj index e24325b8..6750a84f 100644 --- a/Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj +++ b/Source/Plugin.BLE.Android/Plugin.BLE.Android.csproj @@ -14,7 +14,7 @@ 512 Resources\Resource.Designer.cs Off - v8.0 + v8.1 From 4cce167473cd8fc69b59c296fd46239b88b3bd9c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 18 Mar 2022 00:03:22 +0100 Subject: [PATCH 149/527] fix nuspec for MvvmCross.Plugin.BLE * Error NU5050: Attempted to pack multiple files into the same location(s) --- .build/MvvmCross.Plugin.BLE.nuspec | 3 --- 1 file changed, 3 deletions(-) diff --git a/.build/MvvmCross.Plugin.BLE.nuspec b/.build/MvvmCross.Plugin.BLE.nuspec index da0d59cd..5394da57 100644 --- a/.build/MvvmCross.Plugin.BLE.nuspec +++ b/.build/MvvmCross.Plugin.BLE.nuspec @@ -92,13 +92,10 @@ Should prevent crashes like: #320 - - - From 5c004c7de4b0cc30a412a70301da269b9b966aab Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Tue, 15 Mar 2022 22:24:54 +0100 Subject: [PATCH 150/527] BLE.Client.Droid: update to Android 11 --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 2 +- .../BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index 5edaf22f..8ee42436 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -15,7 +15,7 @@ Properties\AndroidManifest.xml Resources Assets - v10.0 + v11.0 false diff --git a/Source/BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml b/Source/BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml index 27366450..d6096a7b 100644 --- a/Source/BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml +++ b/Source/BLE.Client/BLE.Client.Droid/Properties/AndroidManifest.xml @@ -1,6 +1,6 @@  - + From 07d67d1507f949e8080285c345d268c14b4a79c2 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 19 Mar 2022 18:42:47 +0100 Subject: [PATCH 151/527] Plugin.BLE.Android.Device: remove read-only GetConnectParameters property * replace by ConnectParameters property * slight code simplification --- Source/Plugin.BLE.Android/Device.cs | 18 +++++------------- Source/Plugin.BLE.Android/GattCallback.cs | 4 ++-- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/Source/Plugin.BLE.Android/Device.cs b/Source/Plugin.BLE.Android/Device.cs index cfd9f718..17447f97 100644 --- a/Source/Plugin.BLE.Android/Device.cs +++ b/Source/Plugin.BLE.Android/Device.cs @@ -41,7 +41,7 @@ public class Device : DeviceBase /// /// the connect paramaters used when connecting to this device /// - private ConnectParameters connectParameters; + public ConnectParameters ConnectParameters { get; private set; } public Device(Adapter adapter, BluetoothDevice nativeDevice, BluetoothGatt gatt, int rssi, byte[] advertisementData = null) : base(adapter) { @@ -93,7 +93,7 @@ protected override async Task> GetServicesNativeAsync() public void Connect(ConnectParameters connectParameters, CancellationToken cancellationToken) { IsOperationRequested = true; - this.connectParameters = connectParameters; + ConnectParameters = connectParameters; if (connectParameters.ForceBleTransport) { @@ -164,7 +164,7 @@ public void Disconnect() } /// - /// CloseGatt is called by the gattCallback in case of user disconnect or a disconnect by signal loss or a connection error. + /// CloseGatt is called by the gattCallback in case of user disconnect or a disconnect by signal loss or a connection error. /// Cleares all cached services. /// public void CloseGatt() @@ -177,14 +177,6 @@ public void CloseGatt() ClearServices(); } - public ConnectParameters GetConnectParameters - { - get - { - return connectParameters; - } - } - protected override DeviceState GetState() { var manager = (BluetoothManager)Application.Context.GetSystemService(Context.BluetoothService); @@ -230,7 +222,7 @@ public static List ParseScanRecord(byte[] scanRecord) while (index < scanRecord.Length) { byte length = scanRecord[index++]; - //Done once we run out of records + //Done once we run out of records // 1 byte for type and length-1 bytes for data if (length == 0) break; @@ -379,4 +371,4 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv } } } -} \ No newline at end of file +} diff --git a/Source/Plugin.BLE.Android/GattCallback.cs b/Source/Plugin.BLE.Android/GattCallback.cs index 6acddd07..18c835a6 100644 --- a/Source/Plugin.BLE.Android/GattCallback.cs +++ b/Source/Plugin.BLE.Android/GattCallback.cs @@ -58,7 +58,7 @@ public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus stat case ProfileState.Disconnected: // Close GATT if autoConnect is disabled, else we can accumulate zombie gatts. - if (!_device.GetConnectParameters.AutoConnect) + if (!_device.ConnectParameters.AutoConnect) { CloseGattInstances(gatt); } @@ -257,4 +257,4 @@ private Exception GetExceptionFromGattStatus(GattStatus status) return exception; } } -} \ No newline at end of file +} From b917bf2e57c415d02b73f3f8f10ed07902d0a079 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 20 Mar 2022 08:51:57 +0100 Subject: [PATCH 152/527] Plugin.BLE.Abstractions.CharacteristicBase: add a missing cancellationToken argument * in the StopUpdatesAsync method --- Source/Plugin.BLE.Abstractions/CharacteristicBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs b/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs index 4824bb9e..827a3118 100644 --- a/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs +++ b/Source/Plugin.BLE.Abstractions/CharacteristicBase.cs @@ -120,7 +120,7 @@ public Task StopUpdatesAsync(CancellationToken cancellationToken = default) throw new InvalidOperationException("Characteristic does not support update."); } - return StopUpdatesNativeAsync(); + return StopUpdatesNativeAsync(cancellationToken); } public async Task> GetDescriptorsAsync(CancellationToken cancellationToken = default) From c98cb60f783160544cb009ecebfcb1f3abe222d3 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 23 Mar 2022 18:24:10 +0100 Subject: [PATCH 153/527] BLE.Client: replace Plugin.Permissions by Xamarin.Essentials.Permissions * this fixes the runtime permission request on Android (issue #573) --- .../BLE.Client.Droid/MainActivity.cs | 19 +++++----- Source/BLE.Client/BLE.Client.Droid/Setup.cs | 2 -- Source/BLE.Client/BLE.Client.iOS/Setup.cs | 2 -- Source/BLE.Client/BLE.Client.macOS/Setup.cs | 35 ------------------- .../BLE.Client/BLE.Client/BLE.Client.csproj | 2 +- .../ViewModels/DeviceListViewModel.cs | 13 +++---- 6 files changed, 17 insertions(+), 56 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/MainActivity.cs b/Source/BLE.Client/BLE.Client.Droid/MainActivity.cs index febcbd4c..bf88c2f0 100644 --- a/Source/BLE.Client/BLE.Client.Droid/MainActivity.cs +++ b/Source/BLE.Client/BLE.Client.Droid/MainActivity.cs @@ -1,20 +1,15 @@ -using System; -using Acr.UserDialogs; -using Android.App; +using Android.App; using Android.Content.PM; -using Android.Runtime; -using Android.Views; -using Android.Widget; using Android.OS; using MvvmCross.Forms.Platforms.Android.Views; +using Xamarin.Essentials; namespace BLE.Client.Droid { [Activity(ScreenOrientation = ScreenOrientation.Portrait ,ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, LaunchMode = LaunchMode.SingleTask)] - public class MainActivity - : MvxFormsAppCompatActivity + public class MainActivity : MvxFormsAppCompatActivity { protected override void OnCreate(Bundle bundle) { @@ -23,6 +18,14 @@ protected override void OnCreate(Bundle bundle) base.OnCreate(bundle); + Platform.Init(this, bundle); + } + + public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults) + { + Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); + + base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } } } \ No newline at end of file diff --git a/Source/BLE.Client/BLE.Client.Droid/Setup.cs b/Source/BLE.Client/BLE.Client.Droid/Setup.cs index 59c37ca1..83d58410 100644 --- a/Source/BLE.Client/BLE.Client.Droid/Setup.cs +++ b/Source/BLE.Client/BLE.Client.Droid/Setup.cs @@ -5,7 +5,6 @@ using MvvmCross; using MvvmCross.Forms.Platforms.Android.Core; using MvvmCross.IoC; -using Plugin.Permissions; using Plugin.Settings; namespace BLE.Client.Droid @@ -23,7 +22,6 @@ protected override IMvxIoCProvider InitializeIoC() Mvx.IoCProvider.RegisterSingleton(() => UserDialogs.Instance); Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); - Mvx.IoCProvider.RegisterSingleton(() => CrossPermissions.Current); return result; } diff --git a/Source/BLE.Client/BLE.Client.iOS/Setup.cs b/Source/BLE.Client/BLE.Client.iOS/Setup.cs index 57a13e80..5f828abb 100644 --- a/Source/BLE.Client/BLE.Client.iOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.iOS/Setup.cs @@ -3,7 +3,6 @@ using MvvmCross.Forms.Platforms.Ios.Core; using MvvmCross.IoC; using MvvmCross.ViewModels; -using Plugin.Permissions; using Plugin.Settings; namespace BLE.Client.iOS @@ -21,7 +20,6 @@ protected override IMvxIoCProvider InitializeIoC() Mvx.IoCProvider.RegisterSingleton(() => UserDialogs.Instance); Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); - Mvx.IoCProvider.RegisterSingleton(() => CrossPermissions.Current); return result; } diff --git a/Source/BLE.Client/BLE.Client.macOS/Setup.cs b/Source/BLE.Client/BLE.Client.macOS/Setup.cs index aa126f9c..adb70304 100644 --- a/Source/BLE.Client/BLE.Client.macOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.macOS/Setup.cs @@ -8,7 +8,6 @@ using MvvmCross; using MvvmCross.Forms.Platforms.Mac.Core; using MvvmCross.IoC; -using Plugin.Permissions.Abstractions; using Plugin.Settings; using Xamarin.Forms; @@ -23,7 +22,6 @@ protected override IMvxIoCProvider InitializeIoC() // Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current); // Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current.Adapter); Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); - Mvx.IoCProvider.RegisterSingleton(() => new PermissionMac()); Mvx.IoCProvider.RegisterSingleton(() => new UserDialogsMac()); return result; @@ -41,39 +39,6 @@ public override IEnumerable GetPluginAssemblies() } */ - private class PermissionMac : IPermissions - { - public Task CheckPermissionStatusAsync(Permission permission) - { - return Task.FromResult(PermissionStatus.Granted); - } - - public Task CheckPermissionStatusAsync() where T : Plugin.Permissions.BasePermission, new() - { - return Task.FromResult(PermissionStatus.Granted); - } - - public bool OpenAppSettings() - { - return true; - } - - public Task> RequestPermissionsAsync(params Permission[] permissions) - { - return Task.FromResult(permissions.ToDictionary(p => p, p => PermissionStatus.Granted)); - } - - public Task RequestPermissionAsync() where T : Plugin.Permissions.BasePermission, new() - { - return Task.FromResult(PermissionStatus.Granted); - } - - public Task ShouldShowRequestPermissionRationaleAsync(Permission permission) - { - return Task.FromResult(true); - } - } - private class UserDialogsMac : IUserDialogs { public IDisposable ActionSheet(ActionSheetConfig config) diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 942d7ed3..823535dc 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -12,9 +12,9 @@ - + diff --git a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs index 78171ab1..5b360742 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs @@ -11,11 +11,11 @@ using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Abstractions.EventArgs; using Plugin.BLE.Abstractions.Extensions; -using Plugin.Permissions.Abstractions; using Plugin.Settings.Abstractions; using MvvmCross.Commands; using MvvmCross.Navigation; using MvvmCross; +using Xamarin.Essentials; using Xamarin.Forms; namespace BLE.Client.ViewModels @@ -85,11 +85,8 @@ public bool UseAutoConnect RaisePropertyChanged(() => IsRefreshing); }, () => _cancellationTokenSource != null); - readonly IPermissions _permissions; - - public DeviceListViewModel(IBluetoothLE bluetoothLe, IAdapter adapter, IUserDialogs userDialogs, ISettings settings, IPermissions permissions) : base(adapter) + public DeviceListViewModel(IBluetoothLE bluetoothLe, IAdapter adapter, IUserDialogs userDialogs, ISettings settings) : base(adapter) { - _permissions = permissions; _bluetoothLe = bluetoothLe; _userDialogs = userDialogs; _settings = settings; @@ -225,15 +222,15 @@ private async void TryStartScanning(bool refresh = false) { if (Xamarin.Forms.Device.RuntimePlatform == Device.Android) { - var status = await _permissions.CheckPermissionStatusAsync(); + var status = await Permissions.CheckStatusAsync(); if (status != PermissionStatus.Granted) { - var permissionResult = await _permissions.RequestPermissionAsync(); + var permissionResult = await Permissions.RequestAsync(); if (permissionResult != PermissionStatus.Granted) { await _userDialogs.AlertAsync("Permission denied. Not scanning."); - _permissions.OpenAppSettings(); + AppInfo.ShowSettingsUI(); return; } } From 82f08b6a63ce8b7aa07e06aaac85061f92eb5407 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 23 Mar 2022 23:23:12 +0100 Subject: [PATCH 154/527] BLE.Client: replace Plugin.Settings by Xamarin.Essentials.Preferences * remove the now unnecessary class BLE.Client.Helpers.Settings * fully remove package Xam.Plugins.Settings * and remove some leftovers of Plugin.Permissions --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 6 --- Source/BLE.Client/BLE.Client.Droid/Setup.cs | 2 - .../BLE.Client.iOS/BLE.Client.iOS.csproj | 6 --- Source/BLE.Client/BLE.Client.iOS/Setup.cs | 2 - .../BLE.Client.macOS/BLE.Client.macOS.csproj | 6 --- Source/BLE.Client/BLE.Client.macOS/Setup.cs | 2 - .../BLE.Client/BLE.Client/BLE.Client.csproj | 1 - .../BLE.Client/BLE.Client/Helpers/Settings.cs | 43 ------------------- .../ViewModels/DeviceListViewModel.cs | 9 ++-- 9 files changed, 3 insertions(+), 74 deletions(-) delete mode 100644 Source/BLE.Client/BLE.Client/Helpers/Settings.cs diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index 8ee42436..85800e7b 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -120,12 +120,6 @@ 7.1.2 - - 6.0.1 - - - 4.1.0-beta - 5.0.0.2012 diff --git a/Source/BLE.Client/BLE.Client.Droid/Setup.cs b/Source/BLE.Client/BLE.Client.Droid/Setup.cs index 83d58410..de65c713 100644 --- a/Source/BLE.Client/BLE.Client.Droid/Setup.cs +++ b/Source/BLE.Client/BLE.Client.Droid/Setup.cs @@ -5,7 +5,6 @@ using MvvmCross; using MvvmCross.Forms.Platforms.Android.Core; using MvvmCross.IoC; -using Plugin.Settings; namespace BLE.Client.Droid { @@ -21,7 +20,6 @@ protected override IMvxIoCProvider InitializeIoC() var result = base.InitializeIoC(); Mvx.IoCProvider.RegisterSingleton(() => UserDialogs.Instance); - Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); return result; } diff --git a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj index 179e69ea..44076baf 100644 --- a/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj +++ b/Source/BLE.Client/BLE.Client.iOS/BLE.Client.iOS.csproj @@ -193,12 +193,6 @@ 7.1.2 - - 6.0.1 - - - 4.1.0-beta - 5.0.0.2012 diff --git a/Source/BLE.Client/BLE.Client.iOS/Setup.cs b/Source/BLE.Client/BLE.Client.iOS/Setup.cs index 5f828abb..f8ac91f7 100644 --- a/Source/BLE.Client/BLE.Client.iOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.iOS/Setup.cs @@ -3,7 +3,6 @@ using MvvmCross.Forms.Platforms.Ios.Core; using MvvmCross.IoC; using MvvmCross.ViewModels; -using Plugin.Settings; namespace BLE.Client.iOS { @@ -19,7 +18,6 @@ protected override IMvxIoCProvider InitializeIoC() var result = base.InitializeIoC(); Mvx.IoCProvider.RegisterSingleton(() => UserDialogs.Instance); - Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); return result; } diff --git a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj index 87352cdb..eb94f82e 100644 --- a/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj +++ b/Source/BLE.Client/BLE.Client.macOS/BLE.Client.macOS.csproj @@ -103,12 +103,6 @@ 7.1.2 - - 6.0.1 - - - 4.1.0-beta - 5.0.0.2012 diff --git a/Source/BLE.Client/BLE.Client.macOS/Setup.cs b/Source/BLE.Client/BLE.Client.macOS/Setup.cs index adb70304..5d61bf41 100644 --- a/Source/BLE.Client/BLE.Client.macOS/Setup.cs +++ b/Source/BLE.Client/BLE.Client.macOS/Setup.cs @@ -8,7 +8,6 @@ using MvvmCross; using MvvmCross.Forms.Platforms.Mac.Core; using MvvmCross.IoC; -using Plugin.Settings; using Xamarin.Forms; namespace BLE.Client.macOS @@ -21,7 +20,6 @@ protected override IMvxIoCProvider InitializeIoC() // Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current); // Mvx.IoCProvider.RegisterSingleton(() => CrossBluetoothLE.Current.Adapter); - Mvx.IoCProvider.RegisterSingleton(() => CrossSettings.Current); Mvx.IoCProvider.RegisterSingleton(() => new UserDialogsMac()); return result; diff --git a/Source/BLE.Client/BLE.Client/BLE.Client.csproj b/Source/BLE.Client/BLE.Client/BLE.Client.csproj index 823535dc..bbcb370c 100644 --- a/Source/BLE.Client/BLE.Client/BLE.Client.csproj +++ b/Source/BLE.Client/BLE.Client/BLE.Client.csproj @@ -12,7 +12,6 @@ - diff --git a/Source/BLE.Client/BLE.Client/Helpers/Settings.cs b/Source/BLE.Client/BLE.Client/Helpers/Settings.cs deleted file mode 100644 index 266f0154..00000000 --- a/Source/BLE.Client/BLE.Client/Helpers/Settings.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Helpers/Settings.cs -using Plugin.Settings; -using Plugin.Settings.Abstractions; - -namespace BLE.Client.Helpers -{ - /// - /// This is the Settings static class that can be used in your Core solution or in any - /// of your client applications. All settings are laid out the same exact way with getters - /// and setters. - /// - public static class Settings - { - private static ISettings AppSettings - { - get - { - return CrossSettings.Current; - } - } - - #region Setting Constants - - private const string SettingsKey = "settings_key"; - private static readonly string SettingsDefault = string.Empty; - - #endregion - - - public static string GeneralSettings - { - get - { - return AppSettings.GetValueOrDefault(SettingsKey, SettingsDefault); - } - set - { - AppSettings.AddOrUpdateValue(SettingsKey, value); - } - } - - } -} \ No newline at end of file diff --git a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs index 5b360742..bb045d7f 100644 --- a/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs +++ b/Source/BLE.Client/BLE.Client/ViewModels/DeviceListViewModel.cs @@ -11,7 +11,6 @@ using Plugin.BLE.Abstractions.Contracts; using Plugin.BLE.Abstractions.EventArgs; using Plugin.BLE.Abstractions.Extensions; -using Plugin.Settings.Abstractions; using MvvmCross.Commands; using MvvmCross.Navigation; using MvvmCross; @@ -24,7 +23,6 @@ public class DeviceListViewModel : BaseViewModel { private readonly IBluetoothLE _bluetoothLe; private readonly IUserDialogs _userDialogs; - private readonly ISettings _settings; private Guid _previousGuid; private CancellationTokenSource _cancellationTokenSource; @@ -34,7 +32,7 @@ public Guid PreviousGuid set { _previousGuid = value; - _settings.AddOrUpdateValue("lastguid", _previousGuid.ToString()); + Preferences.Set("lastguid", _previousGuid.ToString()); RaisePropertyChanged(); RaisePropertyChanged(() => ConnectToPreviousCommand); } @@ -85,11 +83,10 @@ public bool UseAutoConnect RaisePropertyChanged(() => IsRefreshing); }, () => _cancellationTokenSource != null); - public DeviceListViewModel(IBluetoothLE bluetoothLe, IAdapter adapter, IUserDialogs userDialogs, ISettings settings) : base(adapter) + public DeviceListViewModel(IBluetoothLE bluetoothLe, IAdapter adapter, IUserDialogs userDialogs) : base(adapter) { _bluetoothLe = bluetoothLe; _userDialogs = userDialogs; - _settings = settings; // quick and dirty :> _bluetoothLe.StateChanged += OnStateChanged; Adapter.DeviceDiscovered += OnDeviceDiscovered; @@ -104,7 +101,7 @@ private Task GetPreviousGuidAsync() { return Task.Run(() => { - var guidString = _settings.GetValueOrDefault("lastguid", string.Empty); + var guidString = Preferences.Get("lastguid", string.Empty); PreviousGuid = !string.IsNullOrEmpty(guidString) ? Guid.Parse(guidString) : Guid.Empty; }); } From 71e2be2531f38b1056c92aaac2f1752c3dd94a75 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 23 Mar 2022 23:47:22 +0100 Subject: [PATCH 155/527] BLE.Client.Droid: remove Plugin.CurrentActivity * replaced by Xamarin.Essentials.Platform --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 3 --- Source/BLE.Client/BLE.Client.Droid/MainApplication.cs | 4 ---- 2 files changed, 7 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index 85800e7b..88cb8292 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -129,9 +129,6 @@ 1.0.0.7 - - 2.1.0.4 - 1.2.0 diff --git a/Source/BLE.Client/BLE.Client.Droid/MainApplication.cs b/Source/BLE.Client/BLE.Client.Droid/MainApplication.cs index b69fe397..2fc22b6f 100644 --- a/Source/BLE.Client/BLE.Client.Droid/MainApplication.cs +++ b/Source/BLE.Client/BLE.Client.Droid/MainApplication.cs @@ -3,7 +3,6 @@ using Android.App; using Android.OS; using Android.Runtime; -using Plugin.CurrentActivity; namespace BLE.Client.Droid { @@ -31,7 +30,6 @@ public override void OnTerminate() public void OnActivityCreated(Activity activity, Bundle savedInstanceState) { - CrossCurrentActivity.Current.Activity = activity; } public void OnActivityDestroyed(Activity activity) @@ -44,7 +42,6 @@ public void OnActivityPaused(Activity activity) public void OnActivityResumed(Activity activity) { - CrossCurrentActivity.Current.Activity = activity; } public void OnActivitySaveInstanceState(Activity activity, Bundle outState) @@ -53,7 +50,6 @@ public void OnActivitySaveInstanceState(Activity activity, Bundle outState) public void OnActivityStarted(Activity activity) { - CrossCurrentActivity.Current.Activity = activity; } public void OnActivityStopped(Activity activity) From d5d4258be59222abf6a15bb0bdef7e701d5e9c00 Mon Sep 17 00:00:00 2001 From: Adam Diament Date: Mon, 28 Mar 2022 12:18:38 +0300 Subject: [PATCH 156/527] Scan Filtering --- .../BLE.Client/Pages/DeviceListPage.xaml | 51 ++++++- .../ViewModels/DeviceListViewModel.cs | 144 +++++++++++++++++- Source/Plugin.BLE.Abstractions/AdapterBase.cs | 10 +- .../Contracts/IAdapter.cs | 6 +- .../Extensions/AdapterExtenstion.cs | 14 +- .../ScanFilterOptions.cs | 37 +++++ .../Utils/FakeAdapter.cs | 2 +- Source/Plugin.BLE.Android/Adapter.cs | 58 +++++-- Source/Plugin.BLE.iOS/Adapter.cs | 6 +- 9 files changed, 296 insertions(+), 32 deletions(-) create mode 100644 Source/Plugin.BLE.Abstractions/ScanFilterOptions.cs diff --git a/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml b/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml index f8af4100..ee67ba79 100644 --- a/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml +++ b/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml @@ -87,7 +87,56 @@ - + + + + + + + + - /// Requested service Ids. The default is null. - /// Function that filters the devices. The default is a function that returns true. + /// Options to pass to the native BLE scan filter, which can improve scan performance. + /// Function that filters the devices returned by the scan. The default is a function that returns true. /// iOS only: If true, filtering is disabled and a discovery event is generated each time the central receives an advertising packet from the peripheral. /// Disabling this filtering can have an adverse effect on battery life and should be used only if necessary. /// If false, multiple discoveries of the same peripheral are coalesced into a single discovery event. @@ -78,7 +78,7 @@ public interface IAdapter /// For android, key is ignored. /// The token to monitor for cancellation requests. The default value is None. /// A task that represents the asynchronous read operation. The Task will finish after the scan has ended. - Task StartScanningForDevicesAsync(Guid[] serviceUuids = null, Func deviceFilter = null, bool allowDuplicatesKey = false, CancellationToken cancellationToken = default); + Task StartScanningForDevicesAsync(ScanFilterOptions scanFilterOptions = null, Func deviceFilter = null, bool allowDuplicatesKey = false, CancellationToken cancellationToken = default); /// /// Stops scanning for BLE devices. diff --git a/Source/Plugin.BLE.Abstractions/Extensions/AdapterExtenstion.cs b/Source/Plugin.BLE.Abstractions/Extensions/AdapterExtenstion.cs index 7981c8ea..1df96e56 100644 --- a/Source/Plugin.BLE.Abstractions/Extensions/AdapterExtenstion.cs +++ b/Source/Plugin.BLE.Abstractions/Extensions/AdapterExtenstion.cs @@ -31,7 +31,19 @@ public static Task StartScanningForDevicesAsync(this IAdapter adapter, Cancellat /// A task that represents the asynchronous read operation. The Task will finish after the scan has ended. public static Task StartScanningForDevicesAsync(this IAdapter adapter, Guid[] serviceUuids, CancellationToken cancellationToken = default) { - return adapter.StartScanningForDevicesAsync(serviceUuids, null, cancellationToken: cancellationToken); + return adapter.StartScanningForDevicesAsync(new ScanFilterOptions(){ServiceUuids = serviceUuids}, null, cancellationToken: cancellationToken); + } + + /// + /// Starts scanning for BLE devices that match the provided . + /// + /// Target adapter. + /// Scan Filter Options for native level filtering. Some options are platform specific, see comments. + /// The token to monitor for cancellation requests. The default value is None. + /// A task that represents the asynchronous read operation. The Task will finish after the scan has ended. + public static Task StartScanningForDevicesAsync(this IAdapter adapter, ScanFilterOptions scanFilterOptions, CancellationToken cancellationToken = default) + { + return adapter.StartScanningForDevicesAsync(scanFilterOptions, null, cancellationToken: cancellationToken); } /// diff --git a/Source/Plugin.BLE.Abstractions/ScanFilterOptions.cs b/Source/Plugin.BLE.Abstractions/ScanFilterOptions.cs new file mode 100644 index 00000000..d5744c04 --- /dev/null +++ b/Source/Plugin.BLE.Abstractions/ScanFilterOptions.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Plugin.BLE.Abstractions +{ + /// + /// Pass one or multiple scan filters to filter the scan. Pay attention to which filters are platform specific. + /// At least one scan filter is required to enable scanning whilst the screen is off in Android. + /// + public class ScanFilterOptions + { + /// + /// Android and iOS. Filter the scan by advertised service ids(s) + /// + public Guid[] ServiceUuids { get; set; } = null; + + /// + /// Android only. Filter the scan by device address(es) + /// + public string[] DeviceAddresses { get; set; } = null; + + /// + /// Android only. Filter the scan by manufacturer ids. + /// + //todo - allow filtering by manufacturer byte[] data + public int[] ManufacturerIds { get; set; } = null; + + //todo string [] DeviceNames {get; set;} = null + + public bool HasFilter => HasServiceIds || HasDeviceAddresses || HasManufacturerIds; + public bool HasServiceIds => ServiceUuids?.Any() == true; + public bool HasDeviceAddresses => DeviceAddresses?.Any() == true; + public bool HasManufacturerIds => ManufacturerIds?.Any() == true; + } +} diff --git a/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs b/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs index 02f67e1e..79d2aa4a 100644 --- a/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs +++ b/Source/Plugin.BLE.Abstractions/Utils/FakeAdapter.cs @@ -14,7 +14,7 @@ public override Task ConnectToKnownDeviceAsync(Guid deviceGuid, Connect return Task.FromResult(null); } - protected override Task StartScanningForDevicesNativeAsync(Guid[] serviceUuids, bool allowDuplicatesKey, CancellationToken scanCancellationToken) + protected override Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { TraceUnavailability(); return Task.FromResult(0); diff --git a/Source/Plugin.BLE.Android/Adapter.cs b/Source/Plugin.BLE.Android/Adapter.cs index a8972f9f..00d5f583 100644 --- a/Source/Plugin.BLE.Android/Adapter.cs +++ b/Source/Plugin.BLE.Android/Adapter.cs @@ -51,15 +51,15 @@ public Adapter(BluetoothManager bluetoothManager) } } - protected override Task StartScanningForDevicesNativeAsync(Guid[] serviceUuids, bool allowDuplicatesKey, CancellationToken scanCancellationToken) + protected override Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop) { - StartScanningOld(serviceUuids); + StartScanningOld(scanFilterOptions?.ServiceUuids); } else { - StartScanningNew(serviceUuids); + StartScanningNew(scanFilterOptions); } return Task.FromResult(true); @@ -79,20 +79,44 @@ private void StartScanningOld(Guid[] serviceUuids) #pragma warning restore 618 } - private void StartScanningNew(Guid[] serviceUuids) + private void StartScanningNew(ScanFilterOptions scanFilterOptions) { - var hasFilter = serviceUuids?.Any() ?? false; + var hasFilter = scanFilterOptions?.HasFilter == true; List scanFilters = null; if (hasFilter) { - scanFilters = new List(); - foreach (var serviceUuid in serviceUuids) + if (scanFilterOptions.HasServiceIds) + { + scanFilters = new List(); + foreach (var serviceUuid in scanFilterOptions.ServiceUuids) + { + var sfb = new ScanFilter.Builder(); + sfb.SetServiceUuid(ParcelUuid.FromString(serviceUuid.ToString())); + scanFilters.Add(sfb.Build()); + } + } + if (scanFilterOptions.HasManufacturerIds) + { + scanFilters = new List(); + foreach (var manufacturerId in scanFilterOptions.ManufacturerIds) + { + var sfb = new ScanFilter.Builder(); + sfb.SetManufacturerData(manufacturerId,Array.Empty()); // future enhancement, add manufacturer byte data to filter + scanFilters.Add(sfb.Build()); + } + } + if (scanFilterOptions.HasDeviceAddresses) { - var sfb = new ScanFilter.Builder(); - sfb.SetServiceUuid(ParcelUuid.FromString(serviceUuid.ToString())); - scanFilters.Add(sfb.Build()); + scanFilters = new List(); + foreach (var deviceAddress in scanFilterOptions.DeviceAddresses) + { + var sfb = new ScanFilter.Builder(); + sfb.SetDeviceAddress(deviceAddress); + scanFilters.Add(sfb.Build()); + } } + } var ssb = new ScanSettings.Builder(); @@ -109,7 +133,19 @@ private void StartScanningNew(Guid[] serviceUuids) Trace.Message($"Adapter >=21: Starting a scan for devices. ScanMode: {ScanMode}"); if (hasFilter) { - Trace.Message($"ScanFilters: {string.Join(", ", serviceUuids)}"); + if (scanFilterOptions.HasServiceIds) + { + Trace.Message($"Service UUID Scan Filters: {string.Join(", ", scanFilterOptions.ServiceUuids)}"); + } + if (scanFilterOptions.HasManufacturerIds) + { + Trace.Message($"Manufacturer Id Scan Filters: {string.Join(", ", scanFilterOptions.ManufacturerIds)}"); + } + if (scanFilterOptions.HasDeviceAddresses) + { + Trace.Message($"Device Address Scan Filters: {string.Join(", ", scanFilterOptions.DeviceAddresses)}"); + } + } _bluetoothAdapter.BluetoothLeScanner.StartScan(scanFilters, ssb.Build(), _api21ScanCallback); } diff --git a/Source/Plugin.BLE.iOS/Adapter.cs b/Source/Plugin.BLE.iOS/Adapter.cs index 0f2fa2ef..4b7438b6 100644 --- a/Source/Plugin.BLE.iOS/Adapter.cs +++ b/Source/Plugin.BLE.iOS/Adapter.cs @@ -144,7 +144,7 @@ public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCe }; } - protected override async Task StartScanningForDevicesNativeAsync(Guid[] serviceUuids, bool allowDuplicatesKey, CancellationToken scanCancellationToken) + protected override async Task StartScanningForDevicesNativeAsync(ScanFilterOptions scanFilterOptions, bool allowDuplicatesKey, CancellationToken scanCancellationToken) { // Wait for the PoweredOn state await WaitForState(CBCentralManagerState.PoweredOn, scanCancellationToken).ConfigureAwait(false); @@ -155,9 +155,9 @@ protected override async Task StartScanningForDevicesNativeAsync(Guid[] serviceU Trace.Message("Adapter: Starting a scan for devices."); CBUUID[] serviceCbuuids = null; - if (serviceUuids != null && serviceUuids.Any()) + if (scanFilterOptions != null && scanFilterOptions.HasServiceIds) { - serviceCbuuids = serviceUuids.Select(u => CBUUID.FromString(u.ToString())).ToArray(); + serviceCbuuids = scanFilterOptions.ServiceUuids.Select(u => CBUUID.FromString(u.ToString())).ToArray(); Trace.Message("Adapter: Scanning for " + serviceCbuuids.First()); } From 32b39c1052b7a5548c89a4630350418e67df2ad8 Mon Sep 17 00:00:00 2001 From: Adam Diament Date: Mon, 28 Mar 2022 13:31:30 +0300 Subject: [PATCH 157/527] Fixed filtering, added instructions and validation --- README.md | 18 ++++++++++++++++++ .../BLE.Client/Pages/DeviceListPage.xaml | 6 +++--- .../ViewModels/DeviceListViewModel.cs | 8 ++++---- Source/Plugin.BLE.Android/Adapter.cs | 18 ++++++++++++------ 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 12bcc8e1..331a201a 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,15 @@ Add these permissions to AndroidManifest.xml. For Marshmallow and above, please ``` +Android 12 and above may require one or more of the following additional runtime permissions, depending on which features of the library you are using (see [the android Bluetooth permissions documentation](https://developer.android.com/guide/topics/connectivity/bluetooth/permissions)) +```xml + + + + +``` + + Add this line to your manifest if you want to declare that your app is available to BLE-capable devices **only**: ```xml @@ -152,6 +161,15 @@ adapter.DeviceDiscovered += (s,a) => deviceList.Add(a.Device); await adapter.StartScanningForDevicesAsync(); ``` +#### Scan Filtering +```csharp +var scanFilterOptions = new ScanFilterOptions(); +scanFilterOptions.ServiceUuids = new [] {guid1, guid2, etc}; // cross platform filter +scanFilterOptions.ManufacturerIds = new [] {1,2,3,etc}; // android only filter +scanFilterOptions.DeviceAddresses = new [] {"80:6F:B0:43:8D:3B","80:6F:B0:25:C3:15",etc}; // android only filter +await adapter.StartScanningForDevicesAsync(scanFilterOptions); +``` + ##### ScanTimeout Set `adapter.ScanTimeout` to specify the maximum duration of the scan. diff --git a/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml b/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml index ee67ba79..0be8f705 100644 --- a/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml +++ b/Source/BLE.Client/BLE.Client/Pages/DeviceListPage.xaml @@ -97,11 +97,11 @@ - + - + - + - + - + - + - + - + - - + + - - + +
None
11 Broadcast
22 Read
44 WriteWithoutResponse
88 Write
1616 Notify
3232 Indicate
6464 AuthenticatedSignedWrites
128128 ExtendedProperties
256256 NotifyEncryptionRequired ReliableWrites
512512 IndicateEncryptionRequired WritableAuxiliaries
From 57984fed0211d8206a36f4e5a61245816cd89d85 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 13:01:09 +0200 Subject: [PATCH 282/527] fix compiler warnings in DeviceBase * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 18 ++-- Source/Plugin.BLE/Shared/DeviceBase.cs | 98 +++++++++++++++++++ 2 files changed, 109 insertions(+), 7 deletions(-) diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 3740882c..dc859054 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -68,10 +68,11 @@ public interface IDevice : IDisposable /// /// Updates the rssi value. - /// + /// + /// /// Important: /// On Android: This function will only work if the device is connected. The Rssi value will be determined once on the discovery of the device. - ///
+ /// /// /// A task that represents the asynchronous read operation. The Result property will contain a boolean that inticates if the update was successful. /// The Task will finish after Rssi has been updated. @@ -79,12 +80,14 @@ public interface IDevice : IDisposable Task UpdateRssiAsync(); /// - /// Requests a MTU update and fires an "Exchange MTU Request" on the ble stack. Be aware that the resulting MTU value will be negotiated between master and slave using your requested value for the negotiation. - /// + /// Requests a MTU update and fires an "Exchange MTU Request" on the ble stack. + /// Be aware that the resulting MTU value will be negotiated between master and slave using your requested value for the negotiation. + /// + /// /// Important: /// On Android: This function will only work with API level 21 and higher. Other API level will get an default value as function result. /// On iOS: Requesting MTU sizes is not supported by iOS. The function will return the current negotiated MTU between master / slave. - ///
+ /// /// /// A task that represents the asynchronous operation. The result contains the negotiated MTU size between master and slave /// The requested MTU @@ -94,11 +97,12 @@ public interface IDevice : IDisposable /// Requests a bluetooth-le connection update request. Be aware that this is only implemented on Android (>= API 21). /// You can choose between a high, low and a normal mode which will requests the following connection intervals: HIGH (11-15ms). NORMAL (30-50ms). LOW (100-125ms). /// Its not possible to request a specific connection interval. - /// + ///
+ /// /// Important: /// On Android: This function will only work with API level 21 and higher. Other API level will return false as function result. /// On iOS: Updating the connection interval is not supported by iOS. The function simply returns false. - ///
+ /// /// True if the update request was sucessfull. On iOS it will always return false. /// The requested interval (High/Low/Normal) bool UpdateConnectionInterval(ConnectionInterval interval); diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index a8360b76..8bba0012 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -7,18 +7,33 @@ namespace Plugin.BLE.Abstractions { + /// + /// Base class for anything that needs a cancellation token source. + /// public interface ICancellationMaster { + /// + /// The cancellation token source. + /// CancellationTokenSource TokenSource { get; set; } } + /// + /// Extensions for ICancellationMaster. + /// public static class ICancellationMasterExtensions { + /// + /// Obtain a combined token source of the ICancellationMaster with any other taken. + /// public static CancellationTokenSource GetCombinedSource(this ICancellationMaster cancellationMaster, CancellationToken token) { return CancellationTokenSource.CreateLinkedTokenSource(cancellationMaster.TokenSource.Token, token); } + /// + /// Cancel any task connected to the token and dispose the source. + /// public static void CancelEverything(this ICancellationMaster cancellationMaster) { cancellationMaster.TokenSource?.Cancel(); @@ -26,6 +41,9 @@ public static void CancelEverything(this ICancellationMaster cancellationMaster) cancellationMaster.TokenSource = null; } + /// + /// Cancel any task connected to the token and create a new source. + /// public static void CancelEverythingAndReInitialize(this ICancellationMaster cancellationMaster) { cancellationMaster.CancelEverything(); @@ -33,25 +51,58 @@ public static void CancelEverythingAndReInitialize(this ICancellationMaster canc } } + /// + /// Base class for platform-specific Device classes. + /// public abstract class DeviceBase : IDevice, ICancellationMaster { + /// + /// The adapter that connects to this device. + /// protected readonly IAdapter Adapter; private readonly List KnownServices = new List(); + + /// + /// Id of the device. + /// public Guid Id { get; protected set; } + /// + /// Advertised Name of the Device. + /// public string Name { get; protected set; } + /// + /// Last known rssi value in decibals. + /// Can be updated via . + /// public int Rssi { get; protected set; } + /// + /// State of the device. + /// public DeviceState State => GetState(); + /// + /// All the advertisment records. + /// public IReadOnlyList AdvertisementRecords { get; protected set; } + /// + /// The native device. + /// public TNativeDevice NativeDevice { get; protected set; } + CancellationTokenSource ICancellationMaster.TokenSource { get; set; } = new CancellationTokenSource(); object IDevice.NativeDevice => NativeDevice; + /// + /// DeviceBase constructor. + /// protected DeviceBase(IAdapter adapter, TNativeDevice nativeDevice) { Adapter = adapter; NativeDevice = nativeDevice; } + /// + /// Gets all services of the device. + /// public async Task> GetServicesAsync(CancellationToken cancellationToken = default) { lock (KnownServices) @@ -76,39 +127,78 @@ public async Task> GetServicesAsync(CancellationToken ca } } + /// + /// Gets the first service with the Id . + /// + /// The id of the searched service. + /// public async Task GetServiceAsync(Guid id, CancellationToken cancellationToken = default) { var services = await GetServicesAsync(cancellationToken); return services.ToList().FirstOrDefault(x => x.Id == id); } + /// + /// Requests a MTU update and fires an "Exchange MTU Request" on the ble stack. + /// public async Task RequestMtuAsync(int requestValue) { return await RequestMtuNativeAsync(requestValue); } + /// + /// Requests a bluetooth-le connection update request. + /// public bool UpdateConnectionInterval(ConnectionInterval interval) { return UpdateConnectionIntervalNative(interval); } + /// + /// Updates the rssi value. + /// public abstract Task UpdateRssiAsync(); + + /// + /// Determines the state of the device. + /// protected abstract DeviceState GetState(); + /// + /// Native implementation of GetServicesAsync. + /// protected abstract Task> GetServicesNativeAsync(); + /// + /// Currently not being used anywhere! + /// protected abstract Task GetServiceNativeAsync(Guid id); + /// + /// Native implementation of RequestMtuAsync. + /// protected abstract Task RequestMtuNativeAsync(int requestValue); + /// + /// Native implementation of UpdateConnectionInterval. + /// protected abstract bool UpdateConnectionIntervalNative(ConnectionInterval interval); + /// + /// Convert to string (using the advertised device name). + /// public override string ToString() { return Name; } + /// + /// Dispose the device. + /// public virtual void Dispose() { Adapter.DisconnectDeviceAsync(this); } + /// + /// Clear all (known) services. + /// public void ClearServices() { this.CancelEverythingAndReInitialize(); @@ -132,6 +222,10 @@ public void ClearServices() } } + /// + /// Equality operator for comparison with other devices. + /// Checks for equality of the Id. + /// public override bool Equals(object other) { if (other == null) @@ -148,6 +242,10 @@ public override bool Equals(object other) return Id == otherDeviceBase.Id; } + /// + /// Returns the hash code for this instance + /// (using the hash code of the Id). + /// public override int GetHashCode() { return Id.GetHashCode(); From 5b13833d5a1d944efe552fb4b230fdc758d0591f Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 13:40:21 +0200 Subject: [PATCH 283/527] fix compiler warnings in DeviceBondState * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/DeviceBondState.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Source/Plugin.BLE/Shared/DeviceBondState.cs b/Source/Plugin.BLE/Shared/DeviceBondState.cs index a2947e2b..e84b5213 100644 --- a/Source/Plugin.BLE/Shared/DeviceBondState.cs +++ b/Source/Plugin.BLE/Shared/DeviceBondState.cs @@ -1,9 +1,25 @@ namespace Plugin.BLE.Abstractions { + /// + /// Bond/pairing state of a device (currently only used on Android), + /// see https://developer.android.com/reference/android/bluetooth/BluetoothDevice#getBondState() + /// public enum DeviceBondState { + /// + /// Indicates that the remote device is not bonded (paired), + /// see https://developer.android.com/reference/android/bluetooth/BluetoothDevice#BOND_NONE + /// NotBonded, + /// + /// Indicates bonding (pairing) is in progress with the remote device, + /// see https://developer.android.com/reference/android/bluetooth/BluetoothDevice#BOND_BONDING + /// Bonding, + /// + /// Indicates the remote device is bonded (paired), + /// see https://developer.android.com/reference/android/bluetooth/BluetoothDevice#BOND_BONDED + /// Bonded } } \ No newline at end of file From c4b980dbd6bdabac0259a6c516c905f4d82ebaa9 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 13:44:49 +0200 Subject: [PATCH 284/527] fix compiler warnings in BluetoothStateChangedArgs * Missing XML comment for publicly visible type or member ... --- .../Shared/EventArgs/BluetoothStateChangedArgs.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Plugin.BLE/Shared/EventArgs/BluetoothStateChangedArgs.cs b/Source/Plugin.BLE/Shared/EventArgs/BluetoothStateChangedArgs.cs index b8f0a4d3..d66c2ac7 100644 --- a/Source/Plugin.BLE/Shared/EventArgs/BluetoothStateChangedArgs.cs +++ b/Source/Plugin.BLE/Shared/EventArgs/BluetoothStateChangedArgs.cs @@ -2,6 +2,9 @@ namespace Plugin.BLE.Abstractions.EventArgs { + /// + /// Event arguments for BleImplementationBase.StateChanged + /// public class BluetoothStateChangedArgs : System.EventArgs { /// @@ -14,6 +17,9 @@ public class BluetoothStateChangedArgs : System.EventArgs /// public BluetoothState NewState { get; } + /// + /// Constructor. + /// public BluetoothStateChangedArgs(BluetoothState oldState, BluetoothState newState) { OldState = oldState; From 855e76098fa73f505a9d690d456a7b0708735f2d Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 13:49:05 +0200 Subject: [PATCH 285/527] fix compiler warnings in CharacteristicUpdatedEventArgs * Missing XML comment for publicly visible type or member ... --- .../Shared/EventArgs/CharacteristicUpdatedEventArgs.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Plugin.BLE/Shared/EventArgs/CharacteristicUpdatedEventArgs.cs b/Source/Plugin.BLE/Shared/EventArgs/CharacteristicUpdatedEventArgs.cs index 41f3e129..24a0c4ac 100644 --- a/Source/Plugin.BLE/Shared/EventArgs/CharacteristicUpdatedEventArgs.cs +++ b/Source/Plugin.BLE/Shared/EventArgs/CharacteristicUpdatedEventArgs.cs @@ -2,10 +2,19 @@ namespace Plugin.BLE.Abstractions.EventArgs { + /// + /// Event arguments for ICharacteristic.ValueUpdated + /// public class CharacteristicUpdatedEventArgs : System.EventArgs { + /// + /// The characteristic. + /// public ICharacteristic Characteristic { get; set; } + /// + /// Constructor. + /// public CharacteristicUpdatedEventArgs(ICharacteristic characteristic) { Characteristic = characteristic; From 27a8edd55c32247f42d95689a0e59bb7796c3c64 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 13:52:28 +0200 Subject: [PATCH 286/527] fix compiler warnings in DeviceBondStateChangedEventArgs * Missing XML comment for publicly visible type or member ... --- .../Shared/EventArgs/DeviceBondStateChangedEventArgs.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Plugin.BLE/Shared/EventArgs/DeviceBondStateChangedEventArgs.cs b/Source/Plugin.BLE/Shared/EventArgs/DeviceBondStateChangedEventArgs.cs index 50153232..ff582c8c 100644 --- a/Source/Plugin.BLE/Shared/EventArgs/DeviceBondStateChangedEventArgs.cs +++ b/Source/Plugin.BLE/Shared/EventArgs/DeviceBondStateChangedEventArgs.cs @@ -2,9 +2,18 @@ namespace Plugin.BLE.Abstractions.EventArgs { + /// + /// Event arguments for BondStatusBroadcastReceiver.BondStateChanged + /// public class DeviceBondStateChangedEventArgs : System.EventArgs { + /// + /// The device. + /// public IDevice Device { get; set; } + /// + /// The bond state. + /// public DeviceBondState State { get; set; } } } \ No newline at end of file From f6d22a679bd331972233bd4d15471ebb0ab0da97 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 13:55:44 +0200 Subject: [PATCH 287/527] fix compiler warnings in DeviceErrorEventArgs * Missing XML comment for publicly visible type or member ... --- .../Plugin.BLE/Shared/EventArgs/DeviceErrorEventArgs.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/EventArgs/DeviceErrorEventArgs.cs b/Source/Plugin.BLE/Shared/EventArgs/DeviceErrorEventArgs.cs index 7b8308fc..acf46869 100644 --- a/Source/Plugin.BLE/Shared/EventArgs/DeviceErrorEventArgs.cs +++ b/Source/Plugin.BLE/Shared/EventArgs/DeviceErrorEventArgs.cs @@ -1,7 +1,14 @@ namespace Plugin.BLE.Abstractions.EventArgs { + /// + /// Event arguments for device-error events in IAdapter, + /// e.g. DeviceConnectionLost or DeviceConnectionError + /// public class DeviceErrorEventArgs : DeviceEventArgs - { + { + /// + /// The error message. + /// public string ErrorMessage; } } \ No newline at end of file From c2beaa0c00b27b8e6b6e511cc69516090fc5addc Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 14:03:36 +0200 Subject: [PATCH 288/527] fix compiler warnings in DeviceEventArgs * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/EventArgs/DeviceEventArgs.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Plugin.BLE/Shared/EventArgs/DeviceEventArgs.cs b/Source/Plugin.BLE/Shared/EventArgs/DeviceEventArgs.cs index 00ad60b8..2e3b72e8 100644 --- a/Source/Plugin.BLE/Shared/EventArgs/DeviceEventArgs.cs +++ b/Source/Plugin.BLE/Shared/EventArgs/DeviceEventArgs.cs @@ -2,8 +2,15 @@ namespace Plugin.BLE.Abstractions.EventArgs { + /// + /// Event arguments for device events in IAdapter, + /// e.g. DeviceAdvertised, DeviceDiscovered, DeviceConnected and DeviceDisconnected + /// public class DeviceEventArgs : System.EventArgs { + /// + /// The device. + /// public IDevice Device; } } \ No newline at end of file From 51716ad601d76613ee72183d3f3560c994472030 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 14:16:16 +0200 Subject: [PATCH 289/527] fix compiler warnings in CharacteristicReadException * Missing XML comment for publicly visible type or member ... --- .../Shared/Exceptions/CharacteristicReadException.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Plugin.BLE/Shared/Exceptions/CharacteristicReadException.cs b/Source/Plugin.BLE/Shared/Exceptions/CharacteristicReadException.cs index b15b3d81..be7d5ee7 100644 --- a/Source/Plugin.BLE/Shared/Exceptions/CharacteristicReadException.cs +++ b/Source/Plugin.BLE/Shared/Exceptions/CharacteristicReadException.cs @@ -2,8 +2,14 @@ namespace Plugin.BLE.Abstractions.Exceptions { + /// + /// An exception that is thrown whenever the reading of a characteristic value failed. + /// public class CharacteristicReadException : Exception { + /// + /// Constructor. + /// public CharacteristicReadException(string message) : base(message) { } From 46be955a989383f02eca80d1b15ebbdacb4e35e4 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 14:19:23 +0200 Subject: [PATCH 290/527] fix compiler warnings in DeviceConnectionException * Missing XML comment for publicly visible type or member ... --- .../Shared/Exceptions/DeviceConnectionException.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Source/Plugin.BLE/Shared/Exceptions/DeviceConnectionException.cs b/Source/Plugin.BLE/Shared/Exceptions/DeviceConnectionException.cs index 7fbeb6dd..4ca4904c 100644 --- a/Source/Plugin.BLE/Shared/Exceptions/DeviceConnectionException.cs +++ b/Source/Plugin.BLE/Shared/Exceptions/DeviceConnectionException.cs @@ -2,11 +2,23 @@ namespace Plugin.BLE.Abstractions.Exceptions { + /// + /// An exception that is thrown whenever the connection to a device fails. + /// public class DeviceConnectionException : Exception { + /// + /// The device Id. + /// public Guid DeviceId { get; } + /// + /// The device name. + /// public string DeviceName { get; } + /// + /// Constructor. + /// // TODO: maybe pass IDevice instead (after Connect refactoring) public DeviceConnectionException(Guid deviceId, string deviceName, string message) : base(message) { From d43dbf4d67391ceeaa447dc2977b09d8e9c77fd1 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 14:27:06 +0200 Subject: [PATCH 291/527] fix compiler warnings in DeviceDiscoverException * Missing XML comment for publicly visible type or member ... --- .../Plugin.BLE/Shared/Exceptions/DeviceDiscoverException.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Plugin.BLE/Shared/Exceptions/DeviceDiscoverException.cs b/Source/Plugin.BLE/Shared/Exceptions/DeviceDiscoverException.cs index 24f42f2d..87e44f71 100644 --- a/Source/Plugin.BLE/Shared/Exceptions/DeviceDiscoverException.cs +++ b/Source/Plugin.BLE/Shared/Exceptions/DeviceDiscoverException.cs @@ -2,8 +2,14 @@ namespace Plugin.BLE.Abstractions.Exceptions { + /// + /// An exception that is thrown whenever a problem occurs with discovering a device. + /// public class DeviceDiscoverException : Exception { + /// + /// Default constructor. + /// public DeviceDiscoverException() : base("Could not find the specific device.") { } From 2883a31c18b9d1dbbc6361750af9ae5d177d1ff4 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 14:37:21 +0200 Subject: [PATCH 292/527] fix compiler warnings in AdapterExtension * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs b/Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs index 99911891..8e8db5b8 100644 --- a/Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs +++ b/Source/Plugin.BLE/Shared/Extensions/AdapterExtension.cs @@ -9,6 +9,9 @@ namespace Plugin.BLE.Abstractions.Extensions { + /// + /// Various extensions for the Adapter classes. + /// public static class AdapterExtension { /// @@ -59,11 +62,17 @@ public static Task StartScanningForDevicesAsync(this IAdapter adapter, Func + /// Try to discover a device with a specific device Id. + /// public static Task DiscoverDeviceAsync(this IAdapter adapter, Guid deviceId, CancellationToken cancellationToken = default) { return DiscoverDeviceAsync(adapter, device => device.Id == deviceId, cancellationToken); } + /// + /// Try to discover a device that matches a filter function. + /// public static async Task DiscoverDeviceAsync(this IAdapter adapter, Func deviceFilter, CancellationToken cancellationToken = default) { var device = adapter.DiscoveredDevices.FirstOrDefault(deviceFilter); From 9ecb000bf55210864a22b22d80372d6a9b823f88 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 15:05:51 +0200 Subject: [PATCH 293/527] fix compiler warnings in GuidExtension * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/Extensions/GuidExtension.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Plugin.BLE/Shared/Extensions/GuidExtension.cs b/Source/Plugin.BLE/Shared/Extensions/GuidExtension.cs index a89231cf..470b14da 100644 --- a/Source/Plugin.BLE/Shared/Extensions/GuidExtension.cs +++ b/Source/Plugin.BLE/Shared/Extensions/GuidExtension.cs @@ -2,6 +2,9 @@ namespace Plugin.BLE.Abstractions.Extensions { + /// + /// Various extensions for Guids. + /// public static class GuidExtension { /// @@ -37,6 +40,9 @@ public static string PartialFromUuid(this Guid uuid) return "0x" + id; } + /// + /// Convert a byte array to a hex string. + /// public static string ToHexString(this byte[] bytes) { return bytes != null ? BitConverter.ToString(bytes) : string.Empty; From e31639e9620dcd53d042d8568b53e303c4db9fb0 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 15:09:20 +0200 Subject: [PATCH 294/527] fix compiler warnings in KnownCharacteristic * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/KnownCharacteristic.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Source/Plugin.BLE/Shared/KnownCharacteristic.cs b/Source/Plugin.BLE/Shared/KnownCharacteristic.cs index 598494eb..1832c0f9 100644 --- a/Source/Plugin.BLE/Shared/KnownCharacteristic.cs +++ b/Source/Plugin.BLE/Shared/KnownCharacteristic.cs @@ -2,11 +2,23 @@ namespace Plugin.BLE.Abstractions { + /// + /// Information about a known characteristic (name and ID). + /// public struct KnownCharacteristic { + /// + /// Name of the characteristic. + /// public string Name { get; private set; } + /// + /// Id of the characteristic. + /// public Guid Id { get; private set; } + /// + /// Constructor. + /// public KnownCharacteristic(string name, Guid id) { Name = name; From 91e00c0960318f2d6de71aac80abf37ecc4024d4 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 15:12:47 +0200 Subject: [PATCH 295/527] fix compiler warnings in KnownCharacteristics * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/KnownCharacteristics.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Plugin.BLE/Shared/KnownCharacteristics.cs b/Source/Plugin.BLE/Shared/KnownCharacteristics.cs index d9ec8cd4..86c38c9f 100644 --- a/Source/Plugin.BLE/Shared/KnownCharacteristics.cs +++ b/Source/Plugin.BLE/Shared/KnownCharacteristics.cs @@ -4,6 +4,9 @@ namespace Plugin.BLE.Abstractions { + /// + /// Provides a list of known characteristics. + /// public static class KnownCharacteristics { static KnownCharacteristics() @@ -12,6 +15,9 @@ static KnownCharacteristics() LookupTable = Characteristics.ToDictionary(c => c.Id, c => c); } + /// + /// Look up a known characteristic via its Id. + /// public static KnownCharacteristic Lookup(Guid id) { return LookupTable.ContainsKey(id) ? LookupTable[id] : new KnownCharacteristic("Unknown characteristic", Guid.Empty); From d9f71314334c6231890c4995149942445ea98200 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 15:15:01 +0200 Subject: [PATCH 296/527] fix compiler warnings in KnownDescriptor * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/KnownDescriptor.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Source/Plugin.BLE/Shared/KnownDescriptor.cs b/Source/Plugin.BLE/Shared/KnownDescriptor.cs index ede81e86..9d1bce45 100644 --- a/Source/Plugin.BLE/Shared/KnownDescriptor.cs +++ b/Source/Plugin.BLE/Shared/KnownDescriptor.cs @@ -2,11 +2,23 @@ namespace Plugin.BLE.Abstractions { + /// + /// Information about a known descriptor (name and ID). + /// public struct KnownDescriptor { + /// + /// Name of the descriptor. + /// public string Name { get; } + /// + /// Id of the descriptor. + /// public Guid Id { get; } + /// + /// Constructor. + /// public KnownDescriptor(string name, Guid id) { Name = name; From 2dd5e6791645c1a6c70c10b2fe51fd6566190926 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 15:17:23 +0200 Subject: [PATCH 297/527] fix compiler warnings in KnownDescriptors * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/KnownDescriptors.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/KnownDescriptors.cs b/Source/Plugin.BLE/Shared/KnownDescriptors.cs index ba4a7be2..fba516ec 100644 --- a/Source/Plugin.BLE/Shared/KnownDescriptors.cs +++ b/Source/Plugin.BLE/Shared/KnownDescriptors.cs @@ -4,7 +4,10 @@ namespace Plugin.BLE.Abstractions { - // Source: https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorsHomePage.aspx + /// + /// Provides a list of known descriptors. + /// Source: https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorsHomePage.aspx + /// public static class KnownDescriptors { private static readonly Dictionary LookupTable; @@ -14,6 +17,9 @@ static KnownDescriptors() LookupTable = Descriptors.ToDictionary(d => d.Id, d => d); } + /// + /// Look up a known descriptor via its Id. + /// public static KnownDescriptor Lookup(Guid id) { return LookupTable.ContainsKey(id) ? LookupTable[id] : new KnownDescriptor("Unknown descriptor", Guid.Empty); From bd305d763b2c236d9427e8832963fe2e8022bc36 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 15:20:09 +0200 Subject: [PATCH 298/527] fix compiler warnings in KnownService * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/KnownService.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Source/Plugin.BLE/Shared/KnownService.cs b/Source/Plugin.BLE/Shared/KnownService.cs index 1d4435d5..24d413a2 100644 --- a/Source/Plugin.BLE/Shared/KnownService.cs +++ b/Source/Plugin.BLE/Shared/KnownService.cs @@ -2,17 +2,32 @@ namespace Plugin.BLE.Abstractions { + /// + /// Information about a known service (name and ID). + /// public struct KnownService { + /// + /// Name of the service. + /// public string Name { get; } + /// + /// Id of the service. + /// public Guid Id { get; } + /// + /// Constructor. + /// public KnownService(string name, Guid id) { Name = name; Id = id; } + /// + /// Convert to string. + /// public override string ToString() { return $"{Name} - {Id}"; From 218d1b1ae454894a5c5ebf2974e535ec16115d75 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 15:25:15 +0200 Subject: [PATCH 299/527] fix compiler warnings in KnownServices * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/KnownServices.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/KnownServices.cs b/Source/Plugin.BLE/Shared/KnownServices.cs index 30142b02..56d9ee95 100644 --- a/Source/Plugin.BLE/Shared/KnownServices.cs +++ b/Source/Plugin.BLE/Shared/KnownServices.cs @@ -4,7 +4,10 @@ namespace Plugin.BLE.Abstractions { - // Source: https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx + /// + /// Provides a list of known services. + /// Source: https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx + /// public static class KnownServices { private static readonly Dictionary LookupTable; @@ -14,11 +17,17 @@ static KnownServices() LookupTable = Services.ToDictionary(s => s.Id, s => s); } + /// + /// Look up a known service via its Id. + /// public static KnownService Lookup(Guid id) { return LookupTable.ContainsKey(id) ? LookupTable[id] : new KnownService("Unknown Service", Guid.Empty); } + /// + /// The list of known services. + /// public static IReadOnlyList Services { get; } = new List { new KnownService("Alert Notification Service", Guid.ParseExact("00001811-0000-1000-8000-00805f9b34fb", "d")), From f37bcded5ce28d2c826f2e3932d9df3b68e9a73e Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 16:02:44 +0200 Subject: [PATCH 300/527] fix compiler warnings in ScanFilterOptions * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/ScanFilterOptions.cs | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Source/Plugin.BLE/Shared/ScanFilterOptions.cs b/Source/Plugin.BLE/Shared/ScanFilterOptions.cs index e2da10c2..0fdd2b49 100644 --- a/Source/Plugin.BLE/Shared/ScanFilterOptions.cs +++ b/Source/Plugin.BLE/Shared/ScanFilterOptions.cs @@ -9,16 +9,31 @@ namespace Plugin.BLE.Abstractions /// public class ServiceDataFilter { + /// + /// The service-data UUID. + /// public Guid ServiceDataUuid { get; set; } + /// + /// The service data (as a byte array). + /// public byte[] ServiceData { get; set; } = null; + /// + /// The service-data mask (as a byte array). + /// public byte[] ServiceDataMask { get; set; } = null; + /// + /// Standard constructor. + /// public ServiceDataFilter(Guid guid, byte[] data = null, byte[] mask = null) { ServiceDataUuid = guid; ServiceData = data ?? Array.Empty(); ServiceDataMask = mask; } + /// + /// Constructor with UUID as string. + /// public ServiceDataFilter(string uuid, byte[] data = null, byte[] mask = null) : this(new Guid(uuid), data, mask) { } @@ -30,10 +45,22 @@ public ServiceDataFilter(string uuid, byte[] data = null, byte[] mask = null) : ///

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 L#{AV4&zS!K48SLs literal 0 HcmV?d00001 diff --git a/Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-400.png b/Source/BLE.Client/BLE.Client.UWP/Assets/LargeTile.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a8c5f3a0e103c48e0dca990130c53de3c6ec3a GIT binary patch literal 55462 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

public class ManufacturerDataFilter { + /// + /// The manufacturer Id. + /// public int ManufacturerId { get; set; } + /// + /// The manufacturer data (as a byte array). + /// public byte[] ManufacturerData { get; set; } = null; + /// + /// The manufacturer-data mask (as a byte array). + /// public byte[] ManufacturerDataMask { get; set; } = null; + /// + /// Constructor. + /// public ManufacturerDataFilter(int mid, byte[] data = null, byte[] mask = null) { ManufacturerId = mid; @@ -73,12 +100,30 @@ public class ScanFilterOptions ///
public string[] DeviceNames { get; set; } = null; + /// + /// Indicates whether the options include any filter at all. + /// public bool HasFilter => HasServiceIds || HasServiceData || HasDeviceAddresses || HasManufacturerIds || HasDeviceNames; + /// + /// Indicates whether the options include a filter on service Ids. + /// public bool HasServiceIds => ServiceUuids?.Any() == true; + /// + /// Indicates whether the options include a filter on service data. + /// public bool HasServiceData => ServiceDataFilters?.Any() == true; + /// + /// Indicates whether the options include a filter on device addresses. + /// public bool HasDeviceAddresses => DeviceAddresses?.Any() == true; + /// + /// Indicates whether the options include a filter on manufacturer data. + /// public bool HasManufacturerIds => ManufacturerDataFilters?.Any() == true; + /// + /// Indicates whether the options include a filter on device names. + /// public bool HasDeviceNames => DeviceNames?.Any() == true; } } From b78419ec9cb0c766841093355959e02a64baec65 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 16:12:15 +0200 Subject: [PATCH 301/527] fix compiler warnings in ServiceBase * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/ServiceBase.cs | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Source/Plugin.BLE/Shared/ServiceBase.cs b/Source/Plugin.BLE/Shared/ServiceBase.cs index 831f64c0..1980cd75 100644 --- a/Source/Plugin.BLE/Shared/ServiceBase.cs +++ b/Source/Plugin.BLE/Shared/ServiceBase.cs @@ -6,22 +6,46 @@ namespace Plugin.BLE.Abstractions { + /// + /// Base class for platform-specific Service classes. + /// public abstract class ServiceBase : IService { private readonly List _characteristics = new List(); + /// + /// Name of the service. + /// public string Name => KnownServices.Lookup(Id).Name; + /// + /// Id of the Service. + /// public abstract Guid Id { get; } + /// + /// Indicates whether the type of service is primary or secondary. + /// public abstract bool IsPrimary { get; } + /// + /// The parent device. + /// public IDevice Device { get; } + /// + /// The native service. + /// protected TNativeService NativeService { get; } + /// + /// ServiceBase constructor. + /// protected ServiceBase(IDevice device, TNativeService nativeService) { Device = device; NativeService = nativeService; } + /// + /// Gets the characteristics of the service. + /// public async Task> GetCharacteristicsAsync() { if (!_characteristics.Any()) @@ -33,14 +57,24 @@ public async Task> GetCharacteristicsAsync() return _characteristics.ToList(); } + /// + /// Gets the first characteristic with the Id . + /// + /// The id of the searched characteristic. public async Task GetCharacteristicAsync(Guid id) { var characteristics = await GetCharacteristicsAsync(); return characteristics.FirstOrDefault(c => c.Id == id); } + /// + /// Native implementation of GetCharacteristicsAsync. + /// protected abstract Task> GetCharacteristicsNativeAsync(); + /// + /// Dispose the service. + /// public virtual void Dispose() { From 66a4c6ca675b4814d01d633eca094b297ec825f4 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 16:23:09 +0200 Subject: [PATCH 302/527] Update README.md * update useful links --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d35d7e6..6cf6636c 100644 --- a/README.md +++ b/README.md @@ -355,10 +355,11 @@ The BLE API implementation (especially on **Android**) has the following limitat ## Useful Links +- [Bluetooth Core Specification v4.2 (2014)](https://www.bluetooth.com/specifications/specs/core-specification-4-2/) +- [Bluetooth Core Specification v5.4 (2023)](https://www.bluetooth.com/specifications/specs/core-specification-5-4/) - [Android Bluetooth LE guideline](https://developer.android.com/guide/topics/connectivity/bluetooth-le.html) - [iOS CoreBluetooth Best Practices](https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForInteractingWithARemotePeripheralDevice/BestPracticesForInteractingWithARemotePeripheralDevice.html) - [iOS CoreBluetooth Background Modes](https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW7) -- [MvvmCross](https://github.com/MvvmCross) - [Monkey Robotics](https://github.com/xamarin/Monkey.Robotics) ## How to contribute From f0866c6f3e7fb758842de05406a8918e52ca040d Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 20:47:51 +0200 Subject: [PATCH 303/527] fix compiler warnings in Trace * Missing XML comment for publicly visible type or member ... --- Source/Plugin.BLE/Shared/Trace.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/Trace.cs b/Source/Plugin.BLE/Shared/Trace.cs index bf6770bc..f6ccb3db 100644 --- a/Source/Plugin.BLE/Shared/Trace.cs +++ b/Source/Plugin.BLE/Shared/Trace.cs @@ -2,10 +2,19 @@ namespace Plugin.BLE.Abstractions { + /// + /// Generic tracing class. + /// public static class Trace { + /// + /// The actual tracing implementation. + /// public static Action TraceImplementation { get; set; } - + + /// + /// Print a message via the tracing implementation. + /// public static void Message(string format, params object[] args) { try From def894d0c8069e98a06b942aa5c4372c80b12caf Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 21:06:28 +0200 Subject: [PATCH 304/527] fix compiler warnings in BleCommandQueue * Missing XML comment for publicly visible type or member ... --- .../Shared/Utils/BleCommandQueue.cs | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/Utils/BleCommandQueue.cs b/Source/Plugin.BLE/Shared/Utils/BleCommandQueue.cs index 376972e9..5dc55456 100644 --- a/Source/Plugin.BLE/Shared/Utils/BleCommandQueue.cs +++ b/Source/Plugin.BLE/Shared/Utils/BleCommandQueue.cs @@ -6,18 +6,29 @@ namespace Plugin.BLE.Abstractions.Utils { + /// + /// A BLE command queue. + /// public class BleCommandQueue { + /// + /// The actual queue of BLE commands. + /// public Queue CommandQueue { get; set; } private object _lock = new object(); private IBleCommand _currentCommand; + /// + /// Default constructor. + /// public BleCommandQueue() { - } + /// + /// Enqueue a command with a given timeout. + /// public Task EnqueueAsync(Func> bleCommand, int timeOutInSeconds = 10) { var command = new BleCommand(bleCommand, timeOutInSeconds); @@ -30,6 +41,9 @@ public Task EnqueueAsync(Func> bleCommand, int timeOutInSeconds = return command.ExecutingTask; } + /// + /// Cancel all pending commands. + /// public void CancelPending() { lock (_lock) @@ -42,6 +56,9 @@ public void CancelPending() } } + /// + /// Try to execute the next command in the queue. + /// private async void TryExecuteNext() { lock (_lock) @@ -67,21 +84,46 @@ private async void TryExecuteNext() } + /// + /// BLE command interface. + /// public interface IBleCommand { + /// + /// Execute the command. + /// Task ExecuteAsync(); + /// + /// Cancel the command. + /// void Cancel(); + /// + /// Indicates whether the command is currently executing. + /// bool IsExecuting { get; } + /// + /// Timeout of the command in milliseconds. + /// int TimeoutInMiliSeconds { get; } } + /// + /// A BLE command. + /// + /// public class BleCommand : IBleCommand { private Func> _taskSource; private TaskCompletionSource _taskCompletionSource; + /// + /// Timeout of the command in milliseconds. + /// public int TimeoutInMiliSeconds { get; } + /// + /// Constructor. + /// public BleCommand(Func> taskSource, int timeoutInSeconds) { _taskSource = taskSource; @@ -89,10 +131,19 @@ public BleCommand(Func> taskSource, int timeoutInSeconds) _taskCompletionSource = new TaskCompletionSource(); } + /// + /// The executing task. + /// public Task ExecutingTask => _taskCompletionSource.Task; + /// + /// Indicates whether the command is currently executing. + /// public bool IsExecuting { get; private set; } + /// + /// Execute the command. + /// public async Task ExecuteAsync() { try @@ -121,6 +172,9 @@ public async Task ExecuteAsync() } + /// + /// Cancel the command. + /// public void Cancel() { _taskCompletionSource.TrySetCanceled(); From 8f29d247539929215a8dbe4ca55a0bcf8b772243 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Thu, 20 Apr 2023 22:08:32 +0200 Subject: [PATCH 305/527] fix compiler warning in Android/BleImplementation * Warning CA1416: This call site is reachable on: 'Android' 21.0 and later. ... is only supported on: 'android' 23.0 and later. --- Source/Plugin.BLE/Android/BleImplementation.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Plugin.BLE/Android/BleImplementation.cs b/Source/Plugin.BLE/Android/BleImplementation.cs index 79fe116b..a840a103 100644 --- a/Source/Plugin.BLE/Android/BleImplementation.cs +++ b/Source/Plugin.BLE/Android/BleImplementation.cs @@ -1,3 +1,4 @@ +using System; using Android.App; using Android.Bluetooth; using Android.Content; @@ -26,7 +27,11 @@ private static bool IsMainThread { get { +#if NET6_0_OR_GREATER + if (OperatingSystem.IsAndroidVersionAtLeast(23)) +#else if (Build.VERSION.SdkInt >= BuildVersionCodes.M) +#endif { return Looper.MainLooper.IsCurrentThread; } From 6eb9156687b5a26e3b01d7cbf4f6ad113fbf7e5a Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 21 Apr 2023 09:09:41 +0200 Subject: [PATCH 306/527] fix compiler warnings in Android/Adapter * Warning CA1416: This call site is reachable on: 'Android' 21.0 and later. ... is only supported on: 'android' ... and later. --- Source/Plugin.BLE/Android/Adapter.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index 1abfae33..b6484234 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -150,7 +150,11 @@ private void StartScanningNew(ScanFilterOptions scanFilterOptions) var ssb = new ScanSettings.Builder(); ssb.SetScanMode(ScanMode.ToNative()); +#if NET6_0_OR_GREATER + if (OperatingSystem.IsAndroidVersionAtLeast(23)) +#else if (Build.VERSION.SdkInt >= BuildVersionCodes.M) +#endif { // set the match mode on Android 6 and above ssb.SetMatchMode(ScanMatchMode.ToNative()); @@ -164,7 +168,11 @@ private void StartScanningNew(ScanFilterOptions scanFilterOptions) } } +#if NET6_0_OR_GREATER + if (OperatingSystem.IsAndroidVersionAtLeast(26)) +#else if (Build.VERSION.SdkInt >= BuildVersionCodes.O) +#endif { // enable Bluetooth 5 Advertisement Extensions on Android 8.0 and above ssb.SetLegacy(false); From c654c7aad1e23ff1dfcdfb4212f86198595268a7 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 21 Apr 2023 09:36:37 +0200 Subject: [PATCH 307/527] fix compiler warning in Android/Device * Warning CA1416: This call site is reachable on: 'Android' 21.0 and later. ... is only supported on: 'android' ... and later. --- Source/Plugin.BLE/Android/Device.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index 5e61d268..6e9bc320 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -145,14 +145,21 @@ private void ConnectToGattForceBleTransportAPI(bool autoconnect, CancellationTok { //This parameter is present from API 18 but only public from API 23 //So reflection is used before API 23 - if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop) +#if NET6_0_OR_GREATER + if (OperatingSystem.IsAndroidVersionAtLeast(23)) +#else + if (Build.VERSION.SdkInt >= BuildVersionCodes.M) +#endif { - //no transport mode before lollipop, it will probably not work... gattCallBackError 133 again alas - var connectGatt = NativeDevice.ConnectGatt(Application.Context, autoconnect, _gattCallback); + var connectGatt = NativeDevice.ConnectGatt(Application.Context, autoconnect, _gattCallback, BluetoothTransports.Le); _connectCancellationTokenRegistration.Dispose(); _connectCancellationTokenRegistration = cancellationToken.Register(() => DisconnectAndClose(connectGatt)); } - else if (Build.VERSION.SdkInt < BuildVersionCodes.M) +#if NET6_0_OR_GREATER + else if (OperatingSystem.IsAndroidVersionAtLeast(21)) +#else + else if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) +#endif { var m = NativeDevice.Class.GetDeclaredMethod("connectGatt", new Java.Lang.Class[] { Java.Lang.Class.FromType(typeof(Context)), @@ -165,7 +172,8 @@ private void ConnectToGattForceBleTransportAPI(bool autoconnect, CancellationTok } else { - var connectGatt = NativeDevice.ConnectGatt(Application.Context, autoconnect, _gattCallback, BluetoothTransports.Le); + //no transport mode before lollipop, it will probably not work... gattCallBackError 133 again alas + var connectGatt = NativeDevice.ConnectGatt(Application.Context, autoconnect, _gattCallback); _connectCancellationTokenRegistration.Dispose(); _connectCancellationTokenRegistration = cancellationToken.Register(() => DisconnectAndClose(connectGatt)); } From 1a0e209754fc49dc26909acbcad0e212e5f5e6c8 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 21 Apr 2023 13:22:44 +0200 Subject: [PATCH 308/527] fix compiler warning in BLE.Client.iOS * 'UIApplication.Main(string[]?, string?, string?)' is obsolete: 'Use the overload with 'Type' instead of 'String' parameters for type safety.' --- Source/BLE.Client/BLE.Client.iOS/Main.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/BLE.Client/BLE.Client.iOS/Main.cs b/Source/BLE.Client/BLE.Client.iOS/Main.cs index bdc806c1..c29aac49 100644 --- a/Source/BLE.Client/BLE.Client.iOS/Main.cs +++ b/Source/BLE.Client/BLE.Client.iOS/Main.cs @@ -9,7 +9,7 @@ static void Main(string[] args) { // if you want to use a different Application Delegate class from "AppDelegate" // you can specify it here. - UIApplication.Main(args, null, "AppDelegate"); + UIApplication.Main(args, null, typeof(AppDelegate)); } } } From 7d5def8c92cc2c0672dc61e61c186c34a1879fa4 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 22 Apr 2023 12:34:46 +0200 Subject: [PATCH 309/527] Plugin.BLE.Tests: update to .NET 7 --- Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj index 3d8e8efa..72dc2f54 100644 --- a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj +++ b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj @@ -1,6 +1,6 @@  - net6.0 + net7.0 false From a8da97ca907c6d622c38cd054df55ec1609c59be Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 22 Apr 2023 13:49:24 +0200 Subject: [PATCH 310/527] Plugin.BLE.Tests: update Microsoft.NET.Test.Sdk to 17.5.0 --- Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj index 72dc2f54..88823ec3 100644 --- a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj +++ b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj @@ -4,7 +4,7 @@ false - + all From a5c95c4e321b4534168a14aa2ea31158d9b2b12a Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 22 Apr 2023 13:52:28 +0200 Subject: [PATCH 311/527] Plugin.BLE.Tests: update xunit to 2.4.2 --- Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj index 88823ec3..111927c8 100644 --- a/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj +++ b/Source/Plugin.BLE.Tests/Plugin.BLE.Tests.csproj @@ -5,8 +5,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From c2d45ef5f73a6fc5eb26bbdf1f13a493b68de155 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 23 Apr 2023 13:16:52 +0200 Subject: [PATCH 312/527] fix a compiler warning in Apple/Characteristic * warning CA1416: This call site is reachable on: 'iOS' 10.0 and later, 'maccatalyst' 10.0 and later. 'CBPeripheral.CanSendWriteWithoutResponse' is only supported on: 'ios' 11.0 and later, 'maccatalyst' 11.0 and later, 'macOS/OSX' 10.13 and later, 'tvos' 11.0 and later. --- Source/Plugin.BLE/Apple/Characteristic.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/Plugin.BLE/Apple/Characteristic.cs b/Source/Plugin.BLE/Apple/Characteristic.cs index f001880d..0c0c2afa 100644 --- a/Source/Plugin.BLE/Apple/Characteristic.cs +++ b/Source/Plugin.BLE/Apple/Characteristic.cs @@ -131,7 +131,7 @@ protected override Task WriteNativeAsync(byte[] data, CharacteristicWriteT if (writeType.ToNative() == CBCharacteristicWriteType.WithResponse) { task = TaskBuilder.FromEvent, EventHandler>( - execute: () => + execute: () => { if (_parentDevice.State != CBPeripheralState.Connected) throw exception; @@ -157,7 +157,14 @@ protected override Task WriteNativeAsync(byte[] data, CharacteristicWriteT // CBCharacteristicWriteType is an Enum; so else path is always WithoutResponse. else { - if (_parentDevice.CanSendWriteWithoutResponse) +#if NET6_0_OR_GREATER + if (OperatingSystem.IsIOSVersionAtLeast(11) || OperatingSystem.IsTvOSVersionAtLeast(11) || OperatingSystem.IsMacCatalystVersionAtLeast(11) +#elif __IOS__ + if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0) +#else + if (true +#endif + && _parentDevice.CanSendWriteWithoutResponse) { task = TaskBuilder.FromEvent>( execute: () => From e4fb9d75b5761ec70d59069c1b7c3bcf470ae659 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 19 Apr 2023 11:03:57 +0200 Subject: [PATCH 313/527] IAdapter: add method 'supportsExtendedAdvertising' and implement it on Android and iOS --- Source/Plugin.BLE/Android/Adapter.cs | 17 +++++++++++++++++ Source/Plugin.BLE/Apple/Adapter.cs | 18 ++++++++++++++++++ Source/Plugin.BLE/Shared/AdapterBase.cs | 5 +++++ Source/Plugin.BLE/Shared/Contracts/IAdapter.cs | 6 ++++++ 4 files changed, 46 insertions(+) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index b6484234..213d7590 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -274,6 +274,23 @@ public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) return devices.Where(item => ids.Contains(item.Id)).ToList(); } + public override bool supportsExtendedAdvertising() + { +#if NET6_0_OR_GREATER + if (OperatingSystem.IsAndroidVersionAtLeast(26)) +#else + if (Build.VERSION.SdkInt >= BuildVersionCodes.O) +#endif + { + return _bluetoothAdapter.IsLeExtendedAdvertisingSupported; + } + else + { + return false; + } + } + + private class DeviceComparer : IEqualityComparer { public bool Equals(BluetoothDevice x, BluetoothDevice y) diff --git a/Source/Plugin.BLE/Apple/Adapter.cs b/Source/Plugin.BLE/Apple/Adapter.cs index b415e18c..aeb04865 100644 --- a/Source/Plugin.BLE/Apple/Adapter.cs +++ b/Source/Plugin.BLE/Apple/Adapter.cs @@ -422,5 +422,23 @@ public static List ParseAdvertismentData(NSDictionary adver return records; } + +#if NET6_0_OR_GREATER || __IOS__ + public override bool supportsExtendedAdvertising() + { +#if NET6_0_OR_GREATER + if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsTvOSVersionAtLeast(13) || OperatingSystem.IsMacCatalystVersionAtLeast(13)) +#elif __IOS__ + if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(13, 0)) +#endif + { + return CBCentralManager.SupportsFeatures(CBCentralManagerFeature.ExtendedScanAndConnect); + } + else + { + return false; + } + } +#endif } } diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index 60ae1eb5..aa677585 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -356,5 +356,10 @@ public void HandleConnectionFail(IDevice device, string errorMessage) /// Returns a list of paired BLE devices for the given UUIDs. ///
public abstract IReadOnlyList GetKnownDevicesByIds(Guid[] ids); + + /// + /// Indicates whether extended advertising (BLE5) is supported. + /// + public virtual bool supportsExtendedAdvertising() => false; } } diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index 1ee06f90..f7dd2cfd 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -165,5 +165,11 @@ public interface IAdapter /// The list of UUIDs /// The known device. Empty list if no device known. IReadOnlyList GetKnownDevicesByIds(Guid[] ids); + + /// + /// Indicates whether extended advertising (BLE5) is supported. + /// + /// true if extended advertising is supported, otherwise false. + bool supportsExtendedAdvertising(); } } \ No newline at end of file From 94768bf1300f46a214d2536e5ea90e65a4b4abfa Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 21 Apr 2023 22:43:14 +0200 Subject: [PATCH 314/527] IAdapter: add method 'supportsCodedPHY' * and implement it on Android * on all other platforms it defaults to false --- Source/Plugin.BLE/Android/Adapter.cs | 16 ++++++++++++++++ Source/Plugin.BLE/Shared/AdapterBase.cs | 5 +++++ Source/Plugin.BLE/Shared/Contracts/IAdapter.cs | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index 213d7590..ab944682 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -290,6 +290,22 @@ public override bool supportsExtendedAdvertising() } } + public override bool supportsCodedPHY() + { +#if NET6_0_OR_GREATER + if (OperatingSystem.IsAndroidVersionAtLeast(26)) +#else + if (Build.VERSION.SdkInt >= BuildVersionCodes.O) +#endif + { + return _bluetoothAdapter.IsLeCodedPhySupported; + } + else + { + return false; + } + } + private class DeviceComparer : IEqualityComparer { diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index aa677585..8ea957af 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -361,5 +361,10 @@ public void HandleConnectionFail(IDevice device, string errorMessage) /// Indicates whether extended advertising (BLE5) is supported. ///
public virtual bool supportsExtendedAdvertising() => false; + + /// + /// Indicates whether the Coded PHY feature (BLE5) is supported. + /// + public virtual bool supportsCodedPHY() => false; } } diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index f7dd2cfd..492f39f8 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -171,5 +171,11 @@ public interface IAdapter ///
/// true if extended advertising is supported, otherwise false. bool supportsExtendedAdvertising(); + + /// + /// Indicates whether the Coded PHY feature (BLE5) is supported. + /// + /// true if extended advertising is supported, otherwise false. + bool supportsCodedPHY(); } } \ No newline at end of file From 0350e577dcc5196df6d348e6fe32256b504cd0c5 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 30 Apr 2023 22:39:37 +0200 Subject: [PATCH 315/527] work around package restoration issues with VS for Mac * by removing BLE.Client.* projects from BLE.Mac.slnf --- Source/BLE.Mac.slnf | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Source/BLE.Mac.slnf b/Source/BLE.Mac.slnf index c3b67bc2..dce79361 100644 --- a/Source/BLE.Mac.slnf +++ b/Source/BLE.Mac.slnf @@ -5,10 +5,7 @@ "Plugin.BLE\\Plugin.BLE.csproj", "Plugin.BLE.Tests\\Plugin.BLE.Tests.csproj", "MvvmCross.Plugins.BLE\\MvvmCross.Plugins.BLE.csproj", - "BLE.Client\\BLE.Client\\BLE.Client.csproj", - "BLE.Client\\BLE.Client.Droid\\BLE.Client.Droid.csproj", - "BLE.Client\\BLE.Client.iOS\\BLE.Client.iOS.csproj", - "BLE.Client\\BLE.Client.macOS\\BLE.Client.macOS.csproj" + "BLE.Client\\BLE.Client\\BLE.Client.csproj" ] } } From a70ad5cbb376ae8fa168c54f5a2b76f8170fa008 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 30 Apr 2023 23:03:03 +0200 Subject: [PATCH 316/527] work around build problems with VS for Mac * by building the Xamarin targets only on Windows --- Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj | 4 ++-- Source/Plugin.BLE/Plugin.BLE.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj index e59fcb83..7505b181 100644 --- a/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj +++ b/Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj @@ -1,7 +1,7 @@  - MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;net6.0-android;net6.0-ios;net6.0-maccatalyst;net7.0-android;net7.0-ios;net7.0-maccatalyst - $(TargetFrameworks);uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 + net6.0-android;net6.0-ios;net6.0-maccatalyst;net7.0-android;net7.0-ios;net7.0-maccatalyst + $(TargetFrameworks);MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 MVVMCross.Plugins.BLE MVVMCross.Plugins.BLE 3.0.0-beta.3 diff --git a/Source/Plugin.BLE/Plugin.BLE.csproj b/Source/Plugin.BLE/Plugin.BLE.csproj index 83e8a5d3..da99c81f 100644 --- a/Source/Plugin.BLE/Plugin.BLE.csproj +++ b/Source/Plugin.BLE/Plugin.BLE.csproj @@ -1,7 +1,7 @@  - netstandard2.0;MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;net6.0-android;net6.0-ios;net6.0-maccatalyst;net7.0-android;net7.0-ios;net7.0-maccatalyst - $(TargetFrameworks);uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 + netstandard2.0;net6.0-android;net6.0-ios;net6.0-maccatalyst;net7.0-android;net7.0-ios;net7.0-maccatalyst + $(TargetFrameworks);MonoAndroid10.0;Xamarin.iOS10;Xamarin.Mac20;uap10.0.19041;net6.0-windows10.0.19041;net7.0-windows10.0.19041 Plugin.BLE Plugin.BLE 3.0.0-beta.3 From e56afb46496c6d7ac6bb5be082f8ba7978074150 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 1 May 2023 22:42:12 +0200 Subject: [PATCH 317/527] GitHub Actions: add a Mac build --- .github/workflows/dotnet.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 3122a6df..40662c8a 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -9,7 +9,8 @@ on: workflow_dispatch: jobs: - build: + + winBuild: runs-on: windows-latest steps: - uses: actions/checkout@v3 @@ -67,3 +68,24 @@ jobs: with: name: nupkg path: ./Source/*/nuget/*Plugin.BLE*.nupkg + + macBuild: + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: nuget/setup-nuget@v1 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 7.0.x + - name: Install .NET MAUI + run: | + dotnet nuget locals all --clear + dotnet workload install maui --source https://aka.ms/dotnet6/nuget/index.json --source https://api.nuget.org/v3/index.json + dotnet workload install android ios maccatalyst tvos macos maui wasm-tools maui-maccatalyst --source https://aka.ms/dotnet6/nuget/index.json --source https://api.nuget.org/v3/index.json + - name: Build Plugin.BLE NuGet + run: dotnet build ./Source/Plugin.BLE/Plugin.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false + - name: Build MVVMCross.Plugins.BLE NuGet + run: dotnet build ./Source/MvvmCross.Plugins.BLE/MvvmCross.Plugins.BLE.csproj /p:Configuration=Release /t:restore,build,pack /p:Version=$(git describe) /p:ContinuousIntegrationBuild=true /p:DeterministicSourcePaths=false From d0b71a7ef64e99ed10714d5f140cced20d6d2002 Mon Sep 17 00:00:00 2001 From: mos Date: Wed, 10 May 2023 16:37:07 +0200 Subject: [PATCH 318/527] Added IsConnectable and CanIsConnectable to IDevice. Removed old handling of IsConnectable in the apple case. Only Android versions < Lollipop do not support IsConnectable. --- .../BLE.Client.Droid/BLE.Client.Droid.csproj | 4 +++- Source/Plugin.BLE/Android/Adapter.cs | 9 ++++----- .../BondStatusBroadcastReceiver.cs | 2 +- Source/Plugin.BLE/Android/Device.cs | 9 ++++++++- Source/Plugin.BLE/Apple/Adapter.cs | 12 ++++++++---- Source/Plugin.BLE/Apple/Device.cs | 10 ++++++++-- Source/Plugin.BLE/Shared/AdvertisementRecord.cs | 3 ++- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 13 +++++++++++++ Source/Plugin.BLE/Shared/DeviceBase.cs | 4 ++++ Source/Plugin.BLE/Windows/Adapter.cs | 2 +- Source/Plugin.BLE/Windows/Device.cs | 7 ++++++- 11 files changed, 58 insertions(+), 17 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index 0827c8b1..d10c96d8 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -96,6 +96,8 @@ {83f1dffb-a653-45dd-be81-c02374c6db07} MvvmCross.Plugins.BLE + Android + false {951ed11d-d026-449c-90dc-5027bc41fb3b} @@ -139,4 +141,4 @@ - + \ No newline at end of file diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index ab944682..f464ab59 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -247,7 +247,7 @@ protected override void DisconnectDeviceNative(IDevice device) var macBytes = deviceGuid.ToByteArray().Skip(10).Take(6).ToArray(); var nativeDevice = _bluetoothAdapter.GetRemoteDevice(macBytes); - var device = new Device(this, nativeDevice, null, 0, new byte[] { }); + var device = new Device(this, nativeDevice, null); await ConnectToDeviceAsync(device, connectParameters, cancellationToken); return device; @@ -265,7 +265,7 @@ public override IReadOnlyList GetSystemConnectedOrPairedDevices(Guid[] var bondedDevices = _bluetoothAdapter.BondedDevices.Where(d => d.Type == BluetoothDeviceType.Le || d.Type == BluetoothDeviceType.Dual); - return connectedDevices.Union(bondedDevices, new DeviceComparer()).Select(d => new Device(this, d, null, 0)).Cast().ToList(); + return connectedDevices.Union(bondedDevices, new DeviceComparer()).Select(d => new Device(this, d, null)).Cast().ToList(); } public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) @@ -334,11 +334,10 @@ public void OnLeScan(BluetoothDevice bleDevice, int rssi, byte[] scanRecord) { Trace.Message("Adapter.LeScanCallback: " + bleDevice.Name); - _adapter.HandleDiscoveredDevice(new Device(_adapter, bleDevice, null, rssi, scanRecord)); + _adapter.HandleDiscoveredDevice(new Device(_adapter, bleDevice, null, rssi, scanRecord)); // No IsConnectable! } } - public class Api21BleScanCallback : ScanCallback { private readonly Adapter _adapter; @@ -384,7 +383,7 @@ public override void OnScanResult(ScanCallbackType callbackType, ScanResult resu records.Add(new AdvertisementRecord(AdvertisementRecordType.ServiceData, result.ScanRecord.ServiceData)); }*/ - var device = new Device(_adapter, result.Device, null, result.Rssi, result.ScanRecord.GetBytes()); + var device = new Device(_adapter, result.Device, null, result.Rssi, result.ScanRecord.GetBytes(), result.IsConnectable); //Device device; //if (result.ScanRecord.ManufacturerSpecificData.Size() > 0) diff --git a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs index ecffedcf..96bba489 100644 --- a/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs +++ b/Source/Plugin.BLE/Android/BroadcastReceivers/BondStatusBroadcastReceiver.cs @@ -16,7 +16,7 @@ public override void OnReceive(Context context, Intent intent) { var bondState = (Bond)intent.GetIntExtra(BluetoothDevice.ExtraBondState, (int)Bond.None); //ToDo - var device = new Device(null, (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice), null, 0); + var device = new Device(null, (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice), null); Console.WriteLine(bondState.ToString()); if (BondStateChanged == null) return; diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index 6e9bc320..be8cc7c8 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -40,11 +40,13 @@ public class Device : DeviceBase ///
public ConnectParameters ConnectParameters { get; private set; } - public Device(Adapter adapter, BluetoothDevice nativeDevice, BluetoothGatt gatt, int rssi, byte[] advertisementData = null) : base(adapter, nativeDevice) + public Device(Adapter adapter, BluetoothDevice nativeDevice, BluetoothGatt gatt, int rssi = 0, byte[] advertisementData = null, bool isConnectable = true) + : base(adapter, nativeDevice) { Update(nativeDevice, gatt); Rssi = rssi; AdvertisementRecords = ParseScanRecord(advertisementData); + IsConnectable = isConnectable; _gattCallback = new GattCallback(adapter, this); } @@ -412,5 +414,10 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv throw new Exception($"Update Connection Interval fails with error. {ex.Message}"); } } + + public override bool IsConnectable { get; protected set; } + + public override bool CanIsConnectable { get => (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop); } + } } diff --git a/Source/Plugin.BLE/Apple/Adapter.cs b/Source/Plugin.BLE/Apple/Adapter.cs index aeb04865..98b18a5f 100644 --- a/Source/Plugin.BLE/Apple/Adapter.cs +++ b/Source/Plugin.BLE/Apple/Adapter.cs @@ -39,8 +39,9 @@ public Adapter(CBCentralManager centralManager, IBleCentralManagerDelegate bleCe name = ((NSString)e.AdvertisementData.ValueForKey(CBAdvertisement.DataLocalNameKey)).ToString(); } + var advertisingRecords = ParseAdvertismentData(e.AdvertisementData, out bool isConnectable); var device = new Device(this, e.Peripheral, _bleCentralManagerDelegate, name, e.RSSI.Int32Value, - ParseAdvertismentData(e.AdvertisementData)); + advertisingRecords, isConnectable); HandleDiscoveredDevice(device); }; @@ -310,9 +311,10 @@ private static bool ContainsDevice(IEnumerable list, CBPeripheral devic return list.Any(d => Guid.ParseExact(device.Identifier.AsString(), "d") == d.Id); } - public static List ParseAdvertismentData(NSDictionary advertisementData) + public static List ParseAdvertismentData(NSDictionary advertisementData, out bool isConnectable) { var records = new List(); + isConnectable = true; /*var keys = new List { @@ -410,8 +412,10 @@ public static List ParseAdvertismentData(NSDictionary adver { // A Boolean value that indicates whether the advertising event type is connectable. // The value for this key is an NSNumber object. You can use this value to determine whether a peripheral is connectable at a particular moment. - records.Add(new AdvertisementRecord(AdvertisementRecordType.IsConnectable, - new byte[] { ((NSNumber)advertisementData.ObjectForKey(key)).ByteValue })); + // obsolete + // records.Add(new AdvertisementRecord(AdvertisementRecordType.IsConnectable, + // new byte[] { ((NSNumber)advertisementData.ObjectForKey(key)).ByteValue })); + isConnectable = ((NSNumber)advertisementData.ObjectForKey(key)).ByteValue != 0; } else { diff --git a/Source/Plugin.BLE/Apple/Device.cs b/Source/Plugin.BLE/Apple/Device.cs index ff43337e..aefa2638 100644 --- a/Source/Plugin.BLE/Apple/Device.cs +++ b/Source/Plugin.BLE/Apple/Device.cs @@ -16,11 +16,11 @@ public class Device : DeviceBase public Device(Adapter adapter, CBPeripheral nativeDevice, IBleCentralManagerDelegate bleCentralManagerDelegate) : this(adapter, nativeDevice, bleCentralManagerDelegate, nativeDevice.Name, nativeDevice.RSSI?.Int32Value ?? 0, - new List()) + new List(), true) { } - public Device(Adapter adapter, CBPeripheral nativeDevice, IBleCentralManagerDelegate bleCentralManagerDelegate, string name, int rssi, List advertisementRecords) + public Device(Adapter adapter, CBPeripheral nativeDevice, IBleCentralManagerDelegate bleCentralManagerDelegate, string name, int rssi, List advertisementRecords, bool isConnectable = true) : base(adapter, nativeDevice) { _bleCentralManagerDelegate = bleCentralManagerDelegate; @@ -30,6 +30,7 @@ public Device(Adapter adapter, CBPeripheral nativeDevice, IBleCentralManagerDele Rssi = rssi; AdvertisementRecords = advertisementRecords; + IsConnectable = isConnectable; // TODO figure out if this is in any way required, // https://github.com/xabre/xamarin-bluetooth-le/issues/81 @@ -172,5 +173,10 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv Trace.Message("Cannot update connection inteval on iOS."); return false; } + + public override bool IsConnectable { get; protected set; } + + public override bool CanIsConnectable { get => true; } + } } diff --git a/Source/Plugin.BLE/Shared/AdvertisementRecord.cs b/Source/Plugin.BLE/Shared/AdvertisementRecord.cs index 2725856f..6372fa07 100644 --- a/Source/Plugin.BLE/Shared/AdvertisementRecord.cs +++ b/Source/Plugin.BLE/Shared/AdvertisementRecord.cs @@ -178,7 +178,8 @@ public enum AdvertisementRecordType /// /// The is connectable flag. This is only reliable for the ios imlementation. The android stack does not expose this in the client. /// - IsConnectable = 0xAA + // obsolete + // IsConnectable = 0xAA } /// diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index dc859054..555c70ff 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -106,5 +106,18 @@ public interface IDevice : IDisposable /// True if the update request was sucessfull. On iOS it will always return false. /// The requested interval (High/Low/Normal) bool UpdateConnectionInterval(ConnectionInterval interval); + + + /// + /// Gets the information if the device has hinted during advertising that the device is connectable. + /// This information is not pat of an advertising record. It's determined from the PDU header. + /// Check CanIsConnectable to verify that the device supports IsConnectable. + /// + bool IsConnectable { get; } + + /// + /// True, if device supports IsConnectable else False + /// + bool CanIsConnectable { get; } } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index 8bba0012..d7d78e16 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -250,5 +250,9 @@ public override int GetHashCode() { return Id.GetHashCode(); } + + public abstract bool IsConnectable { get; protected set; } + + public abstract bool CanIsConnectable { get; } } } diff --git a/Source/Plugin.BLE/Windows/Adapter.cs b/Source/Plugin.BLE/Windows/Adapter.cs index 6a03b700..88e18ac9 100644 --- a/Source/Plugin.BLE/Windows/Adapter.cs +++ b/Source/Plugin.BLE/Windows/Adapter.cs @@ -174,7 +174,7 @@ private async void DeviceFoundAsync(BluetoothLEAdvertisementWatcher watcher, Blu var bluetoothLeDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); if (bluetoothLeDevice != null) //make sure advertisement bluetooth address actually returns a device { - device = new Device(this, bluetoothLeDevice, btAdv.RawSignalStrengthInDBm, deviceId, _dq, ParseAdvertisementData(btAdv.Advertisement)); + device = new Device(this, bluetoothLeDevice, btAdv.RawSignalStrengthInDBm, deviceId, _dq, ParseAdvertisementData(btAdv.Advertisement), btAdv.IsConnectable); Trace.Message("DiscoveredPeripheral: {0} Id: {1}, Rssi: {2}", device.Name, device.Id, btAdv.RawSignalStrengthInDBm); this.HandleDiscoveredDevice(device); } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 04dd8fb5..0b0122bf 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -19,13 +19,14 @@ namespace Plugin.BLE.UWP { public class Device : DeviceBase { - public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id, DispatcherQueue dq, IReadOnlyList advertisementRecords = null) + public Device(Adapter adapter, BluetoothLEDevice nativeDevice, int rssi, Guid id, DispatcherQueue dq, IReadOnlyList advertisementRecords = null, bool isConnectable = true) : base(adapter, new ObservableBluetoothLEDevice(nativeDevice.DeviceInformation, dq)) { Rssi = rssi; Id = id; Name = nativeDevice.Name; AdvertisementRecords = advertisementRecords; + IsConnectable = isConnectable; } internal void Update(short btAdvRawSignalStrengthInDBm, IReadOnlyList advertisementData) @@ -100,5 +101,9 @@ public override void Dispose() NativeDevice.BluetoothLEDevice?.Dispose(); GC.Collect(); } + + public override bool IsConnectable { get; protected set; } + + public override bool CanIsConnectable { get => true; } } } From 5f2c327ede75534913010b7695faae0bc9829e7b Mon Sep 17 00:00:00 2001 From: mos Date: Thu, 11 May 2023 09:19:57 +0200 Subject: [PATCH 319/527] Removed unexpected entries in BLE.Client.Droid.csproj. --- Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj index d10c96d8..acc71517 100644 --- a/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj +++ b/Source/BLE.Client/BLE.Client.Droid/BLE.Client.Droid.csproj @@ -96,8 +96,6 @@ {83f1dffb-a653-45dd-be81-c02374c6db07} MvvmCross.Plugins.BLE - Android - false {951ed11d-d026-449c-90dc-5027bc41fb3b} From 76ba8d47a477fe5ed65f1f82a64f2c6a9306b3dd Mon Sep 17 00:00:00 2001 From: mos Date: Sat, 13 May 2023 22:34:59 +0200 Subject: [PATCH 320/527] Renamed CanIsConnectable to SupportsIsConnectable. Switched check for api support of IsConnectable from Lollipop to api 26. --- Source/Plugin.BLE/Android/Adapter.cs | 9 ++++++++- Source/Plugin.BLE/Android/Device.cs | 10 +++++++++- Source/Plugin.BLE/Apple/Device.cs | 2 +- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 2 +- Source/Plugin.BLE/Shared/DeviceBase.cs | 2 +- Source/Plugin.BLE/Windows/Device.cs | 2 +- 6 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index f464ab59..8007cc58 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -383,7 +383,14 @@ public override void OnScanResult(ScanCallbackType callbackType, ScanResult resu records.Add(new AdvertisementRecord(AdvertisementRecordType.ServiceData, result.ScanRecord.ServiceData)); }*/ - var device = new Device(_adapter, result.Device, null, result.Rssi, result.ScanRecord.GetBytes(), result.IsConnectable); + var device = new Device(_adapter, result.Device, null, result.Rssi, result.ScanRecord.GetBytes(), +#if NET6_0_OR_GREATER + OperatingSystem.IsAndroidVersionAtLeast(26) +#else + (Build.VERSION.SdkInt >= BuildVersionCodes.O) +#endif + ? result.IsConnectable : true + ); ; //Device device; //if (result.ScanRecord.ManufacturerSpecificData.Size() > 0) diff --git a/Source/Plugin.BLE/Android/Device.cs b/Source/Plugin.BLE/Android/Device.cs index be8cc7c8..efb8468a 100644 --- a/Source/Plugin.BLE/Android/Device.cs +++ b/Source/Plugin.BLE/Android/Device.cs @@ -417,7 +417,15 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv public override bool IsConnectable { get; protected set; } - public override bool CanIsConnectable { get => (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop); } + + public override bool SupportsIsConnectable { + get => +#if NET6_0_OR_GREATER + OperatingSystem.IsAndroidVersionAtLeast(26); +#else + (Build.VERSION.SdkInt >= BuildVersionCodes.O); +#endif + } } } diff --git a/Source/Plugin.BLE/Apple/Device.cs b/Source/Plugin.BLE/Apple/Device.cs index aefa2638..246d2915 100644 --- a/Source/Plugin.BLE/Apple/Device.cs +++ b/Source/Plugin.BLE/Apple/Device.cs @@ -176,7 +176,7 @@ protected override bool UpdateConnectionIntervalNative(ConnectionInterval interv public override bool IsConnectable { get; protected set; } - public override bool CanIsConnectable { get => true; } + public override bool SupportsIsConnectable { get => true; } } } diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index 555c70ff..f8bb6c9c 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -118,6 +118,6 @@ public interface IDevice : IDisposable /// /// True, if device supports IsConnectable else False /// - bool CanIsConnectable { get; } + bool SupportsIsConnectable { get; } } } \ No newline at end of file diff --git a/Source/Plugin.BLE/Shared/DeviceBase.cs b/Source/Plugin.BLE/Shared/DeviceBase.cs index d7d78e16..2bacad88 100644 --- a/Source/Plugin.BLE/Shared/DeviceBase.cs +++ b/Source/Plugin.BLE/Shared/DeviceBase.cs @@ -253,6 +253,6 @@ public override int GetHashCode() public abstract bool IsConnectable { get; protected set; } - public abstract bool CanIsConnectable { get; } + public abstract bool SupportsIsConnectable { get; } } } diff --git a/Source/Plugin.BLE/Windows/Device.cs b/Source/Plugin.BLE/Windows/Device.cs index 0b0122bf..904cdc98 100644 --- a/Source/Plugin.BLE/Windows/Device.cs +++ b/Source/Plugin.BLE/Windows/Device.cs @@ -104,6 +104,6 @@ public override void Dispose() public override bool IsConnectable { get; protected set; } - public override bool CanIsConnectable { get => true; } + public override bool SupportsIsConnectable { get => true; } } } From 2e15fbe5da1664462044861a760454dc790e3af3 Mon Sep 17 00:00:00 2001 From: mos Date: Sat, 13 May 2023 23:20:25 +0200 Subject: [PATCH 321/527] Improved comment. --- Source/Plugin.BLE/Shared/Contracts/IDevice.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs index f8bb6c9c..89ddc700 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IDevice.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IDevice.cs @@ -111,7 +111,8 @@ public interface IDevice : IDisposable /// /// Gets the information if the device has hinted during advertising that the device is connectable. /// This information is not pat of an advertising record. It's determined from the PDU header. - /// Check CanIsConnectable to verify that the device supports IsConnectable. + /// Check SupportsIsConnectable to verify that the device supports IsConnectable. + /// If the device doesn't support IsConnectable then IsConnectable returns true. /// bool IsConnectable { get; } From 186becc53de1e876116dce2e2e8a0db050cfb1f7 Mon Sep 17 00:00:00 2001 From: mos Date: Mon, 15 May 2023 09:46:00 +0200 Subject: [PATCH 322/527] Basic support for bonding (missing CreateBond() and RemoveBond()) --- Source/Plugin.BLE/Android/Adapter.cs | 29 ++++++++++++------- Source/Plugin.BLE/Apple/Adapter.cs | 5 ++++ Source/Plugin.BLE/Shared/AdapterBase.cs | 24 +++++++++++++++ .../Plugin.BLE/Shared/Contracts/IAdapter.cs | 10 +++++++ Source/Plugin.BLE/Shared/Utils/FakeAdapter.cs | 5 ++++ Source/Plugin.BLE/Windows/Adapter.cs | 5 ++++ 6 files changed, 68 insertions(+), 10 deletions(-) diff --git a/Source/Plugin.BLE/Android/Adapter.cs b/Source/Plugin.BLE/Android/Adapter.cs index 8007cc58..61b30275 100644 --- a/Source/Plugin.BLE/Android/Adapter.cs +++ b/Source/Plugin.BLE/Android/Adapter.cs @@ -3,12 +3,15 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using Android.App; using Android.Bluetooth; using Android.Bluetooth.LE; +using Android.Content; using Android.OS; using Java.Util; using Plugin.BLE.Abstractions; using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.BroadcastReceivers; using Plugin.BLE.Extensions; using Object = Java.Lang.Object; using Trace = Plugin.BLE.Abstractions.Trace; @@ -27,17 +30,16 @@ public Adapter(BluetoothManager bluetoothManager) _bluetoothManager = bluetoothManager; _bluetoothAdapter = bluetoothManager.Adapter; + //bonding + var bondStatusBroadcastReceiver = new BondStatusBroadcastReceiver(); + Application.Context.RegisterReceiver(bondStatusBroadcastReceiver, + new IntentFilter(BluetoothDevice.ActionBondStateChanged)); - // TODO: bonding - //var bondStatusBroadcastReceiver = new BondStatusBroadcastReceiver(); - //Application.Context.RegisterReceiver(bondStatusBroadcastReceiver, - // new IntentFilter(BluetoothDevice.ActionBondStateChanged)); - - ////forward events from broadcast receiver - //bondStatusBroadcastReceiver.BondStateChanged += (s, args) => - //{ - // //DeviceBondStateChanged(this, args); - //}; + //forward events from broadcast receiver + bondStatusBroadcastReceiver.BondStateChanged += (s, args) => + { + HandleDeviceBondStateChanged(args); + }; if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { @@ -274,6 +276,13 @@ public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) return devices.Where(item => ids.Contains(item.Id)).ToList(); } + protected override IReadOnlyList GetBondedDevices() + { + var bondedDevices = _bluetoothAdapter.BondedDevices.Where(d => d.Type == BluetoothDeviceType.Le || d.Type == BluetoothDeviceType.Dual); + + return bondedDevices.Select(d => new Device(this, d, null, 0)).Cast().ToList(); + } + public override bool supportsExtendedAdvertising() { #if NET6_0_OR_GREATER diff --git a/Source/Plugin.BLE/Apple/Adapter.cs b/Source/Plugin.BLE/Apple/Adapter.cs index 98b18a5f..f9e1302d 100644 --- a/Source/Plugin.BLE/Apple/Adapter.cs +++ b/Source/Plugin.BLE/Apple/Adapter.cs @@ -292,6 +292,11 @@ public override IReadOnlyList GetKnownDevicesByIds(Guid[] ids) return nativeDevices.Select(d => new Device(this, d, _bleCentralManagerDelegate)).Cast().ToList(); } + protected override IReadOnlyList GetBondedDevices() + { + return null; // not supported + } + #if NET6_0_OR_GREATER || MACCATALYST private async Task WaitForState(CBManagerState state, CancellationToken cancellationToken, bool configureAwait = false) #else diff --git a/Source/Plugin.BLE/Shared/AdapterBase.cs b/Source/Plugin.BLE/Shared/AdapterBase.cs index 8ea957af..12d03db8 100644 --- a/Source/Plugin.BLE/Shared/AdapterBase.cs +++ b/Source/Plugin.BLE/Shared/AdapterBase.cs @@ -46,6 +46,10 @@ public abstract class AdapterBase : IAdapter /// public event EventHandler DeviceConnectionError; /// + /// Occurs when the bonding state of a device changed. + /// + public event EventHandler DeviceBondStateChanged; + /// /// Occurs when the scan has been stopped due the timeout after ms. /// public event EventHandler ScanTimeoutElapsed; @@ -97,6 +101,11 @@ public bool IsScanning ///
public IReadOnlyList ConnectedDevices => ConnectedDeviceRegistry.Values.ToList(); + /// + /// List of all bonded devices (or null if the device does not support this information). + /// + public IReadOnlyList BondedDevices => GetBondedDevices(); + /// /// Starts scanning for BLE devices that fulfill the . /// DeviceDiscovered will only be called, if returns true for the discovered device. @@ -327,6 +336,15 @@ public void HandleConnectionFail(IDevice device, string errorMessage) }); } + /// + /// Handle bond state changed information. + /// + /// + protected void HandleDeviceBondStateChanged(DeviceBondStateChangedEventArgs args) + { + DeviceBondStateChanged?.Invoke(this, args); + } + /// /// Native implementation of StartScanningForDevicesAsync. /// @@ -356,6 +374,12 @@ public void HandleConnectionFail(IDevice device, string errorMessage) /// Returns a list of paired BLE devices for the given UUIDs. /// public abstract IReadOnlyList GetKnownDevicesByIds(Guid[] ids); + /// + /// Returns all BLE device bonded to the system. + /// + /// + protected abstract IReadOnlyList GetBondedDevices(); + /// /// Indicates whether extended advertising (BLE5) is supported. diff --git a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs index 492f39f8..42d2a77d 100644 --- a/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs +++ b/Source/Plugin.BLE/Shared/Contracts/IAdapter.cs @@ -38,6 +38,10 @@ public interface IAdapter /// event EventHandler DeviceConnectionError; /// + /// Occurs when the bonding state of a device changed + /// + event EventHandler DeviceBondStateChanged; + /// /// Occurs when the scan has been stopped due the timeout after ms. /// event EventHandler ScanTimeoutElapsed; @@ -76,6 +80,12 @@ public interface IAdapter ///