Change type for theme_loader_event_handler 34/237734/2
authorInkyun Kil <inkyun.kil@samsung.com>
Fri, 3 Jul 2020 05:59:41 +0000 (14:59 +0900)
committerInkyun Kil <inkyun.kil@samsung.com>
Fri, 10 Jul 2020 02:21:05 +0000 (11:21 +0900)
Change-Id: I86946394350dc7690d209b442f8113625d9922b0
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
src/api/theme_loader.cc
src/api/theme_loader.h
test/unit_tests/test_theme_loader.cc

index f0d2c64..1fabfda 100644 (file)
@@ -158,9 +158,8 @@ extern "C" EXPORT_API int theme_loader_query_id(theme_loader_h handle,
 }
 
 extern "C" EXPORT_API int theme_loader_add_event(theme_loader_h handle,
-    theme_loader_changed_cb changed, void* user_data,
-    theme_loader_event_h* event_h) {
-  if (handle == nullptr || changed == nullptr || event_h == nullptr) {
+    theme_loader_changed_cb changed, void* user_data, char** event_id) {
+  if (handle == nullptr || changed == nullptr || event_id == nullptr) {
     LOG(ERROR) << "Invalid parameter";
     return THEME_MANAGER_ERROR_INVALID_PARAMETER;
   }
@@ -174,24 +173,27 @@ extern "C" EXPORT_API int theme_loader_add_event(theme_loader_h handle,
 
   std::shared_ptr<ThemeInfoLoader>* p =
       static_cast<std::shared_ptr<ThemeInfoLoader>*>(handle);
-  std::string* result = new std::string((*p)->AddEvent(std::move(event_handler)));
-  *event_h = static_cast<theme_loader_event_h>(result);
+  std::string result = (*p)->AddEvent(std::move(event_handler));
+  *event_id = strdup(result.c_str());
+  if (*event_id == nullptr) {
+    LOG(ERROR) << "Out of memory";
+    return THEME_MANAGER_ERROR_OUT_OF_MEMORY;
+  }
 
   return THEME_MANAGER_ERROR_NONE;
 }
 
 extern "C" EXPORT_API int theme_loader_remove_event(theme_loader_h handle,
-    theme_loader_event_h event_handle) {
-  if (handle == nullptr || event_handle == nullptr) {
+    const char* event_id) {
+  if (handle == nullptr || event_id == nullptr) {
     LOG(ERROR) << "Invalid parameter";
     return THEME_MANAGER_ERROR_INVALID_PARAMETER;
   }
 
   std::shared_ptr<ThemeInfoLoader>* p =
       static_cast<std::shared_ptr<ThemeInfoLoader>*>(handle);
-  std::string* id = static_cast<std::string*>(event_handle);
-  (*p)->RemoveEvent(*id);
-  delete id;
+  std::string id(event_id);
+  (*p)->RemoveEvent(id);
 
   return THEME_MANAGER_ERROR_NONE;
 }
index 68f6007..feed52b 100644 (file)
@@ -54,12 +54,6 @@ typedef int (*theme_loader_changed_cb) (theme_h handle, void *user_data);
 typedef void *theme_loader_h;
 
 /**
- * @brief The theme loader event handle.
- * @since_tizen 6.0
- */
-typedef void *theme_loader_event_h;
-
-/**
  * @brief Creates the theme laoder handle.
  * @since_tizen 6.0
  * @remarks You must release @handle id using theme_loader_destroy().
@@ -88,10 +82,11 @@ int theme_loader_destroy(theme_loader_h handle);
 /**
  * @brief Registers a callback function to be invoked when the theme is being changed.
  * @since_tizen 6.0
- * @param[in] handle    The theme loader handle
- * @param[in] changed   The callback function to be registered for theme changed event
- * @param[in] user_data The user data to be passed to the callback function
- * @param[out] event_h  The theme event handle
+ * @remarks If you no longer use @event_id, you must release it using free().
+ * @param[in] handle     The theme loader handle
+ * @param[in] changed    The callback function to be registered for theme changed event
+ * @param[in] user_data  The user data to be passed to the callback function
+ * @param[out] event_id  The theme event id
  * @return @c 0 on success,
  *         otherwise a negative error value
  * @retval #THEME_MANAGER_ERROR_NONE              Successful
@@ -100,22 +95,20 @@ int theme_loader_destroy(theme_loader_h handle);
  * @see theme_loader_remove_event()
 */
 int theme_loader_add_event(theme_loader_h handle,
-    theme_loader_changed_cb changed, void *user_data,
-    theme_loader_event_h* event_h);
+    theme_loader_changed_cb changed, void *user_data, char** event_id);
 
 /**
  * @brief Unregisters a callback function.
  * @since_tizen 6.0
- * @param[in] handle         The theme loader handle
- * @param[in] event_handle   The theme event handle
+ * @param[in] handle       The theme loader handle
+ * @param[in] event_id     The theme event id
  * @return @c 0 on success,
  *         otherwise a negative error value
  * @retval #THEME_MANAGER_ERROR_NONE              Successful
  * @retval #THEME_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
  * @see theme_loader_add_event()
 */
-int theme_loader_remove_event(theme_loader_h handle,
-    theme_loader_event_h event_handle);
+int theme_loader_remove_event(theme_loader_h handle, const char* event_id);
 
 /**
  * @brief Loads current theme information.
index 6a514f8..6fa209e 100644 (file)
@@ -63,7 +63,6 @@ class ThemeLoaderTest : public TestFixture {
   }
 
   theme_loader_h loader_handle_;
-  theme_loader_event_h event_handle_;
 };
 
 TEST_F(ThemeLoaderTest, Create) {
@@ -226,36 +225,32 @@ TEST_F(ThemeLoaderTest, QueryID_N) {
   EXPECT_EQ(ret, THEME_MANAGER_ERROR_INVALID_PARAMETER);
 }
 
-TEST_F(ThemeLoaderTest, AddEvent) {
-  theme_loader_event_h event_handle;
+TEST_F(ThemeLoaderTest, AddRemoveEvent) {
   int ret;
+  char* event_id;
 
   ret = theme_loader_add_event(loader_handle_, changed_cb,
-      nullptr, &event_handle);
+      nullptr, &event_id);
   EXPECT_EQ(ret, THEME_MANAGER_ERROR_NONE);
-  EXPECT_NE(event_handle, nullptr);
 
-  event_handle_ = event_handle;
+  ret = theme_loader_remove_event(loader_handle_, event_id);
+  EXPECT_EQ(ret, THEME_MANAGER_ERROR_NONE);
+
+  if (event_id)
+    free(event_id);
 }
 
 TEST_F(ThemeLoaderTest, AddEvent_N) {
-  theme_loader_event_h event_handle;
+  char* event_id;
   int ret;
 
   ret = theme_loader_add_event(loader_handle_, nullptr,
-      nullptr, &event_handle);
+      nullptr, &event_id);
   EXPECT_EQ(ret, THEME_MANAGER_ERROR_INVALID_PARAMETER);
 }
 
-TEST_F(ThemeLoaderTest, RemoveEvent) {
-  int ret;
-
-  ret = theme_loader_remove_event(loader_handle_, event_handle_);
-  EXPECT_EQ(ret, THEME_MANAGER_ERROR_NONE);
-}
-
 TEST_F(ThemeLoaderTest, RemoveEvent_N) {
-  int ret = theme_loader_remove_event(nullptr, event_handle_);
+  int ret = theme_loader_remove_event(nullptr, nullptr);
   EXPECT_EQ(ret, THEME_MANAGER_ERROR_INVALID_PARAMETER);
 }