cockpitProbeAndroidDeviceState function

Future<CockpitAndroidDeviceProbeResult> cockpitProbeAndroidDeviceState(
  1. CockpitProcessManager processManager,
  2. String deviceId, {
  3. required Duration timeout,
})

Implementation

Future<CockpitAndroidDeviceProbeResult> cockpitProbeAndroidDeviceState(
  CockpitProcessManager processManager,
  String deviceId, {
  required Duration timeout,
}) async {
  try {
    final result = await processManager
        .run('adb', <String>['-s', deviceId, 'get-state'])
        .timeout(timeout);
    final state = _processOutputText(result.stdout).trim();
    if (result.exitCode == 0 && state == 'device') {
      return CockpitAndroidDeviceProbeResult.reachable(state);
    }
    final stderr = _processOutputText(result.stderr).trim();
    return CockpitAndroidDeviceProbeResult.blocked(
      state: state.isEmpty ? null : state,
      failureReason: stderr.isEmpty ? 'adbDeviceNotReady' : stderr,
    );
  } on TimeoutException {
    return const CockpitAndroidDeviceProbeResult.blocked(
      failureReason: 'adbDeviceProbeTimedOut',
    );
  } on ProcessException catch (error) {
    return CockpitAndroidDeviceProbeResult.blocked(
      failureReason: error.message.isEmpty ? 'adbUnavailable' : error.message,
    );
  } on Object catch (error) {
    return CockpitAndroidDeviceProbeResult.blocked(failureReason: '$error');
  }
}