registerServices static method

Future<void> registerServices()

Register the platform services availability callback with C++. Matches Swift's CppBridge.Platform.register() callback wiring for Foundation Models / System TTS / System STT availability checks.

Implementation

static Future<void> registerServices() async {
  if (_servicesRegistered) return;

  try {
    final lib = PlatformLoader.loadCommons();

    final registerCallback = lib
        .lookupFunction<
          Int32 Function(
            Pointer<NativeFunction<Int32 Function(Int32, Pointer<Void>)>>,
          ),
          int Function(
            Pointer<NativeFunction<Int32 Function(Int32, Pointer<Void>)>>,
          )
        >('rac_platform_services_register_availability_callback');

    _servicesAvailabilityCallback ??=
        Pointer.fromFunction<_PlatformServiceAvailabilityCallbackNative>(
          _platformServiceAvailabilityCallback,
          _exceptionalReturnFalse,
        );

    final result = registerCallback(_servicesAvailabilityCallback!);
    if (result != RacResultCode.success) {
      _logger.warning(
        'Failed to register platform services availability callback',
        metadata: {'error_code': result},
      );
      return;
    }

    _servicesRegistered = true;
    _logger.debug('Platform services registered');
  } catch (_) {
    // librac_commons.so may not export
    // rac_platform_services_register_availability_callback in some
    // configurations (B-FL-1-002). Log at warning so it's visible in
    // non-debug builds, then mark as registered to avoid retry.
    _logger.warning('Platform services registration not available');
    _servicesRegistered = true;
  }
}