}
return ret;
}
+
+int ma_set_preprocessing_allow_mode(ma_preprocessing_allow_mode_e mode, const char* app_id)
+{
+ SLOG(LOG_DEBUG, TAG_MAC, "[Manager] Set preprocessing allow mode");
+
+ if (0 != __ma_get_feature_enabled()) {
+ SLOG(LOG_DEBUG, TAG_MAC, "@@@ [Manager] not supported");
+ return MA_ERROR_NOT_SUPPORTED;
+ }
+
+ if (0 != __ma_check_privilege()) {
+ return MA_ERROR_PERMISSION_DENIED;
+ }
+
+ ma_state_e state;
+ if (0 != ma_client_get_client_state(g_ma, &state)) {
+ SLOG(LOG_ERROR, TAG_MAC, "[ERROR] A handle is not available");
+ SLOG(LOG_DEBUG, TAG_MAC, "@@@");
+ return MA_ERROR_INVALID_STATE;
+ }
+
+ /* check state */
+ if (state != MA_STATE_READY) {
+ SLOG(LOG_ERROR, TAG_MAC, "[ERROR] Invalid State: Current state is not 'READY', state(%d)", state);
+ SLOG(LOG_DEBUG, TAG_MAC, "@@@");
+ return MA_ERROR_INVALID_STATE;
+ }
+
+ /* change system volume */
+ int pid = getpid();
+ int ret = ma_dbus_set_preprocessing_allow_mode(pid, mode, app_id);
+ if (0 != ret) {
+ SLOG(LOG_WARN, TAG_MAC, "[WARNING] retry to change volume");
+ } else {
+ SLOG(LOG_DEBUG, TAG_MAC, "[DEBUG] Success to send");
+ }
+ return ret;
+}
return 0;
}
+
+int ma_dbus_set_preprocessing_allow_mode(int pid, ma_preprocessing_allow_mode_e mode, const char *app_id)
+{
+ if (0 != __dbus_check()) {
+ return MA_ERROR_OPERATION_FAILED;
+ }
+
+ DBusMessage* msg;
+
+ msg = dbus_message_new_method_call(
+ MA_SERVER_SERVICE_NAME,
+ MA_SERVER_SERVICE_OBJECT_PATH,
+ MA_SERVER_SERVICE_INTERFACE,
+ MA_METHOD_SET_PREPROCESSING_ALLOW_MODE);
+
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_MAC, "@@ Request multi-assistant change system volume : Fail to make message"); //LCOV_EXCL_LINE
+ return MA_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, TAG_MAC, "[DEBUG] multi-assistant change system volume");
+ }
+
+ char* tmp_app_id = NULL;
+ if (NULL != app_id) {
+ tmp_app_id = strdup(app_id);
+ } else {
+ tmp_app_id = strdup("#NULL");
+ }
+
+ dbus_message_append_args(msg,
+ DBUS_TYPE_INT32, &pid,
+ DBUS_TYPE_INT32, &mode,
+ DBUS_TYPE_STRING, &tmp_app_id,
+ DBUS_TYPE_INVALID);
+
+ dbus_message_set_no_reply(msg, TRUE);
+
+ DBusError error;
+ dbus_error_init (&error);
+ if (!dbus_connection_send(g_conn_sender, msg, NULL)) {
+
+ if (dbus_error_is_set (&error)) {
+ SLOG(LOG_ERROR, TAG_MAC, "[Dbus ERROR] Fail to Send : %s", error.message); //LCOV_EXCL_LINE
+ dbus_error_free (&error);
+ } else {
+ SLOG(LOG_ERROR, TAG_MAC, "[Dbus ERROR] Fail to Send"); //LCOV_EXCL_LINE
+ }
+ if (NULL != tmp_app_id) {
+ free(tmp_app_id);
+ tmp_app_id = NULL;
+ }
+ return MA_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, TAG_MAC, "[Dbus DEBUG] Success to Send");
+ dbus_connection_flush(g_conn_sender);
+ }
+
+ dbus_message_unref(msg);
+
+ if (NULL != tmp_app_id) {
+ free(tmp_app_id);
+ tmp_app_id = NULL;
+ }
+
+ return 0;
+}
int ma_dbus_set_background_volume(int pid, double ratio);
+int ma_dbus_set_preprocessing_allow_mode(int pid, ma_preprocessing_allow_mode_e mode, const char *app_id);
+
#ifdef __cplusplus
}
#endif
#define MA_METHOD_UPDATE_VOICE_FEEDBACK_STATE "ma_method_update_voice_feedback_state"
#define MA_METHOD_SEND_ASSISTANT_SPECIFIC_COMMAND "ma_method_send_assistant_specific_command"
#define MA_METHOD_SET_BACKGROUND_VOLUME "ma_method_set_background_volume"
+#define MA_METHOD_SET_PREPROCESSING_ALLOW_MODE "ma_method_set_preprocessing_allow_mode"
#define MA_METHOD_ERROR "ma_method_error"
#define MA_UI_METHOD_INITIALIZE "ma_ui_method_initialize"
*/
int ma_set_background_volume(double ratio);
+/**
+ * @brief Sets the preprocessing allow mode.
+ * @since_tizen 5.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/recorder
+ *
+ * @remarks If the @a app_id is NULL, allow mode will be applied regardless of app_id.
+ * @param[in] mode The preprocessing allow mode to be set
+ * @param[in] app_id The application ID of the assistant to perform preprocessing
+ *
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #MA_ERROR_NONE Successful
+ * @retval #MA_ERROR_NOT_SUPPORTED Not supported
+ * @retval #MA_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MA_ERROR_INVALID_STATE Invalid state
+ * @retval #MA_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @pre The state should be #MA_STATE_READY.
+ */
+int ma_set_preprocessing_allow_mode(ma_preprocessing_allow_mode_e mode, const char* app_id);
+
#ifdef __cplusplus
}
#endif
MA_ACTIVE_STATE_ACTIVE = 1, /**< 'Active' state */
} ma_active_state_e;
+/**
+ * @brief Enumerations for allowing preprocessing by other voice assistants.
+ * @since_tizen 5.5
+ */
+typedef enum {
+ MA_PREPROCESSING_ALLOW_NONE = 0, /**< No preprocessing allowed */
+ MA_PREPROCESSING_ALLOW_UTTERANCE, /**< Preprocessing allowed for utterance audio only */
+ MA_PREPROCESSING_ALLOW_FOLLOW_UP, /**< Preprocessing allowed for follow-up audio only */
+ MA_PREPROCESSING_ALLOW_ALL, /**< Preprocessing allowed for all audio */
+} ma_preprocessing_allow_mode_e;
+
/**
* @brief Called when the client state is changed.
* @since_tizen 5.0