settings: add getter APIs and fix minor bugs 34/209834/5
authorJi-hoon Lee <dalton.lee@samsung.com>
Thu, 11 Jul 2019 10:46:13 +0000 (19:46 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Mon, 5 Aug 2019 08:35:04 +0000 (17:35 +0900)
Change-Id: Ia3d626e9e4b109cc9d9660779802978199ad92ae

common/multi_assistant_settings.c
include/multi_assistant_settings.h

index 8533834c0f240324280e432eba80df59a64cd664..f50ce487b79ee24ec53ec6595ce0160f9a159f26 100644 (file)
 
 #define MAX_LEN 256
 
-bool ma_settings_get_multiple_mode() {
+int ma_settings_is_multiple_mode(bool *multiple) {
        int res;
-       vconf_get_bool(MODE_URL, &res);
-       return res;
-}
-
-int ma_settings_set_multiple_mode(bool multiple) {
-       if (multiple != ma_settings_get_multiple_mode()) {
-               if (vconf_set_bool(MODE_URL, multiple)) {
+       int current_multiple;
+       if (multiple) {
+               res = vconf_get_bool(MODE_URL, &current_multiple);
+               if (0 == res) {
+                       *multiple = current_multiple;
                        return MA_ERROR_NONE;
                } else {
                        return MA_ERROR_OPERATION_FAILED;
                }
+       }
+       return MA_ERROR_INVALID_PARAMETER;
+}
+
+int ma_settings_set_multiple_mode(bool multiple) {
+       if (0 == vconf_set_bool(MODE_URL, multiple)) {
+               return MA_ERROR_NONE;
+       }
+       return MA_ERROR_OPERATION_FAILED;
+}
+
+int ma_settings_get_current_voice_assistant(char** app_id) {
+       bool multiple = false;
+       int res = MA_ERROR_NONE;
+
+       res = ma_settings_is_multiple_mode(&multiple);
+       if (MA_ERROR_NONE != res) return res;
+
+       char* previous_assistant = vconf_get_str(DEFAULT_ASSISTANT_URL);
+       if (!multiple && previous_assistant && app_id) {
+               *app_id = previous_assistant;
+               res = MA_ERROR_NONE;
        } else {
-               return MA_ERROR_OPERATION_FAILED;
+               res = MA_ERROR_OPERATION_FAILED;
+               if (previous_assistant) free(previous_assistant);
        }
+
+       return res;
 }
 
 int ma_settings_change_voice_assistant(const char* app_id) {
+       bool multiple = false;
        int res = MA_ERROR_NONE;
-       char* previous_assistant = vconf_get_str(DEFAULT_ASSISTANT_URL);
-       if (!ma_settings_get_multiple_mode() &&
-               previous_assistant &&
-               app_id) {
 
-               if(strncmp(app_id, previous_assistant, MAX_LEN) != 0) {
-                       if (vconf_set_str(DEFAULT_ASSISTANT_URL, app_id)) {
-                               res = MA_ERROR_NONE;
-                       } else {
-                               res = MA_ERROR_OPERATION_FAILED;
-                       }
+       res = ma_settings_is_multiple_mode(&multiple);
+       if (MA_ERROR_NONE != res) return res;
 
+       if (!multiple && app_id) {
+               if (0 == vconf_set_str(DEFAULT_ASSISTANT_URL, app_id)) {
+                       res = MA_ERROR_NONE;
                } else {
-                       res = MA_ERROR_NOT_SUPPORTED;
+                       res = MA_ERROR_OPERATION_FAILED;
                }
 
        } else {
                res = MA_ERROR_OPERATION_FAILED;
        }
 
-       if (previous_assistant) {
-               free(previous_assistant);
-       }
        return res;
 }
 
 int ma_settings_set_voice_assistant_enabled(const char* app_id, bool enabled) {
-       if (!ma_settings_get_multiple_mode()) {
+       bool multiple = false;
+
+       int res = ma_settings_is_multiple_mode(&multiple);
+       if (MA_ERROR_NONE != res) return res;
+
+       if (!multiple) {
                return MA_ERROR_NOT_SUPPORTED;
        }
-       int res = MA_ERROR_NONE;
        if (NULL != app_id) {
                char* enabled_assistants = vconf_get_str(ENABLED_ASSISTANT_URL);
                if (enabled) {
@@ -80,7 +100,7 @@ int ma_settings_set_voice_assistant_enabled(const char* app_id, bool enabled) {
                                } else {
                                        char assistants[MAX_LEN] = "";
                                        snprintf(assistants, MAX_LEN, "%s%s;", enabled_assistants, app_id);
-                                       if (vconf_set_str(ENABLED_ASSISTANT_URL, assistants)) {
+                                       if (0 == vconf_set_str(ENABLED_ASSISTANT_URL, assistants)) {
                                                res = MA_ERROR_NONE;
                                        } else {
                                                res = MA_ERROR_OPERATION_FAILED;
@@ -114,7 +134,7 @@ int ma_settings_set_voice_assistant_enabled(const char* app_id, bool enabled) {
                                                }
                                                as = strtok_r(rest, ";", &rest);
                                        }
-                                       if (vconf_set_str(ENABLED_ASSISTANT_URL, assistants)) {
+                                       if (0 == vconf_set_str(ENABLED_ASSISTANT_URL, assistants)) {
                                                res = MA_ERROR_NONE;
                                        } else {
                                                res = MA_ERROR_OPERATION_FAILED;
@@ -125,7 +145,6 @@ int ma_settings_set_voice_assistant_enabled(const char* app_id, bool enabled) {
                        } else {
                                res = MA_ERROR_OPERATION_FAILED;
                        }
-
                }
                if (enabled_assistants) {
                        free(enabled_assistants);
@@ -136,26 +155,39 @@ int ma_settings_set_voice_assistant_enabled(const char* app_id, bool enabled) {
        return res;
 }
 
-int ma_settings_set_default_voice_assistant(const char* app_id) {
+int ma_settings_get_default_voice_assistant(char** app_id) {
+       bool multiple = false;
        int res = MA_ERROR_NONE;
+
+       res = ma_settings_is_multiple_mode(&multiple);
+       if (MA_ERROR_NONE != res) return res;
+
        char* previous_assistant = vconf_get_str(DEFAULT_ASSISTANT_URL);
-       if (ma_settings_get_multiple_mode() &&
-               previous_assistant &&
-               app_id) {
-               if(strncmp(app_id, previous_assistant, MAX_LEN) != 0) {
-                       if (vconf_set_str(DEFAULT_ASSISTANT_URL, app_id)) {
-                               res = MA_ERROR_NONE;
-                       } else {
-                               res = MA_ERROR_OPERATION_FAILED;
-                       }
+       if (multiple && previous_assistant && app_id) {
+               *app_id = previous_assistant;
+               res = MA_ERROR_NONE;
+       } else {
+               res = MA_ERROR_OPERATION_FAILED;
+               if (previous_assistant) free(previous_assistant);
+       }
+       return res;
+}
+
+int ma_settings_set_default_voice_assistant(const char* app_id) {
+       bool multiple = false;
+       int res = MA_ERROR_NONE;
+
+       res = ma_settings_is_multiple_mode(&multiple);
+       if (MA_ERROR_NONE != res) return res;
+
+       if (multiple && app_id) {
+               if (0 == vconf_set_str(DEFAULT_ASSISTANT_URL, app_id)) {
+                       res = MA_ERROR_NONE;
                } else {
-                       res = MA_ERROR_NOT_SUPPORTED;
+                       res = MA_ERROR_OPERATION_FAILED;
                }
        } else {
                res = MA_ERROR_OPERATION_FAILED;
        }
-       if (previous_assistant) {
-               free(previous_assistant);
-       }
        return res;
 }
index 181ffbafddd61895385198ae74601cfc15361353..7c35335bf713251f29cf677d98246275be73dce1 100644 (file)
@@ -29,7 +29,7 @@ extern "C"
 #endif
 
 /**
- * @brief Set multi-assistant multiple mode.
+ * @brief Check multi-assistant's multiple mode.
  * @since_tizen 5.5
  * @privlevel public
  *
@@ -37,10 +37,39 @@ extern "C"
  * @retval #MA_ERROR_NONE Successful
  * @retval #MA_ERROR_OPERATION_FAILED Operation failed
  *
- * @param[in] multiple The state of multi-assistant need to be changed into
+ * @param[out] multiple The current multiple mode of multi-assistant
+ */
+int ma_settings_is_multiple_mode(bool *multiple);
+
+/**
+ * @brief Set multi-assistant's multiple mode.
+ * @since_tizen 5.5
+ * @privlevel public
+ *
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #MA_ERROR_NONE Successful
+ * @retval #MA_ERROR_OPERATION_FAILED Operation failed
+ *
+ * @param[in] multiple The multiple mode of multi-assistant need to be changed into
  */
 int ma_settings_set_multiple_mode(bool multiple);
 
+/**
+ * @brief Get system's current voice assistant.
+ * @since_tizen 5.5
+ * @remarks Valid only in single voice assistant mode.
+ * @remarks The @a app_id should be released using free().
+ * @privlevel public
+ *
+ * @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_OPERATION_FAILED Operation failed
+ *
+ * @param[out] app_id The app id of the currently activated voice assistant
+ */
+int ma_settings_get_current_voice_assistant(char** app_id);
+
 /**
  * @brief Change system's voice assistant.
  * @since_tizen 5.5
@@ -72,6 +101,22 @@ int ma_settings_change_voice_assistant(const char* app_id);
  */
 int ma_settings_set_voice_assistant_enabled(const char* app_id, bool enabled);
 
+/**
+ * @brief Retrieve system's default voice assistant.
+ * @since_tizen 5.5
+ * @remarks Valid only in multiple voice assistant mode.
+ * @remarks The @a app_id should be released using free().
+ * @privlevel public
+ *
+ * @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_OPERATION_FAILED Operation failed
+ *
+ * @param[out] app_id The app id of the voice assistant currently set as default one
+ */
+int ma_settings_get_default_voice_assistant(char** app_id);
+
 /**
  * @brief Change system's default voice assistant.
  * @since_tizen 5.5
@@ -95,4 +140,4 @@ int ma_settings_set_default_voice_assistant(const char* app_id);
  * @}
  */
 
-#endif /* __TIZEN_UIFW_MULTI_ASSISTANT_SETTINGS_H__ */
\ No newline at end of file
+#endif /* __TIZEN_UIFW_MULTI_ASSISTANT_SETTINGS_H__ */