private boolean internalExecuteReliableWrite() {
		final BluetoothGatt gatt = bluetoothGatt;
		if (gatt == null || !connected)
			return false;

		if (!reliableWriteInProgress)
			return false;

		log(Log.VERBOSE, () -> "Executing reliable write...");
		log(Log.DEBUG, () -> "gatt.executeReliableWrite()");
		try {
			return gatt.executeReliableWrite();
		} catch (final SecurityException e) {
			log(Log.ERROR, e::getLocalizedMessage);
			return false;
		}
	}
There was a bug in Android up to 6.0 where the descriptor was written using parent
characteristic's write type, instead of always Write With Response, as the spec says.
<p>
See: <a href="https://android.googlesource.com/platform/frameworks/base/+/942aebc95924ab1e7ea1e92aaf4e7fc45f695a6c%5E%21/#F0">
https://android.googlesource.com/platform/frameworks/base/+/942aebc95924ab1e7ea1e92aaf4e7fc45f695a6c%5E%21/#F0</a>

@param descriptor the descriptor to be written
@return the result of {@link BluetoothGatt#writeDescriptor(BluetoothGattDescriptor)}
ble/src/main/java/no/nordicsemi/android/ble/BleManagerHandler.java