pairWithQr static method

Future<AdbPairingResult> pairWithQr(
  1. AdbQrPairingData qr,
  2. AdbCrypto crypto, {
  3. Duration discoveryTimeout = const Duration(seconds: 30),
  4. Duration pairingTimeout = const Duration(seconds: 30),
  5. bool verbose = false,
})

Pair with an Android device using the Android Studio style QR flow.

Implementation

static Future<AdbPairingResult> pairWithQr(
  AdbQrPairingData qr,
  AdbCrypto crypto, {
  Duration discoveryTimeout = const Duration(seconds: 30),
  Duration pairingTimeout = const Duration(seconds: 30),
  bool verbose = false,
}) async {
  final discovery = AdbMdnsServiceDiscovery();
  final pairingService = await discovery.resolvePairingService(
    qr.serviceName,
    timeout: discoveryTimeout,
  );
  if (pairingService == null) {
    if (verbose) {
      print('Timed out waiting for QR pairing service ${qr.serviceName}');
    }
    return const AdbPairingResult(
      success: false,
      errorMessage: 'Timed out waiting for the requested QR pairing service',
    );
  }

  final pairingEndpoint = _endpointFromDiscoveredService(pairingService);
  final pairResult = await _pairAtEndpoint(
    pairingService.preferredHost,
    pairingService.port,
    qr.password,
    crypto,
    verbose: verbose,
    pairingEndpoint: pairingEndpoint,
  ).timeout(
    pairingTimeout,
    onTimeout: () => AdbPairingResult(
      success: false,
      pairingEndpoint: pairingEndpoint,
      errorMessage: 'Pairing timed out',
    ),
  );

  if (!pairResult.success) {
    return pairResult;
  }

  final connectService = await discovery.resolveConnectService(
    deviceGuid: pairResult.deviceGuid,
    preferredAddress: pairingService.preferredAddress,
    timeout: discoveryTimeout,
  );

  return pairResult.copyWith(
    connectEndpoint: connectService == null
        ? null
        : _endpointFromDiscoveredService(connectService),
  );
}