From: SukHyung, Kang Date: Mon, 11 Mar 2019 02:32:30 +0000 (+0900) Subject: Add Serialize/Deserialize for AbstractItem X-Git-Tag: accepted/tizen/unified/20190327.160606~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d59bac544ea24d141d64112b4cfbd2f9cf463b8c;p=platform%2Fcore%2Fapi%2Fnotification.git Add Serialize/Deserialize for AbstractItem Change-Id: I83fcc2aabfeca0e88e2d29afe9a91dbb3159c352 Signed-off-by: SukHyung, Kang --- diff --git a/notification-ex/abstract_item.cc b/notification-ex/abstract_item.cc index e1e4860..c196d9c 100644 --- a/notification-ex/abstract_item.cc +++ b/notification-ex/abstract_item.cc @@ -25,6 +25,7 @@ #include "notification-ex/abstract_item_implementation.h" #include "notification-ex/item_info_internal.h" #include "notification-ex/ex_util.h" +#include "notification-ex/action_inflator.h" #ifdef LOG_TAG #undef LOG_TAG @@ -33,7 +34,43 @@ #define LOG_TAG "NOTIFICATION_EX" #define ABSTRACT_ITEM_TYPE_KEY "__ABSTRACT_ITEM_TYPE_KEY__" #define ABSTRACT_ITEM_ID_KEY "__ABSTRACT_ITEM_ID_KEY__" +#define ABSTRACT_ITEM_UID_KEY "__ABSTRACT_ITEM_UID_KEY__" +#define ABSTRACT_ITEM_REQUEST_ID_KEY "__ABSTRACT_ITEM_REQUEST_ID_KEY__" +#define ABSTRACT_ITEM_TIME_KEY "__ABSTRACT_ITEM_TIME_KEY__" #define ABSTRACT_ITEM_SENDER_APPID_KEY "__ABSTRACT_ITEM_SENDER_APPID_KEY__" +#define ABSTRACT_ITEM_CHANNEL_KEY "__ABSTRACT_ITEM_CHANNEL_KEY__" +#define ABSTRACT_ITEM_VERSION_KEY "__ABSTRACT_ITEM_VERSION_KEY__" +#define ABSTRACT_ITEM_HIDE_TIME_KEY "__ABSTRACT_ITEM_HIDE_TIME_KEY__" +#define ABSTRACT_ITEM_DELETE_TIME_KEY "__ABSTRACT_ITEM_DELETE_TIME_KEY__" +#define ABSTRACT_ITEM_CAN_RECEIVE_KEY "__ABSTRACT_ITEM_CAN_RECEIVE_KEY__" +#define ABSTRACT_ITEM_SOUND_PATH_KEY "__ABSTRACT_ITEM_SOUND_PATH_KEY__" +#define ABSTRACT_ITEM_VIBRATION_PATH_KEY "__ABSTRACT_ITEM_VIBRATION_PATH_KEY__" +#define ABSTRACT_ITEM_POLICY_KEY "__ABSTRACT_ITEM_POLICY_KEY__" +#define ABSTRACT_ITEM_RECEIVER_GROUP_KEY "__ABSTRACT_ITEM_RECEIVER_GROUP_KEY__" +#define ABSTRACT_ITEM_VISIBLE_KEY "__ABSTRACT_ITEM_VISIBLE_KEY__" +#define ABSTRACT_ITEM_ENABLE_KEY "__ABSTRACT_ITEM_ENABLE_KEY__" +#define ABSTRACT_ITEM_STYLE_IS_EXIST_KEY "__ABSTRACT_ITEM_STYLE_IS_EXIST_KEY__" +#define ABSTRACT_ITEM_STYLE_PADDING_TOP_KEY "__ABSTRACT_ITEM_STYLE_PADDING_TOP_KEY__" +#define ABSTRACT_ITEM_STYLE_PADDING_LEFT_KEY "__ABSTRACT_ITEM_STYLE_PADDING_LEFT_KEY__" +#define ABSTRACT_ITEM_STYLE_PADDING_RIGHT_KEY "__ABSTRACT_ITEM_STYLE_PADDING_RIGHT_KEY__" +#define ABSTRACT_ITEM_STYLE_PADDING_BOTTOM_KEY "__ABSTRACT_ITEM_STYLE_PADDING_BOTTOM_KEY__" +#define ABSTRACT_ITEM_STYLE_COLOR_A_KEY "__ABSTRACT_ITEM_STYLE_COLOR_A_KEY__" +#define ABSTRACT_ITEM_STYLE_COLOR_R_KEY "__ABSTRACT_ITEM_STYLE_COLOR_R_KEY__" +#define ABSTRACT_ITEM_STYLE_COLOR_G_KEY "__ABSTRACT_ITEM_STYLE_COLOR_G_KEY__" +#define ABSTRACT_ITEM_STYLE_COLOR_B_KEY "__ABSTRACT_ITEM_STYLE_COLOR_B_KEY__" +#define ABSTRACT_ITEM_STYLE_GEOMETRY_X_KEY "__ABSTRACT_ITEM_STYLE_GEOMETRY_X_KEY__" +#define ABSTRACT_ITEM_STYLE_GEOMETRY_Y_KEY "__ABSTRACT_ITEM_STYLE_GEOMETRY_Y_KEY__" +#define ABSTRACT_ITEM_STYLE_GEOMETRY_WIDTH_KEY "__ABSTRACT_ITEM_STYLE_GEOMETRY_WIDTH_KEY__" +#define ABSTRACT_ITEM_STYLE_GEOMETRY_HEIGHT_KEY "__ABSTRACT_ITEM_STYLE_GEOMETRY_HEIGHT_KEY__" +#define ABSTRACT_ITEM_LED_ON_PERIOD_KEY "__ABSTRACT_ITEM_LED_ON_PERIOD_KEY__" +#define ABSTRACT_ITEM_LED_OFF_PERIOD_KEY "__ABSTRACT_ITEM_LED_OFF_PERIOD_KEY__" +#define ABSTRACT_ITEM_LED_COLOR_A_KEY "__ABSTRACT_ITEM_LED_COLOR_A_KEY__" +#define ABSTRACT_ITEM_LED_COLOR_R_KEY "__ABSTRACT_ITEM_LED_COLOR_R_KEY__" +#define ABSTRACT_ITEM_LED_COLOR_G_KEY "__ABSTRACT_ITEM_LED_COLOR_G_KEY__" +#define ABSTRACT_ITEM_LED_COLOR_B_KEY "__ABSTRACT_ITEM_LED_COLOR_B_KEY__" +#define ABSTRACT_ITEM_LED_IS_EXIST_KEY "__ABSTRACT_ITEM_LED_IS_EXIST_KEY__" +#define ABSTRACT_ITEM_ACTION_KEY "__ABSTRACT_ITEM_ACTION_KEY__" +#define ABSTRACT_ITEM_TRUE "TRUE" using namespace std; namespace notification { @@ -82,20 +119,175 @@ AbstractItem::~AbstractItem() = default; Bundle AbstractItem::Serialize() const { Bundle b; - b.Add(ABSTRACT_ITEM_TYPE_KEY, to_string(GetType())); + struct tm* timeinfo; + char buf[80] = {0,}; + + if (!impl_->channel_.empty()) + b.Add(ABSTRACT_ITEM_CHANNEL_KEY, impl_->channel_); + b.Add(ABSTRACT_ITEM_ID_KEY, impl_->id_); b.Add(ABSTRACT_ITEM_SENDER_APPID_KEY, GetSenderAppId().c_str()); + b.Add(ABSTRACT_ITEM_TYPE_KEY, to_string(GetType())); + b.Add(ABSTRACT_ITEM_VERSION_KEY, to_string(impl_->version_)); + b.Add(ABSTRACT_ITEM_HIDE_TIME_KEY, to_string(impl_->hide_time_)); + b.Add(ABSTRACT_ITEM_DELETE_TIME_KEY, to_string(impl_->delete_time_)); + b.Add(ABSTRACT_ITEM_UID_KEY, to_string(impl_->uid_)); + b.Add(ABSTRACT_ITEM_REQUEST_ID_KEY, to_string(impl_->request_id_)); + + timeinfo = localtime(&impl_->time_); + strftime (buf, sizeof(buf), "%s", timeinfo); + b.Add(ABSTRACT_ITEM_TIME_KEY, string(buf)); + + if (!impl_->can_receive_.empty()) + b.Add(ABSTRACT_ITEM_CAN_RECEIVE_KEY, impl_->can_receive_); + + if (!impl_->sound_path_.empty()) + b.Add(ABSTRACT_ITEM_SOUND_PATH_KEY, impl_->sound_path_); + + if (!impl_->vibration_path_.empty()) + b.Add(ABSTRACT_ITEM_VIBRATION_PATH_KEY, impl_->vibration_path_); + + b.Add(ABSTRACT_ITEM_VISIBLE_KEY, to_string((int)impl_->visible_)); + + b.Add(ABSTRACT_ITEM_ENABLE_KEY, to_string((int)impl_->enable_)); + + b.Add(ABSTRACT_ITEM_POLICY_KEY, to_string((int)impl_->policy_)); + + if (impl_->receiver_group_list_.size() != 0) { + vector arr; + + for (auto& i : impl_->receiver_group_list_) { + string receiver = i; + + arr.push_back(receiver); + } + b.Add(ABSTRACT_ITEM_RECEIVER_GROUP_KEY, arr); + } + + if (impl_->style_ != nullptr) { + Padding padding = impl_->style_->GetPadding(); + b.Add(ABSTRACT_ITEM_STYLE_PADDING_LEFT_KEY, to_string(padding.GetLeft())); + b.Add(ABSTRACT_ITEM_STYLE_PADDING_TOP_KEY, to_string(padding.GetTop())); + b.Add(ABSTRACT_ITEM_STYLE_PADDING_RIGHT_KEY, to_string(padding.GetRight())); + b.Add(ABSTRACT_ITEM_STYLE_PADDING_BOTTOM_KEY, to_string(padding.GetBottom())); + + Color color = impl_->style_->GetColor(); + b.Add(ABSTRACT_ITEM_STYLE_COLOR_A_KEY, + to_string(static_cast(color.GetAVal()))); + b.Add(ABSTRACT_ITEM_STYLE_COLOR_R_KEY, + to_string(static_cast(color.GetRVal()))); + b.Add(ABSTRACT_ITEM_STYLE_COLOR_G_KEY, + to_string(static_cast(color.GetGVal()))); + b.Add(ABSTRACT_ITEM_STYLE_COLOR_B_KEY, + to_string(static_cast(color.GetBVal()))); + + Geometry geometry = impl_->style_->GetGeometry(); + b.Add(ABSTRACT_ITEM_STYLE_GEOMETRY_X_KEY, to_string(geometry.GetX())); + b.Add(ABSTRACT_ITEM_STYLE_GEOMETRY_Y_KEY, to_string(geometry.GetY())); + b.Add(ABSTRACT_ITEM_STYLE_GEOMETRY_WIDTH_KEY, to_string(geometry.GetWidth())); + b.Add(ABSTRACT_ITEM_STYLE_GEOMETRY_HEIGHT_KEY, to_string(geometry.GetHeight())); + + b.Add(ABSTRACT_ITEM_STYLE_IS_EXIST_KEY, ABSTRACT_ITEM_TRUE); + } + + if (impl_->led_ != nullptr) { + b.Add(ABSTRACT_ITEM_LED_ON_PERIOD_KEY, to_string(impl_->led_->GetOnPeriod())); + b.Add(ABSTRACT_ITEM_LED_OFF_PERIOD_KEY, to_string(impl_->led_->GetOffPeriod())); + b.Add(ABSTRACT_ITEM_LED_COLOR_A_KEY, + to_string(static_cast(impl_->led_->GetColor().GetAVal()))); + b.Add(ABSTRACT_ITEM_LED_COLOR_R_KEY, + to_string(static_cast(impl_->led_->GetColor().GetRVal()))); + b.Add(ABSTRACT_ITEM_LED_COLOR_G_KEY, + to_string(static_cast(impl_->led_->GetColor().GetGVal()))); + b.Add(ABSTRACT_ITEM_LED_COLOR_B_KEY, + to_string(static_cast(impl_->led_->GetColor().GetBVal()))); + b.Add(ABSTRACT_ITEM_LED_IS_EXIST_KEY, ABSTRACT_ITEM_TRUE); + } + + if (impl_->action_ != nullptr) { + b.Add(ABSTRACT_ITEM_ACTION_KEY, + reinterpret_cast(impl_->action_->Serialize().ToRaw().first.get())); + } + return b; } void AbstractItem::Deserialize(Bundle b) { + string time_s; + struct tm timeinfo; + string type_str = b.GetString(ABSTRACT_ITEM_TYPE_KEY); if (type_str.empty()) THROW(NOTIFICATION_ERROR_IO_ERROR); - string id_str = b.GetString(ABSTRACT_ITEM_ID_KEY); - impl_->id_ = id_str; + impl_->id_ = b.GetString(ABSTRACT_ITEM_ID_KEY); impl_->sender_appid_ = b.GetString(ABSTRACT_ITEM_SENDER_APPID_KEY); + impl_->channel_ = b.GetString(ABSTRACT_ITEM_CHANNEL_KEY); + impl_->version_ = stoi(b.GetString(ABSTRACT_ITEM_VERSION_KEY)); + impl_->hide_time_ = stoi(b.GetString(ABSTRACT_ITEM_HIDE_TIME_KEY)); + impl_->delete_time_ = stoi(b.GetString(ABSTRACT_ITEM_DELETE_TIME_KEY)); + impl_->can_receive_ = b.GetString(ABSTRACT_ITEM_CAN_RECEIVE_KEY); + impl_->sound_path_ = b.GetString(ABSTRACT_ITEM_SOUND_PATH_KEY); + impl_->vibration_path_ = b.GetString(ABSTRACT_ITEM_VIBRATION_PATH_KEY); + impl_->uid_ = stoi(b.GetString(ABSTRACT_ITEM_UID_KEY)); + impl_->request_id_ = stoi(b.GetString(ABSTRACT_ITEM_REQUEST_ID_KEY)); + + time_s = b.GetString(ABSTRACT_ITEM_TIME_KEY); + strptime(time_s.c_str(), "%s", &timeinfo); + impl_->time_ = mktime(&timeinfo); + + string policy_str = b.GetString(ABSTRACT_ITEM_POLICY_KEY); + + impl_->policy_ = static_cast(stoi(policy_str)); + + impl_->visible_ = (bool)stoi(b.GetString(ABSTRACT_ITEM_VISIBLE_KEY)); + + impl_->enable_ = (bool)stoi(b.GetString(ABSTRACT_ITEM_ENABLE_KEY)); + + vector str_arr = b.GetStringArray(ABSTRACT_ITEM_RECEIVER_GROUP_KEY); + + if (str_arr.size() != 0) { + for (string str : str_arr) { + impl_->receiver_group_list_.push_back(str); + } + } + + if (!b.GetString(ABSTRACT_ITEM_STYLE_IS_EXIST_KEY).compare(ABSTRACT_ITEM_TRUE)) { + Padding padding(stoi(b.GetString(ABSTRACT_ITEM_STYLE_PADDING_LEFT_KEY)), + stoi(b.GetString(ABSTRACT_ITEM_STYLE_PADDING_TOP_KEY)), + stoi(b.GetString(ABSTRACT_ITEM_STYLE_PADDING_RIGHT_KEY)), + stoi(b.GetString(ABSTRACT_ITEM_STYLE_PADDING_BOTTOM_KEY))); + + Color color( + static_cast(stoi(b.GetString(ABSTRACT_ITEM_STYLE_COLOR_A_KEY))), + static_cast(stoi(b.GetString(ABSTRACT_ITEM_STYLE_COLOR_R_KEY))), + static_cast(stoi(b.GetString(ABSTRACT_ITEM_STYLE_COLOR_G_KEY))), + static_cast(stoi(b.GetString(ABSTRACT_ITEM_STYLE_COLOR_B_KEY)))); + + Geometry geometry(stoi(b.GetString(ABSTRACT_ITEM_STYLE_GEOMETRY_X_KEY)), + stoi(b.GetString(ABSTRACT_ITEM_STYLE_GEOMETRY_Y_KEY)), + stoi(b.GetString(ABSTRACT_ITEM_STYLE_GEOMETRY_WIDTH_KEY)), + stoi(b.GetString(ABSTRACT_ITEM_STYLE_GEOMETRY_HEIGHT_KEY))); + + impl_->style_ = make_shared