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;
});
}
The app_control_send_launch_request_async() API has two callback parameters.
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.