Skip to content

Problem if there are multiple Callback parameters #44

Description

@JSUYA

The app_control_send_launch_request_async() API has two callback parameters.

  int app_control_send_launch_request_async(
    app_control_h app_control,
    app_control_result_cb result_cb,
    app_control_reply_cb reply_cb,
    ffi.Pointer<ffi.Void> user_data,
  ) {
    return _app_control_send_launch_request_async(
      app_control,
      result_cb,
      reply_cb,
      user_data,
    );
  }

If this API is implemented using tizen_interop_callbacks, only one interopUserData can be set.
Additionally, I checked that only the Callback with interopUserData set is invoked.

import 'dart:ffi';
import 'package:tizen_interop/9.0/tizen.dart';
import 'package:tizen_interop_callbacks/tizen_interop_callbacks.dart';

  static final TizenInteropCallbacks _callbacks = TizenInteropCallbacks();

  static void _resultCallback(
    app_control_h request,
    int result,
    Pointer<Void> user_data,
  ) {
    debugPrint(
      '_resultCallback result=${tizen.get_error_message(result).toDartString()}',
    );
  }

  static void _replyCallback(
    app_control_h request,
    app_control_h reply,
    int result,
    Pointer<Void> user_data,
  ) {
    debugPrint('_replyCallback result=$result');
  }

  static Future<bool> launch(String appId) async {
    return using((Arena arena) {
      final appControlPtr = arena<app_control_h>();
      int ret = tizen.app_control_create(appControlPtr);
      if (ret != 0) {
        debugPrint(
          'Failed to app_control_create: ret=$ret, ${tizen.get_error_message(ret).toDartString()}',
        );
      }

      tizen.app_control_set_operation(
        appControlPtr.value,
        APP_CONTROL_OPERATION_DEFAULT.toNativeChar(allocator: arena),
      );
      tizen.app_control_set_app_id(
        appControlPtr.value,
        appId.toNativeChar(allocator: arena),
      );

      final resultCallback = _callbacks.register<app_control_result_cbFunction>(
        'app_control_result_cb',
        Pointer.fromFunction(_resultCallback),
        userObject: nullptr,
        blocking: false,
      );

      final replyCallback = _callbacks.register<app_control_reply_cbFunction>(
        'app_control_reply_cb',
        Pointer.fromFunction(_replyCallback),
        userObject: nullptr,
        blocking: false,
      );

      ret = tizen.app_control_send_launch_request_async(
        appControlPtr.value,
        resultCallback.interopCallback,
        replyCallback.interopCallback,
        resultCallback.interopUserData,  // Only called resultCallback
        // replyCallback.interopUserData,  // Only called replyCallback
      );

      debugPrint(
        'app_control_send_launch_request_async: ret=$ret, ${tizen.get_error_message(ret).toDartString()}',
      );

      return true;
    });
  }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions