private boolean assignAndNotify(@NonNull final BluetoothDevice device,
									@NonNull final BluetoothGattDescriptor descriptor,
									@NonNull final byte[] value) {
		assign(descriptor, value);
		// Notify listener
		ValueChangedCallback callback;
		if ((callback = valueChangedCallbacks.get(descriptor)) != null) {
			callback.notifyValueChanged(device, value);
		}

		// Check if a request awaits,
		if (awaitingRequest instanceof final WaitForValueChangedRequest waitForWrite
				// is registered for this descriptor
				&& awaitingRequest.descriptor == descriptor
				// and didn't have a trigger, or the trigger was started
				// (not necessarily completed)
				&& !awaitingRequest.isTriggerPending()) {
			if (waitForWrite.matches(value)) {
				// notify that new data was received.
				waitForWrite.notifyValueChanged(device, value);

				// If no more data are expected
				if (waitForWrite.isComplete()) {
					// notify success,
					waitForWrite.notifySuccess(device);
					// and proceed to the next request only if the trigger has completed.
					// Otherwise, the next request will be started when the request's callback
					// will be received.
					awaitingRequest = null;
					return waitForWrite.isTriggerCompleteOrNull();
				}
			}
		}
		return false;
	}
Callback indicating the connection parameters were updated. Works on Android 8+.

@param gatt     GATT client involved.
@param interval Connection interval used on this connection, 1.25ms unit.
                Valid range is from 6 (7.5ms) to 3200 (4000ms).
@param latency  Slave latency for the connection in number of connection events.
                Valid range is from 0 to 499.
@param timeout  Supervision timeout for this connection, in 10ms unit.
                Valid range is from 10 (0.1s) to 3200 (32s)
@param status   {@link BluetoothGatt#GATT_SUCCESS} if the connection has been updated
                successfully.
ble/src/main/java/no/nordicsemi/android/ble/BleManagerHandler.java