#include <unistd.h>
#include <list>
+#include <sstream>
+#include <iomanip>
-#include "api/notification_ex_app_control_action.h"
-#include "api/notification_ex_button.h"
-#include "api/notification_ex_chat_message.h"
-#include "api/notification_ex_checkbox.h"
-#include "api/notification_ex_entry.h"
-#include "api/notification_ex_event_info.h"
-#include "api/notification_ex_group.h"
-#include "api/notification_ex_image.h"
-#include "api/notification_ex_input_selector.h"
-#include "api/notification_ex_item.h"
-#include "api/notification_ex_manager.h"
-#include "api/notification_ex_progress.h"
-#include "api/notification_ex_reporter.h"
-#include "api/notification_ex_text.h"
-#include "api/notification_ex_time.h"
-#include "api/notification_ex_visibility_action.h"
+#include "api/notification_ex.h"
+#include "api/notification_ex_internal.h"
#include "notification-ex/reporter.h"
#include "notification-ex/app_control_action.h"
#include "notification-ex/button_item.h"
#include "notification-ex/progress_item.h"
#include "notification-ex/time_item.h"
#include "notification-ex/visibility_action.h"
-#include "notification-ex/ex_bundle.h"
#include "notification-ex/event_info_internal.h"
#include "notification-ex/manager.h"
#include "notification-ex/dbus_sender.h"
#include "notification-ex/dbus_event_listener.h"
#include "notification-ex/exception.h"
+#include "notification-ex/iitem_info_internal.h"
+#include "notification-ex/icon_item.h"
#ifdef LOG_TAG
#undef LOG_TAG
#define EXPORT_API __attribute__((visibility("default")))
using namespace std;
+using namespace tizen_base;
using namespace notification::item;
using namespace notification;
void InvokeAdded(Manager* manager, const IEventInfo& info,
list<shared_ptr<AbstractItem>> addedItem) {
+ if (cb_.added == nullptr)
+ return;
noti_ex_item_h* added_item =
(noti_ex_item_h*)calloc(addedItem.size(), sizeof(noti_ex_item_h));
if (added_item == nullptr) {
cb_.added(static_cast<noti_ex_manager_h>(manager),
static_cast<noti_ex_event_info_h>(c_info), added_item,
addedItem.size(), user_data_);
- free(added_item);
}
void InvokeUpdated(Manager* manager, const IEventInfo& info,
shared_ptr<item::AbstractItem> updatedItem) {
+ if (cb_.updated == nullptr)
+ return;
IEventInfo* c_info = const_cast<IEventInfo*>(&info);
cb_.updated(static_cast<noti_ex_manager_h>(manager),
static_cast<noti_ex_event_info_h>(c_info),
void InvokeDeleted(Manager* manager, const IEventInfo& info,
shared_ptr<item::AbstractItem> deletedItem) {
+ if (cb_.deleted == nullptr)
+ return;
IEventInfo* c_info = const_cast<IEventInfo*>(&info);
- cb_.deleted(static_cast<noti_ex_manager_h>(manager),
+ if (c_info->GetEventType() == static_cast<int>(IEventInfo::EventType::DeleteAll)) {
+ cb_.deleted(static_cast<noti_ex_manager_h>(manager),
+ static_cast<noti_ex_event_info_h>(c_info),
+ nullptr, user_data_);
+ } else {
+ cb_.deleted(static_cast<noti_ex_manager_h>(manager),
static_cast<noti_ex_event_info_h>(c_info),
static_cast<noti_ex_item_h>(
new Handle(deletedItem)), user_data_);
+ }
}
void InvokeError(Manager* manager, NotificationError error, int requestId) {
+ if (cb_.error == nullptr)
+ return;
cb_.error(static_cast<noti_ex_manager_h>(manager),
static_cast<noti_ex_error_e>(error), requestId, user_data_);
}
void InvokeEvent(Reporter* reporter, const IEventInfo& info,
list<shared_ptr<AbstractItem>> notiList) {
+ if (cb_.event == nullptr)
+ return;
noti_ex_item_h* noti_list =
(noti_ex_item_h*)calloc(notiList.size(), sizeof(noti_ex_item_h));
if (noti_list == nullptr) {
}
void InvokeError(Reporter* reporter, NotificationError error, int requestId) {
+ if (cb_.error == nullptr)
+ return;
cb_.error(static_cast<noti_ex_reporter_h>(reporter),
static_cast<noti_ex_error_e>(error), requestId, user_data_);
}
} // namespace
+void __noti_ex_free_str_array(char** val, int length) {
+ int i;
+ for (i = 0; i < length ; i++)
+ free(val[i]);
+ free(val);
+}
+
extern "C" EXPORT_API int noti_ex_action_app_control_create(
noti_ex_action_h *handle, app_control_h app_control,
const char *extra) {
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- AppControlAction* p;
+ shared_ptr<AbstractAction>* p;
- if (extra)
- p = new (std::nothrow) AppControlAction(app_control, extra);
- else
- p = new (std::nothrow) AppControlAction(app_control);
+ if (extra) {
+ p = new (std::nothrow) shared_ptr<AbstractAction>(
+ new (std::nothrow) AppControlAction(app_control, extra));
+ } else {
+ p = new (std::nothrow) shared_ptr<AbstractAction>(
+ new (std::nothrow) AppControlAction(app_control));
+ }
if (p == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- AppControlAction* p = static_cast<AppControlAction*>(handle);
- p->SetAppControl(app_control);
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(handle);
+ AppControlAction* action = static_cast<AppControlAction*>(ptr->get());
+ action->SetAppControl(app_control);
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- AppControlAction* p = static_cast<AppControlAction*>(handle);
- *app_control = p->GetAppControl();
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(handle);
+ AppControlAction* action = static_cast<AppControlAction*>(ptr->get());
+
+ app_control_h clone;
+ int r = app_control_clone(&clone, action->GetAppControl());
+ if (r != APP_CONTROL_ERROR_NONE) {
+ LOGE("failed to create a app_control handle : %d", r);
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ *app_control = clone;
return NOTI_EX_ERROR_NONE;
}
LOGE("Invalid handle type");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
+
ButtonItem* p = static_cast<ButtonItem*>(sp->Get());
- if (!p->GetTitle().empty()) {
- *title = strdup(p->GetTitle().c_str());
- if (*title == nullptr) {
- LOGE("Out-of-memory");
- return NOTI_EX_ERROR_OUT_OF_MEMORY;
- }
+ string str;
+ if (p->GetMultiLanguage() != nullptr &&
+ !p->GetMultiLanguage()->GetTranslatedString().empty())
+ str = p->GetMultiLanguage()->GetTranslatedString();
+ else if (!p->GetTitle().empty())
+ str = p->GetTitle();
+
+ *title = strdup(str.c_str());
+ if (*title == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_button_set_multi_language_title(
+ noti_ex_item_h handle, noti_ex_multi_lang_h multi) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ if (!p->IsValidType(AbstractItem::Button)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ ButtonItem* bi = static_cast<ButtonItem*>(p->Get());
+ if (multi == nullptr) {
+ bi->SetMultiLanguage(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<MultiLanguage> mul_ptr =
+ *reinterpret_cast<shared_ptr<MultiLanguage>*>(multi);
+
+ mul_ptr->UpdateString();
+ bi->SetMultiLanguage(mul_ptr);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_button_set_image(
+ noti_ex_item_h handle, char *path) {
+ if (handle == nullptr || path == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::Button)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ ButtonItem* p = static_cast<ButtonItem*>(h->Get());
+ p->SetImgPath(path);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_button_get_image(
+ noti_ex_item_h handle, char **path) {
+ if (handle == nullptr || path == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
}
+ Handle* h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::Button)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ ButtonItem* p = static_cast<ButtonItem*>(h->Get());
+ if (!p->GetImgPath().empty())
+ *path = strdup(p->GetImgPath().c_str());
+ else
+ *path = nullptr;
+
return NOTI_EX_ERROR_NONE;
}
noti_ex_item_h *handle, const char *id, noti_ex_item_h name,
noti_ex_item_h text, noti_ex_item_h image, noti_ex_item_h time,
noti_ex_item_chat_message_type_e message_type) {
- if (handle == nullptr || message_type > NOTI_EX_ITEM_CHAT_MESSAGE_TYPE_SENDER) {
+ if (handle == nullptr || (text == nullptr && image == nullptr)
+ || name == nullptr || time == nullptr
+ || message_type > NOTI_EX_ITEM_CHAT_MESSAGE_TYPE_SENDER) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
auto* p = new (std::nothrow) ChatMessageItem(id,
dynamic_pointer_cast<TextItem>(static_cast<Handle*>(name)->GetPtr()),
- dynamic_pointer_cast<TextItem>(static_cast<Handle*>(text)->GetPtr()),
- dynamic_pointer_cast<ImageItem>(static_cast<Handle*>(image)->GetPtr()),
+ text == nullptr ? nullptr
+ : dynamic_pointer_cast<TextItem>(static_cast<Handle*>(text)->GetPtr()),
+ image == nullptr ? nullptr
+ : dynamic_pointer_cast<ImageItem>(static_cast<Handle*>(image)->GetPtr()),
dynamic_pointer_cast<TimeItem>(static_cast<Handle*>(time)->GetPtr()),
static_cast<ChatMessageItem::Type>(message_type));
if (p == nullptr) {
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
ChatMessageItem* p = static_cast<ChatMessageItem*>(h->Get());
- *name = new Handle(&(p->GetNameItem()));
+ if (p->GetNameItem().GetType() == AbstractItem::NullObject)
+ *name = nullptr;
+ else
+ *name = new Handle(&(p->GetNameItem()));
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
ChatMessageItem* p = static_cast<ChatMessageItem*>(h->Get());
- *text = new Handle(&(p->GetTextItem()));
+ if (p->GetTextItem().GetType() == AbstractItem::NullObject)
+ *text = nullptr;
+ else
+ *text = new Handle(&(p->GetTextItem()));
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
ChatMessageItem* p = static_cast<ChatMessageItem*>(h->Get());
- *image = new Handle(&(p->GetImageItem()));
+ if (p->GetImageItem().GetType() == AbstractItem::NullObject)
+ *image = nullptr;
+ else
+ *image = new Handle(&(p->GetImageItem()));
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
ChatMessageItem* p = static_cast<ChatMessageItem*>(h->Get());
- *time = new Handle(&(p->GetTimeItem()));
+ if (p->GetTimeItem().GetType() == AbstractItem::NullObject)
+ *time = nullptr;
+ else
+ *time = new Handle(&(p->GetTimeItem()));
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = new Handle(p);
+ *handle = new Handle(shared_ptr<AbstractItem>(p));
return NOTI_EX_ERROR_NONE;
}
LOGE("Invalid handle type");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
+
CheckBoxItem* p = static_cast<CheckBoxItem*>(h->Get());
- if (!p->GetTitle().empty()) {
- *title = strdup(p->GetTitle().c_str());
- if (*title == nullptr) {
- LOGE("Out-of-memory");
- return NOTI_EX_ERROR_OUT_OF_MEMORY;
- }
+ string str;
+ if (p->GetMultiLanguage() != nullptr &&
+ !p->GetMultiLanguage()->GetTranslatedString().empty())
+ str = p->GetMultiLanguage()->GetTranslatedString();
+ else if (!p->GetTitle().empty())
+ str = p->GetTitle();
+
+ *title = strdup(str.c_str());
+ if (*title == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_checkbox_set_multi_language_title(
+ noti_ex_item_h handle, noti_ex_multi_lang_h multi) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ if (!p->IsValidType(AbstractItem::CheckBox)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ CheckBoxItem* ci = static_cast<CheckBoxItem*>(p->Get());
+ if (multi == nullptr) {
+ ci->SetMultiLanguage(nullptr);
+ return NOTI_EX_ERROR_NONE;
}
+ shared_ptr<MultiLanguage> mul_ptr =
+ *reinterpret_cast<shared_ptr<MultiLanguage>*>(multi);
+ mul_ptr->UpdateString();
+ ci->SetMultiLanguage(mul_ptr);
+
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_item_checkbox_is_checked(noti_ex_item_h handle,
- bool *checked) {
+extern "C" EXPORT_API int noti_ex_item_checkbox_get_check_state(
+ noti_ex_item_h handle, bool *checked) {
if (handle == nullptr || checked == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_item_checkbox_set_check_state(
+ noti_ex_item_h handle, bool checked) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::CheckBox)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ CheckBoxItem* p = static_cast<CheckBoxItem*>(h->Get());
+ p->SetChecked(checked);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_item_entry_create(noti_ex_item_h *handle,
const char *id) {
EntryItem* p;
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = new Handle(p);
+ *handle = new Handle(shared_ptr<AbstractItem>(p));
return NOTI_EX_ERROR_NONE;
}
LOGE("Invalid handle type");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
+
EntryItem* p = static_cast<EntryItem*>(h->Get());
- if (!p->GetText().empty()) {
- *text = strdup(p->GetText().c_str());
- if (*text == nullptr) {
- LOGE("Out-of-memory");
- return NOTI_EX_ERROR_OUT_OF_MEMORY;
- }
+ string str;
+ if (p->GetMultiLanguage() != nullptr &&
+ !p->GetMultiLanguage()->GetTranslatedString().empty())
+ str = p->GetMultiLanguage()->GetTranslatedString();
+ else if (!p->GetText().empty())
+ str = p->GetText();
+
+ *text = strdup(str.c_str());
+ if (*text == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
return NOTI_EX_ERROR_NONE;
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_item_entry_set_multi_language(
+ noti_ex_item_h handle, noti_ex_multi_lang_h multi) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ if (!p->IsValidType(AbstractItem::Entry)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ EntryItem* ei = static_cast<EntryItem*>(p->Get());
+ if (multi == nullptr) {
+ ei->SetMultiLanguage(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<MultiLanguage> mul_ptr =
+ *reinterpret_cast<shared_ptr<MultiLanguage>*>(multi);
+ ei->SetMultiLanguage(mul_ptr);
+ ei->GetMultiLanguage()->UpdateString();
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_event_info_clone(noti_ex_event_info_h handle,
noti_ex_event_info_h* cloned_handle) {
if (handle == nullptr || cloned_handle == nullptr) {
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = new Handle(p);
+ *handle = new Handle(shared_ptr<AbstractItem>(p));
return NOTI_EX_ERROR_NONE;
}
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
+ } else {
+ *image_path = nullptr;
}
return NOTI_EX_ERROR_NONE;
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = new Handle(p);
+ *handle = new Handle(shared_ptr<AbstractItem>(p));
return NOTI_EX_ERROR_NONE;
}
LOGE("Invalid handle type");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
+
InputSelectorItem* p = static_cast<InputSelectorItem*>(h->Get());
- list<string> contents = p->GetContents();
+ vector<shared_ptr<MultiLanguage>> arr = p->GetMultiLanguageArr();
+ list<string> contents;
+ if (arr.size() == 0) {
+ contents = p->GetContents();
+ } else {
+ for (auto& i : arr) {
+ contents.push_back(i->GetTranslatedString());
+ }
+ }
+
char **list = (char**)calloc(contents.size(), sizeof(char*));
+ if (list == nullptr) {
+ LOGE("Out of memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
int idx = 0;
for (auto& i : contents) {
- list[idx++] = strdup(i.c_str());
+ list[idx] = strdup(i.c_str());
+ if (list[idx] == nullptr) {
+ __noti_ex_free_str_array(list, idx);
+ LOGE("Out of memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+ idx++;
}
+
*count = contents.size();
*contents_list = list;
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_item_input_selector_set_multi_language_contents(
+ noti_ex_item_h handle, noti_ex_multi_lang_h* multi_language_list, int count) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ if (!p->IsValidType(AbstractItem::InputSelector)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ vector<shared_ptr<MultiLanguage>> m_list;
+ for (int i = 0; i < count; i++) {
+ shared_ptr<MultiLanguage> mul_ptr =
+ *reinterpret_cast<shared_ptr<MultiLanguage>*>(multi_language_list[i]);
+ mul_ptr->UpdateString();
+ m_list.push_back(mul_ptr);
+ }
+
+ InputSelectorItem* input = static_cast<InputSelectorItem*>(p->Get());
+ input->SetMultiLanguage(m_list);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_color_create(noti_ex_color_h *handle,
unsigned char a, unsigned char r, unsigned char g, unsigned char b) {
if (handle == nullptr) {
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- auto* p = new (std::nothrow) Color(a, r, g, b);
- if (p == nullptr) {
+ auto* ptr = new (std::nothrow) shared_ptr<Color>(
+ new (std::nothrow) Color(a, r, g, b));
+ if (ptr == nullptr || ptr->get() == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = p;
+ *handle = ptr;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Color* p = static_cast<Color*>(handle);
- p->~Color();
+ shared_ptr<Color>* p = static_cast<shared_ptr<Color>*>(handle);
+ delete p;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Color* p = static_cast<Color*>(handle);
- *val = p->GetAVal();
+ shared_ptr<Color>* p = static_cast<shared_ptr<Color>*>(handle);
+ *val = (*p)->GetAVal();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Color* p = static_cast<Color*>(handle);
- *val = p->GetRVal();
+ shared_ptr<Color>* p = static_cast<shared_ptr<Color>*>(handle);
+ *val = (*p)->GetRVal();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Color* p = static_cast<Color*>(handle);
- *val = p->GetGVal();
+ shared_ptr<Color>* p = static_cast<shared_ptr<Color>*>(handle);
+ *val = (*p)->GetGVal();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Color* p = static_cast<Color*>(handle);
- *val = p->GetBVal();
+ shared_ptr<Color>* p = static_cast<shared_ptr<Color>*>(handle);
+ *val = (*p)->GetBVal();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- auto* p = new (std::nothrow) Padding(left, top, right, bottom);
- if (p == nullptr) {
+ auto* ptr = new (std::nothrow) shared_ptr<Padding>(
+ new (std::nothrow) Padding(left, top, right, bottom));
+ if (ptr == nullptr || ptr->get() == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = p;
+ *handle = ptr;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Padding* p = static_cast<Padding*>(handle);
- p->~Padding();
+ shared_ptr<Padding>* p = static_cast<shared_ptr<Padding>*>(handle);
+ delete p;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Padding* p = static_cast<Padding*>(handle);
- *val = p->GetLeft();
+ shared_ptr<Padding>* p = static_cast<shared_ptr<Padding>*>(handle);
+ *val = (*p)->GetLeft();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Padding* p = static_cast<Padding*>(handle);
- *val = p->GetTop();
+ shared_ptr<Padding>* p = static_cast<shared_ptr<Padding>*>(handle);
+ *val = (*p)->GetTop();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Padding* p = static_cast<Padding*>(handle);
- *val = p->GetRight();
+ shared_ptr<Padding>* p = static_cast<shared_ptr<Padding>*>(handle);
+ *val = (*p)->GetRight();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Padding* p = static_cast<Padding*>(handle);
- *val = p->GetBottom();
+ shared_ptr<Padding>* p = static_cast<shared_ptr<Padding>*>(handle);
+ *val = (*p)->GetBottom();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- auto* p = new (std::nothrow) Geometry(x, y, w, h);
- if (p == nullptr) {
+ auto* ptr = new (std::nothrow) shared_ptr<Geometry>(
+ new (std::nothrow) Geometry(x, y, w, h));
+ if (ptr == nullptr || ptr->get() == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = p;
+ *handle = ptr;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Geometry* p = static_cast<Geometry*>(handle);
- p->~Geometry();
+ shared_ptr<Geometry>* p = static_cast<shared_ptr<Geometry>*>(handle);
+ delete p;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Geometry* p = static_cast<Geometry*>(handle);
- *val = p->GetX();
+ shared_ptr<Geometry>* p = static_cast<shared_ptr<Geometry>*>(handle);
+ *val = (*p)->GetX();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Geometry* p = static_cast<Geometry*>(handle);
- *val = p->GetY();
+ shared_ptr<Geometry>* p = static_cast<shared_ptr<Geometry>*>(handle);
+ *val = (*p)->GetY();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Geometry* p = static_cast<Geometry*>(handle);
- *val = p->GetWidth();
+ shared_ptr<Geometry>* p = static_cast<shared_ptr<Geometry>*>(handle);
+ *val = (*p)->GetWidth();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Geometry* p = static_cast<Geometry*>(handle);
- *val = p->GetHeight();
+ shared_ptr<Geometry>* p = static_cast<shared_ptr<Geometry>*>(handle);
+ *val = (*p)->GetHeight();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Color* color_ = static_cast<Color*>(color);
- Padding* padding_ = static_cast<Padding*>(padding);
- Geometry* geo_ = static_cast<Geometry*>(geometry);
+ shared_ptr<Color> col = (color == nullptr) ?
+ nullptr : *(static_cast<shared_ptr<Color>*>(color));
+ shared_ptr<Padding> padd = (padding == nullptr) ?
+ nullptr : *(static_cast<shared_ptr<Padding>*>(padding));
+ shared_ptr<Geometry> geo = (geometry == nullptr) ?
+ nullptr : *(static_cast<shared_ptr<Geometry>*>(geometry));
- auto* p = new (std::nothrow) Style(*color_, *padding_, *geo_);
- if (p == nullptr) {
+ auto* ptr = new (std::nothrow) shared_ptr<Style>(
+ new (std::nothrow) Style(col, padd, geo));
+ if (ptr == nullptr || ptr->get() == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = p;
+ *handle = ptr;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Style* p = static_cast<Style*>(handle);
- p->~Style();
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ delete p;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Style* p = static_cast<Style*>(handle);
- Padding* padding_ = new (std::nothrow) Padding(p->GetPadding());
- if (padding_ == nullptr) {
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if ((*p)->GetPadding() == nullptr) {
+ LOGW("Padding info is null");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<Padding>* padd = new (std::nothrow) shared_ptr<Padding>(
+ new (std::nothrow) Padding(*((*p)->GetPadding())));
+ if (padd == nullptr || padd->get() == nullptr) {
LOGE("Out-of-memory");
- return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ *padding = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ *padding = padd;
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+
+extern "C" EXPORT_API int noti_ex_style_set_padding(noti_ex_style_h handle,
+ noti_ex_padding_h padding) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if (padding == nullptr) {
+ (*p)->SetPadding(nullptr);
+ return NOTI_EX_ERROR_NONE;
}
- *padding = padding_;
+ shared_ptr<Padding>* padd = static_cast<shared_ptr<Padding>*>(padding);
+ (*p)->SetPadding(*padd);
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Style* p = static_cast<Style*>(handle);
- Color* color_ = new (std::nothrow) Color(p->GetColor());
- if (color_ == nullptr) {
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if ((*p)->GetColor() == nullptr) {
+ LOGW("Color info is null");
+ *color = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<Color>* col = new (std::nothrow) shared_ptr<Color>(
+ new (std::nothrow) Color(*((*p)->GetColor())));
+ if (col == nullptr || col->get() == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *color = color_;
+ *color = col;
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_style_get_geometry(noti_ex_style_h handle,
- noti_ex_geometry_h *geometry) {
- if (handle == nullptr || geometry == nullptr) {
+extern "C" EXPORT_API int noti_ex_style_set_color(
+ noti_ex_style_h handle, noti_ex_color_h color) {
+ if (handle == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Style* p = static_cast<Style*>(handle);
- Geometry* geo_ = new (std::nothrow) Geometry(p->GetGeometry());
- if (geo_ == nullptr) {
- LOGE("Out-of-memory");
- return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if (color == nullptr) {
+ (*p)->SetColor(nullptr);
+ return NOTI_EX_ERROR_NONE;
}
- *geometry = geo_;
+ shared_ptr<Color>* col = static_cast<shared_ptr<Color>*>(color);
+ (*p)->SetColor(*col);
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_led_info_create(noti_ex_led_info_h *handle,
- noti_ex_color_h color) {
- if (handle == nullptr) {
+extern "C" EXPORT_API int noti_ex_style_get_geometry(noti_ex_style_h handle,
+ noti_ex_geometry_h *geometry) {
+ if (handle == nullptr || geometry == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- Color* color_ = static_cast<Color*>(color);
- auto* p = new (std::nothrow) LEDInfo(*color_);
- if (p == nullptr) {
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if ((*p)->GetGeometry() == nullptr) {
+ LOGW("Geometry info is null");
+ *geometry = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<Geometry>* geo = new (std::nothrow) shared_ptr<Geometry>(
+ new (std::nothrow) Geometry(*((*p)->GetGeometry())));
+ if (geo == nullptr || geo->get() == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = p;
+ *geometry = geo;
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_led_info_destroy(noti_ex_led_info_h handle) {
+extern "C" EXPORT_API int noti_ex_style_set_geometry(
+ noti_ex_style_h handle, noti_ex_geometry_h geometry) {
if (handle == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- LEDInfo* p = static_cast<LEDInfo*>(handle);
- p->~LEDInfo();
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if (geometry == nullptr) {
+ (*p)->SetGeometry(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<Geometry>* geo = static_cast<shared_ptr<Geometry>*>(geometry);
+ (*p)->SetGeometry(*geo);
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_led_info_set_on_period(
- noti_ex_led_info_h handle, int ms) {
- if (handle == nullptr) {
+extern "C" EXPORT_API int noti_ex_style_get_background_image(
+ noti_ex_style_h handle, char** background_image) {
+ if (handle == nullptr || background_image == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- LEDInfo* p = static_cast<LEDInfo*>(handle);
- p->SetOnPeriod(ms);
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+
+ if ((*p)->GetBackgroundImage().empty())
+ *background_image = nullptr;
+ else
+ *background_image = strdup((*p)->GetBackgroundImage().c_str());
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_led_info_get_on_period(
- noti_ex_led_info_h handle, int *ms) {
- if (handle == nullptr || ms == nullptr) {
+extern "C" EXPORT_API int noti_ex_style_set_background_image(
+ noti_ex_style_h handle, char* background_image) {
+ if (handle == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- LEDInfo* p = static_cast<LEDInfo*>(handle);
- *ms = p->GetOnPeriod();
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if (background_image == nullptr)
+ (*p)->SetBackgroundImage("");
+ else
+ (*p)->SetBackgroundImage(background_image);
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_led_info_set_off_period(
- noti_ex_led_info_h handle, int ms) {
- if (handle == nullptr) {
+extern "C" EXPORT_API int noti_ex_style_get_background_color(
+ noti_ex_style_h handle, noti_ex_color_h* color) {
+ if (handle == nullptr || color == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- LEDInfo* p = static_cast<LEDInfo*>(handle);
- p->SetOffPeriod(ms);
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if ((*p)->GetBackgroundColor() == nullptr) {
+ LOGW("Color info is null");
+ *color = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<Color>* col = new (std::nothrow) shared_ptr<Color>(
+ new (std::nothrow) Color(*((*p)->GetBackgroundColor())));
+ if (col == nullptr || col->get() == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
+ *color = col;
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_led_info_get_off_period(
- noti_ex_led_info_h handle, int *ms) {
+extern "C" EXPORT_API int noti_ex_style_set_background_color(
+ noti_ex_style_h handle, noti_ex_color_h color) {
if (handle == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- LEDInfo* p = static_cast<LEDInfo*>(handle);
- *ms = p->GetOffPeriod();
+ shared_ptr<Style>* p = static_cast<shared_ptr<Style>*>(handle);
+ if (color == nullptr) {
+ (*p)->SetBackgroundColor(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<Color>* col = static_cast<shared_ptr<Color>*>(color);
+ (*p)->SetBackgroundColor(*col);
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_led_info_get_color(
- noti_ex_led_info_h handle, noti_ex_color_h *color) {
- if (handle == nullptr) {
+extern "C" EXPORT_API int noti_ex_led_info_create(noti_ex_led_info_h *handle,
+ noti_ex_color_h color) {
+ if (handle == nullptr || color == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- LEDInfo* p = static_cast<LEDInfo*>(handle);
- Color* color_ = new (std::nothrow) Color(p->GetColor());
- if (color_ == nullptr) {
+ shared_ptr<Color>* color_ptr = static_cast<shared_ptr<Color>*>(color);
+ shared_ptr<LEDInfo>* p = new (std::nothrow) shared_ptr<LEDInfo>(
+ new (std::nothrow) LEDInfo(*color_ptr));
+ if (p == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *color = color_;
+ *handle = p;
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_action_destroy(noti_ex_action_h handle) {
+extern "C" EXPORT_API int noti_ex_led_info_destroy(noti_ex_led_info_h handle) {
if (handle == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- AbstractAction* p = static_cast<AbstractAction*>(handle);
- p->~AbstractAction();
-
+ shared_ptr<LEDInfo>* led_ptr =
+ reinterpret_cast<shared_ptr<LEDInfo>*>(handle);
+ delete led_ptr;
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_led_info_set_on_period(
+ noti_ex_led_info_h handle, int ms) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<LEDInfo>* led_ptr =
+ reinterpret_cast<shared_ptr<LEDInfo>*>(handle);
+ (*led_ptr)->SetOnPeriod(ms);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_led_info_get_on_period(
+ noti_ex_led_info_h handle, int *ms) {
+ if (handle == nullptr || ms == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<LEDInfo>* led_ptr =
+ reinterpret_cast<shared_ptr<LEDInfo>*>(handle);
+ *ms = (*led_ptr)->GetOnPeriod();
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_led_info_set_off_period(
+ noti_ex_led_info_h handle, int ms) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<LEDInfo>* led_ptr =
+ reinterpret_cast<shared_ptr<LEDInfo>*>(handle);
+ (*led_ptr)->SetOffPeriod(ms);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_led_info_get_off_period(
+ noti_ex_led_info_h handle, int *ms) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<LEDInfo>* led_ptr =
+ reinterpret_cast<shared_ptr<LEDInfo>*>(handle);
+ *ms = (*led_ptr)->GetOffPeriod();
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_led_info_get_color(
+ noti_ex_led_info_h handle, noti_ex_color_h *color) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<LEDInfo>* led_ptr =
+ reinterpret_cast<shared_ptr<LEDInfo>*>(handle);
+ if ((*led_ptr)->GetColor() == nullptr) {
+ LOGW("Color is null");
+ *color = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<Color>* col = new (std::nothrow) shared_ptr<Color>(
+ new (std::nothrow) Color(*((*led_ptr)->GetColor())));
+ if (col == nullptr || col->get() == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
+ *color = col;
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_led_info_set_color(
+ noti_ex_led_info_h handle, noti_ex_color_h color) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<LEDInfo>* p = static_cast<shared_ptr<LEDInfo>*>(handle);
+ if (color == nullptr) {
+ (*p)->SetColor(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<Color>* col = static_cast<shared_ptr<Color>*>(color);
+ (*p)->SetColor(*col);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_action_destroy(noti_ex_action_h handle) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(handle);
+ delete ptr;
+
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- AbstractAction* p = static_cast<AbstractAction*>(handle);
- *type = p->GetType();
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(handle);
+ *type = (*ptr)->GetType();
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- AbstractAction* p = static_cast<AbstractAction*>(handle);
- *local = p->IsLocal();
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(handle);
+ *local = (*ptr)->IsLocal();
return NOTI_EX_ERROR_NONE;
}
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- AbstractAction* p = static_cast<AbstractAction*>(handle);
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(handle);
Handle* ih = static_cast<Handle*>(item);
- p->Execute(ih->GetPtr());
+ (*ptr)->Execute(ih->GetPtr());
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- AbstractAction* p = static_cast<AbstractAction*>(handle);
- if (!p->GetExtra().empty()) {
- *extra = strdup(p->GetExtra().c_str());
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(handle);
+ if (!(*ptr)->GetExtra().empty()) {
+ *extra = strdup((*ptr)->GetExtra().c_str());
if (*extra == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
+ } else {
+ *extra = nullptr;
}
return NOTI_EX_ERROR_NONE;
Handle* p = static_cast<Handle*>(handle);
AbstractItem& find_item = p->Get()->FindByID(string(id));
+ if (find_item.GetType() == AbstractItem::NullObject) {
+ LOGW("Not exist ID");
+ *item = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+
*item = new Handle(&find_item);
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_NONE;
}
-extern "C" EXPORT_API int noti_ex_item_get_shared_paths(noti_ex_item_h handle,
- char ***path, int *count) {
- if (handle == nullptr || path == nullptr || count == nullptr) {
- LOGE("Invalid parameter");
- return NOTI_EX_ERROR_INVALID_PARAMETER;
- }
- Handle* p = static_cast<Handle*>(handle);
- list<string> shared_path = p->Get()->GetSharedPath();
- *path = (char**)calloc(shared_path.size(), sizeof(char*));
- int idx = 0;
- for (auto& i : shared_path) {
- *path[idx++] = strdup(i.c_str());
- }
- *count = shared_path.size();
- return NOTI_EX_ERROR_NONE;
-}
-
extern "C" EXPORT_API int noti_ex_item_get_id(noti_ex_item_h handle,
char **id) {
if (handle == nullptr || id == nullptr) {
*action = nullptr;
return NOTI_EX_ERROR_NONE;
}
- *action = static_cast<noti_ex_action_h>(p->Get()->GetAction().get());
+ *action = static_cast<noti_ex_action_h>(new shared_ptr<AbstractAction>(
+ p->Get()->GetAction()));
return NOTI_EX_ERROR_NONE;
}
extern "C" EXPORT_API int noti_ex_item_set_action(noti_ex_item_h handle,
noti_ex_action_h action) {
- if (handle == nullptr || action == nullptr) {
+ if (handle == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
Handle* p = static_cast<Handle*>(handle);
- AbstractAction* a = static_cast<AbstractAction*>(action);
- p->Get()->SetAction(shared_ptr<AbstractAction>(a));
+ if (action == nullptr) {
+ p->Get()->SetAction(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(action);
+ p->Get()->SetAction(*ptr);
return NOTI_EX_ERROR_NONE;
}
Handle* p = static_cast<Handle*>(handle);
shared_ptr<Style> s = p->Get()->GetStyle();
- *style = static_cast<noti_ex_style_h>(s.get());
+ if (s.get() == nullptr) {
+ LOGW("Style is null");
+ *style = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ auto* ptr = new (std::nothrow) shared_ptr<Style>(new (std::nothrow) Style(*s));
+ if (ptr == nullptr || ptr->get() == nullptr) {
+ LOGE("Out of memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
+ *style = ptr;
return NOTI_EX_ERROR_NONE;
}
extern "C" EXPORT_API int noti_ex_item_set_style(noti_ex_item_h handle,
noti_ex_style_h style) {
- if (handle == nullptr || style == nullptr) {
+ if (handle == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
Handle* p = static_cast<Handle*>(handle);
- Style* s = static_cast<Style*>(style);
- p->Get()->SetStyle(shared_ptr<Style>(s));
+ if (style == nullptr) {
+ p->Get()->SetStyle(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<Style>* s = static_cast<shared_ptr<Style>*>(style);
+ p->Get()->SetStyle(*s);
return NOTI_EX_ERROR_NONE;
}
Handle* p = static_cast<Handle*>(handle);
list<string> receivers = p->Get()->GetReceiverList();
- *receiver_list = (char**)calloc(receivers.size(), sizeof(char*));
+ if (receivers.size() == 0) {
+ *receiver_list = nullptr;
+ *count = 0;
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ char **tmp_list = (char**)calloc(receivers.size(), sizeof(char*));
+ if (tmp_list == nullptr) {
+ LOGE("Out of memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
int idx = 0;
for (auto& i : receivers) {
- *receiver_list[idx++] = strdup(i.c_str());
+ tmp_list[idx] = strdup(i.c_str());
+ if (tmp_list[idx] == nullptr) {
+ __noti_ex_free_str_array(tmp_list, idx);
+ LOGE("Out of memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+ idx++;
}
+
+ *receiver_list = tmp_list;
*count = receivers.size();
return NOTI_EX_ERROR_NONE;
}
}
Handle* p = static_cast<Handle*>(handle);
- LEDInfo* led_info = static_cast<LEDInfo*>(led);
- p->Get()->SetLEDInfo(shared_ptr<LEDInfo>(led_info));
+ if (led == nullptr) {
+ p->Get()->SetLEDInfo(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+ shared_ptr<LEDInfo>* led_ptr =
+ reinterpret_cast<shared_ptr<LEDInfo>*>(led);
+ p->Get()->SetLEDInfo(*led_ptr);
return NOTI_EX_ERROR_NONE;
}
Handle* p = static_cast<Handle*>(handle);
if (p->Get()->GetLEDInfo() != nullptr)
- *led = static_cast<noti_ex_led_info_h>(p->Get()->GetLEDInfo().get());
+ *led = new shared_ptr<LEDInfo>(p->Get()->GetLEDInfo());
else
*led = nullptr;
return NOTI_EX_ERROR_NONE;
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_item_get_ongoing_state(noti_ex_item_h handle,
+ bool* ongoing) {
+ if (handle == nullptr || ongoing == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ *ongoing = p->Get()->GetOnGoingState();
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_set_ongoing_state(noti_ex_item_h handle,
+ bool ongoing) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ p->Get()->SetOnGoingState(ongoing);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_check_type_exist(noti_ex_item_h handle,
+ int type, bool* exist) {
+ if (handle == nullptr || exist == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ *exist = p->Get()->IsItemTypeExist(type);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_get_main_type(noti_ex_item_h handle,
+ int* type) {
+ if (handle == nullptr || type == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ *type = p->Get()->GetMainType();
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_set_main_type(noti_ex_item_h handle,
+ const char* id, int type) {
+ if (handle == nullptr || id == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ if (!(p->Get()->SetMainType(string(id),
+ static_cast<AbstractItem::MainType>(type))))
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_find_by_main_type(noti_ex_item_h handle,
+ int type, noti_ex_item_h* item) {
+ if (handle == nullptr || item == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::Group)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ GroupItem* p = static_cast<GroupItem*>(h->Get());
+ AbstractItem& find_item = p->FindByMainType(static_cast<AbstractItem::MainType>(type));
+ if (find_item.GetType() == AbstractItem::NullObject) {
+ LOGW("Not exist ID");
+ *item = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+ *item = new Handle(&find_item);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_get_extension_data(noti_ex_item_h handle,
+ const char *key, bundle **value) {
+ if (handle == nullptr || key == nullptr || value == nullptr) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+
+ Bundle b = p->Get()->GetExtensionData(key);
+ if (b.GetCount() == 0)
+ *value = nullptr;
+ else
+ *value = b.GetHandle();
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_set_extension_data(noti_ex_item_h handle,
+ const char *key, bundle *value) {
+ if (handle == nullptr || key == nullptr || value == nullptr) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Bundle b = Bundle(value);
+
+ Handle* p = static_cast<Handle*>(handle);
+ p->Get()->SetExtensionData(key, b);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_manager_create(noti_ex_manager_h *handle,
const char *receiver_group, noti_ex_manager_events_s event_callbacks,
void *data) {
*count = 0;
return NOTI_EX_ERROR_NONE;
}
- *items = (noti_ex_item_h*)calloc(item_list.size(), sizeof(noti_ex_item_h));
- if (*items == nullptr) {
+ noti_ex_item_h* added_item =
+ (noti_ex_item_h*)calloc(item_list.size(), sizeof(noti_ex_item_h));
+ if (added_item == nullptr) {
LOGE("Fail to create items");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
int idx = 0;
for (auto& i : item_list) {
- *items[idx++] = new Handle(move(i));
+ added_item[idx++] = static_cast<noti_ex_item_h>(new Handle(move(i)));
}
+ *items = added_item;
*count = item_list.size();
} catch (Exception &ex) {
LOGE("%s %d", ex.what(), ex.GetErrorCode());
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_manager_get_by_channel(
+ noti_ex_manager_h handle, char* channel, noti_ex_item_h** items, int* count) {
+ if (handle == nullptr || channel == nullptr ||
+ items == nullptr || count == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ try {
+ ManagerStub* stub = static_cast<ManagerStub*>(handle);
+ list<unique_ptr<item::AbstractItem>> item_list = stub->Get(channel);
+ if (item_list.size() == 0) {
+ *items = nullptr;
+ *count = 0;
+ return NOTI_EX_ERROR_NONE;
+ }
+ noti_ex_item_h* added_item =
+ (noti_ex_item_h*)calloc(item_list.size(), sizeof(noti_ex_item_h));
+ if (added_item == nullptr) {
+ LOGE("Fail to create items");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
+ int idx = 0;
+ for (auto& i : item_list) {
+ added_item[idx++] = static_cast<noti_ex_item_h>(new Handle(move(i)));
+ }
+ *items = added_item;
+ *count = item_list.size();
+ } catch (Exception &ex) {
+ LOGE("%s %d", ex.what(), ex.GetErrorCode());
+ return NOTI_EX_ERROR_IO_ERROR;
+ }
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_manager_update(noti_ex_manager_h handle,
noti_ex_item_h noti, int *request_id) {
if (handle == nullptr || noti == nullptr || request_id == nullptr) {
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_manager_delete_by_channel(
+ noti_ex_manager_h handle, char* channel, int* request_id) {
+ if (handle == nullptr || channel == nullptr || request_id == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ try {
+ ManagerStub* stub = static_cast<ManagerStub*>(handle);
+ *request_id = stub->DeleteByChannel(channel);
+ } catch (Exception &ex) {
+ LOGE("%s %d", ex.what(), ex.GetErrorCode());
+ return NOTI_EX_ERROR_IO_ERROR;
+ }
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_manager_hide(noti_ex_manager_h handle,
noti_ex_item_h noti, int *request_id) {
if (handle == nullptr || noti == nullptr || request_id == nullptr) {
}
try {
ManagerStub* stub = static_cast<ManagerStub*>(handle);
- *item = new Handle(stub->FindByRootID(root_id));
+ shared_ptr<AbstractItem> ptr = stub->FindByRootID(root_id);
+ if (ptr == nullptr) {
+ LOGW("Not exist ID");
+ *item = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+ *item = new Handle(ptr);
} catch (Exception &ex) {
LOGE("%s %d", ex.what(), ex.GetErrorCode());
return NOTI_EX_ERROR_IO_ERROR;
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = new Handle(p);
+ *handle = new Handle(shared_ptr<AbstractItem>(p));
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_item_progress_get_type(noti_ex_item_h handle,
+ int* type) {
+ if (handle == nullptr || type == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle *h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::Progress)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+ ProgressItem* p = static_cast<ProgressItem*>(h->Get());
+ *type = static_cast<noti_ex_item_progress_type_e>(p->GetProgressType());
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_progress_set_type(noti_ex_item_h handle,
+ int type) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle *h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::Progress)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+ ProgressItem* p = static_cast<ProgressItem*>(h->Get());
+ p->SetProgressType(static_cast<ProgressItem::Type>(type));
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_reporter_create(noti_ex_reporter_h *handle,
noti_ex_reporter_events_s event_callbacks, void *data) {
if (handle == nullptr) {
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_reporter_delete_by_channel(
+ noti_ex_reporter_h handle, char* channel, int* request_id) {
+ if (handle == nullptr || channel == nullptr || request_id == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ try {
+ ReporterStub* stub = static_cast<ReporterStub*>(handle);
+ *request_id = stub->DeleteByChannel(channel);
+ } catch (Exception &ex) {
+ LOGE("%s %d", ex.what(), ex.GetErrorCode());
+ return NOTI_EX_ERROR_IO_ERROR;
+ }
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_reporter_find_by_root_id(
noti_ex_reporter_h handle, const char *root_id, noti_ex_item_h *item) {
if (handle == nullptr || root_id == nullptr || item == nullptr) {
}
try {
ReporterStub* stub = static_cast<ReporterStub*>(handle);
- *item = new Handle(stub->FindByRootID(root_id));
+ shared_ptr<AbstractItem> ptr = stub->FindByRootID(root_id);
+ if (ptr == nullptr) {
+ LOGW("Not exist ID");
+ *item = nullptr;
+ return NOTI_EX_ERROR_NONE;
+ }
+ *item = new Handle(ptr);
} catch (Exception &ex) {
LOGE("%s %d", ex.what(), ex.GetErrorCode());
return NOTI_EX_ERROR_IO_ERROR;
extern "C" EXPORT_API int noti_ex_item_text_create(noti_ex_item_h *handle,
const char *id, const char *text, const char *hyperlink) {
- if (handle == nullptr) {
+ if (handle == nullptr || text == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
TextItem* p;
+ if (id == NULL)
+ id = "";
+
if (hyperlink)
p = new (std::nothrow) TextItem(id, std::string(text),
std::string(hyperlink));
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = new Handle(p);
+ *handle = new Handle(shared_ptr<AbstractItem>(p));
return NOTI_EX_ERROR_NONE;
}
extern "C" EXPORT_API int noti_ex_item_text_set_contents(noti_ex_item_h handle,
const char *contents) {
- if (handle == nullptr) {
+ if (handle == nullptr || contents == nullptr) {
LOGE("Invalid parameter");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
LOGE("Invalid handle type");
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
+
TextItem* ti = static_cast<TextItem*>(p->Get());
- if (!ti->GetContents().empty()) {
- *contents = strdup(ti->GetContents().c_str());
- if (*contents == nullptr) {
- LOGE("Out-of-memory");
- return NOTI_EX_ERROR_OUT_OF_MEMORY;
- }
+ string str;
+ if (ti->GetMultiLanguage() != nullptr &&
+ !ti->GetMultiLanguage()->GetTranslatedString().empty())
+ str = ti->GetMultiLanguage()->GetTranslatedString();
+ else if (!ti->GetContents().empty())
+ str = ti->GetContents();
+
+ *contents = strdup(str.c_str());
+ if (*contents == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
return NOTI_EX_ERROR_NONE;
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
+ } else {
+ *hyper_link = nullptr;
+ }
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_text_set_multi_language(
+ noti_ex_item_h handle, noti_ex_multi_lang_h multi) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* p = static_cast<Handle*>(handle);
+ if (!p->IsValidType(AbstractItem::Text)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
}
+ TextItem* ti = static_cast<TextItem*>(p->Get());
+ if (multi == nullptr) {
+ ti->SetMultiLanguage(nullptr);
+ return NOTI_EX_ERROR_NONE;
+ }
+
+ shared_ptr<MultiLanguage> mul_ptr =
+ *reinterpret_cast<shared_ptr<MultiLanguage>*>(multi);
+ ti->SetMultiLanguage(mul_ptr);
+ ti->GetMultiLanguage()->UpdateString();
+
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = new Handle(p);
+ *handle = new Handle(shared_ptr<AbstractItem>(p));
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_NONE;
}
+extern "C" EXPORT_API int noti_ex_item_time_set_time(noti_ex_item_h handle,
+ time_t time) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+ Handle* h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::Time)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+ TimeItem* p = static_cast<TimeItem*>(h->Get());
+ p->SetTime(time);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
extern "C" EXPORT_API int noti_ex_action_visibility_create(
noti_ex_action_h *handle, const char *extra) {
if (handle == nullptr) {
if (extra != NULL)
extra_str = string(extra);
- auto* p = new (std::nothrow) VisibilityAction(extra_str);
- if (p == nullptr) {
+ shared_ptr<AbstractAction>* ptr = new (std::nothrow) shared_ptr<AbstractAction>(
+ new (std::nothrow) VisibilityAction(extra_str));
+ if (ptr == nullptr) {
LOGE("Out-of-memory");
return NOTI_EX_ERROR_OUT_OF_MEMORY;
}
- *handle = p;
+ *handle = ptr;
return NOTI_EX_ERROR_NONE;
}
return NOTI_EX_ERROR_INVALID_PARAMETER;
}
- VisibilityAction* p = static_cast<VisibilityAction*>(handle);
- p->SetVisibility(id, visible);
+ shared_ptr<AbstractAction>* ptr =
+ static_cast<shared_ptr<AbstractAction>*>(handle);
+ VisibilityAction* action = static_cast<VisibilityAction*>(ptr->get());
+ action->SetVisibility(id, visible);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_multi_lang_create(noti_ex_multi_lang_h* handle,
+ const char* msgid, const char* format, ...) {
+ if (handle == nullptr || msgid == nullptr || format == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ const char* format_idx = format;
+ vector<string> arr;
+ va_list args;
+ va_start(args, format);
+ while (*format_idx != '\0') {
+ char* arg = nullptr;
+ int arg_i;
+ double arg_f;
+ stringstream stream;
+ if (*format_idx == '%') {
+ switch (*(format_idx + 1)) {
+ case 's':
+ arg = va_arg(args, char *);
+ arr.push_back(string(arg));
+ break;
+ case 'd':
+ arg_i = va_arg(args, int);
+ arr.push_back(to_string(arg_i));
+ break;
+ case 'f':
+ arg_f = va_arg(args, double);
+ stream << std::fixed << std::setprecision(2) << arg_f;
+ arr.push_back(stream.str());
+ break;
+ }
+ }
+ format_idx++;
+ }
+ va_end(args);
+
+ MultiLanguage* p = new MultiLanguage(string(msgid), format, arr);
+ if (p == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+ *handle = new shared_ptr<MultiLanguage>(p);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_multi_lang_destroy(noti_ex_multi_lang_h handle) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ shared_ptr<MultiLanguage>* mul_ptr =
+ reinterpret_cast<shared_ptr<MultiLanguage>*>(handle);
+ delete mul_ptr;
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_get_private_id(
+ noti_ex_item_h item, int64_t* private_id) {
+ if (item == nullptr || private_id == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* h = static_cast<Handle*>(item);
+ *private_id = static_pointer_cast<IItemInfoInternal>(
+ h->Get()->GetInfo())->GetPrivateId();
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_set_private_id(
+ noti_ex_item_h item, int64_t priv_id) {
+ if (item == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* h = static_cast<Handle*>(item);
+ static_pointer_cast<IItemInfoInternal>(
+ h->Get()->GetInfo())->SetPrivateId(priv_id);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_free_string_list(char** list, int count) {
+ if (list == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ LOGI("Free strings (%d)", count);
+ for (int i = 0; i < count; i++)
+ free(list[i]);
+ free(list);
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_group_remove_children(noti_ex_item_h handle) {
+ if (handle == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+ Handle* h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::Group)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+ GroupItem* p = static_cast<GroupItem*>(h->Get());
+ p->RemoveChildren();
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+extern "C" EXPORT_API int noti_ex_item_icon_create(noti_ex_item_h *handle,
+ const char *id, const char *icon_path) {
+ if (handle == nullptr || icon_path == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ IconItem* p;
+ if (id)
+ p = new (std::nothrow) IconItem(id, icon_path);
+ else
+ p = new (std::nothrow) IconItem(icon_path);
+
+ if (p == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+
+ *handle = new Handle(shared_ptr<AbstractItem>(p));
+
+ return NOTI_EX_ERROR_NONE;
+}
+
+int noti_ex_item_icon_get_icon_path(noti_ex_item_h handle, char **icon_path) {
+ if (handle == nullptr || icon_path == nullptr) {
+ LOGE("Invalid parameter");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ Handle* h = static_cast<Handle*>(handle);
+ if (!h->IsValidType(AbstractItem::Icon)) {
+ LOGE("Invalid handle type");
+ return NOTI_EX_ERROR_INVALID_PARAMETER;
+ }
+
+ IconItem* p = static_cast<IconItem*>(h->Get());
+ if (!p->GetImagePath().empty()) {
+ *icon_path = strdup(p->GetImagePath().c_str());
+ if (*icon_path == nullptr) {
+ LOGE("Out-of-memory");
+ return NOTI_EX_ERROR_OUT_OF_MEMORY;
+ }
+ } else {
+ *icon_path = nullptr;
+ }
return NOTI_EX_ERROR_NONE;
}