@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
	private boolean internalRemoveBond() {
		final BluetoothDevice device = bluetoothDevice;
		if (device == null)
			return false;

		log(Log.VERBOSE, () -> "Removing bond information...");

		if (device.getBondState() == BluetoothDevice.BOND_NONE) {
			log(Log.WARN, () -> "Device is not bonded");
			request.notifySuccess(device);
			nextRequest(true);
			return true;
		}

		/*
		 * There is a removeBond() method in BluetoothDevice class but for now it's hidden.
		 * We will call it using reflections.
		 */
		try {
			//noinspection JavaReflectionMemberAccess
			final Method removeBond = device.getClass().getMethod("removeBond");
			log(Log.DEBUG, () -> "device.removeBond() (hidden)");
			// Removing a call will initiate disconnection.
			userDisconnected = true;
			return removeBond.invoke(device) == Boolean.TRUE;
		} catch (final Exception e) {
			Log.w(TAG, "An exception occurred while removing bond", e);
		}
		return false;
	}
Returns the value of the server descriptor. For descriptor that are not shared,
the value may be different for each connected device.

@param serverDescriptor The descriptor to get value of.
@return The value.
ble/src/main/java/no/nordicsemi/android/ble/BleManagerHandler.java