--- /dev/null
+# This file contains a list of people who've made non-trivial contribution
+# to the Privacy Setting project. People who commit code to the project are
+# encouraged to add their names here. Please keep the list sorted by first
+# names.
+
+Bartlomiej Grzelewski <b.grzelewski@samsung.com>
+Eduardo Iyoda <emi@cesar.org.br>
+Fabio Urquiza <flus@cesar.org.br>
+Gabriel Finch <gf@cesar.org.br>
+Jooseong Lee <jooseong.lee@samsung.com>
+Jungkon Kim <jungkon.kim@samsung.com>
+Kim Kidong <kd0228.kim@samsung.com>
+Kyoungyong Lee <k.y.lee@samsung.com>
+MyungJoo Ham <myungjoo.ham@samsung.com>
+Saulo Moraes <s.moraes@samsung.com>
+Seonil Kim <seonil47.kim@samsung.com>
+Yunjin Lee <yunjin-.lee@samsung.com>
*/
void left_trim(char *text, const size_t len_text);
+
+/**
+ * @brief check if string is empty
+ * @param[in] str the string to be checked
+ *
+ * @return true if string is empty or NULL; false otherwise
+ */
+bool is_empty(const char* str);
+
#ifdef _cplusplus
}
#endif
static void move_menu_popup(Evas_Object *app_win, Evas_Object *ctxpopup)
{
Evas_Coord w, h;
- int pos = -1;
-
elm_win_screen_size_get(app_win, NULL, NULL, &w, &h);
- pos = elm_win_rotation_get(app_win);
+ int pos = elm_win_rotation_get(app_win);
switch (pos) {
case 0:
* @brief Helper functions that encapsulate text entry objects.
*/
-#include "common_utils.h"
-
#include "common_edit_field.h"
+#include "common_utils.h"
typedef struct {
Evas_Object *edit_field;
return data->edit_field;
}
-bool is_edit_field_empty(dlp_edit_field *edit_field)
-{
- if (NULL == edit_field) {
- LOGW("NULL parameter");
- return true;
- }
- dlp_edit_field_data_s *data = edit_field;
- return elm_entry_is_empty(data->entry) ? true : false;
-}
-
dlp_edit_field *add_edit_field_to_grid(
Evas_Object *rule_grid,
const char *text,
return NULL;
}
- dlp_edit_field_data_s *data = malloc(sizeof(dlp_edit_field_data_s));
- if (NULL == data) {
- LOGE("Failed to allocate memory");
- return NULL;
- }
+ dlp_edit_field_data_s *data = g_slice_new(dlp_edit_field_data_s);
data->edit_field = elm_layout_add(parent);
data->entry = elm_entry_add(data->edit_field);
data->changed_cb = changed_cb;
elm_object_style_set(clear_button, "editfield_clear");
evas_object_smart_callback_add(clear_button, "clicked", _edit_field_clear_button_clicked_cb, data->entry);
elm_object_part_content_set(data->edit_field, "elm.swallow.button", clear_button);
- } else
+ } else {
elm_entry_editable_set(data->entry, EINA_FALSE);
-
+ }
elm_entry_entry_set(data->entry, text);
elm_object_part_text_set(data->entry, "elm.guide", guide_text);
elm_object_part_content_set(data->edit_field, "elm.swallow.content", data->entry);
void free_edit_field(dlp_edit_field *edit_field)
{
- free((dlp_edit_field_data_s *)edit_field);
+ g_slice_free(dlp_edit_field_data_s, edit_field);
}
evas_object_del(popup);
}
-void add_button_to_popup(Evas_Object *popup, void *data, const char* button_text, const char* button_part, Evas_Smart_Cb button_callback)
+static void add_button_to_popup(Evas_Object *popup, void *data, const char* button_text, const char* button_part, Evas_Smart_Cb button_callback)
{
Evas_Object *button = elm_button_add(popup);
elm_object_style_set(button, "popup");
*/
#include <efl_extension.h>
-
#include "common_utils.h"
static void gl_language_changed_cb(void *data, Evas_Object *obj, void *event_info)
*/
void free_dlp_rule(void *rule)
{
- free((get_custom_rule_s *)rule);
+ g_slice_free(get_custom_rule_s, rule);
}
/**
*/
void free_dlp_pattern(void *pattern)
{
- free((get_pattern_s *)pattern);
+ g_slice_free(get_pattern_s, pattern);
}
static bool _get_pattern_ids_in_use_cb(
return true;
}
-gint _compare_pattern_id_cb(gconstpointer lhs, gconstpointer rhs)
+static gint _compare_pattern_id_cb(gconstpointer lhs, gconstpointer rhs)
{
const int lhs_int = GPOINTER_TO_INT(lhs);
const int rhs_int = GPOINTER_TO_INT(rhs);
for (size_t i = pos; i < len_text; ++i)
text[i - pos] = text[i];
}
+
+bool is_empty(const char* str)
+{
+ return (NULL == str) ? true : '\0' == str[0];
+}
Name: org.tizen.privacy-setting-profile_mobile
Summary: Privacy setting ui application
-Version: 1.0.0
+Version: 1.0.1
Release: 1
Provides: org.tizen.privacy-setting = %{version}-%{release}
Group: Applications/Other
BuildRequires: pkgconfig(security-privilege-manager)
BuildRequires: pkgconfig(security-manager)
BuildRequires: pkgconfig(pkgmgr-info)
-BuildRequires: pkgconfig(privacy-guard-client)
+BuildRequires: pkgconfig(privacy-guard-setting)
BuildRequires: pkgconfig(capi-appfw-app-manager)
BuildRequires: pkgconfig(capi-appfw-application)
BuildRequires: pkgconfig(notification)
INCLUDE(FindPkgConfig)
SET(pkg_name "org.tizen.privacy-setting")
-pkg_check_modules(${pkg_name} REQUIRED glib-2.0 evas elementary edje eina efl-extension security-privilege-manager icu-i18n dlog security-manager pkgmgr-info privacy-guard-client capi-appfw-app-manager capi-appfw-application notification)
+pkg_check_modules(${pkg_name} REQUIRED glib-2.0 evas elementary edje eina efl-extension security-privilege-manager icu-i18n dlog security-manager pkgmgr-info privacy-guard-setting capi-appfw-app-manager capi-appfw-application notification)
SET(SRCS
${CMAKE_SOURCE_DIR}/common/src/common_utils.c
Elm_Object_Item *pop_to_nf_it;
} choose_app_data_s;
-void free_application_item(void *item)
+static void free_application_item(void *item)
{
if (NULL != item) {
application_item_s *app_item = item;
free(app_item->id);
free(app_item->name);
free(app_item->icon_path);
- free(app_item);
+ g_slice_free(application_item_s, item);
}
}
-size_t get_number_of_selected_apps(Evas_Object *genlist);
-void set_app_item_check_state(Elm_Object_Item *item, const bool state);
-void delete_unchecked_apps_rules(const GList *editing_rules_list, GList *selected_apps_list);
+static size_t get_number_of_selected_apps(Evas_Object *genlist);
+static void set_app_item_check_state(Elm_Object_Item *item, const bool state);
+static void delete_unchecked_apps_rules(const GList *editing_rules_list, GList *selected_apps_list);
static bool _choose_apps_get_custom_rules_cb(int id, PgDlpAction action, int pattern_id, const char *name, const char *description, const char *application_id, int leaks_count, void *user_data)
{
const get_custom_rule_s *original_rule = data->original_rule;
if (original_rule->action == action && original_rule->pattern_id == pattern_id) {
// Note that rule will be freed in _choose_app_nf_pop_cb(), together with data->editing_rules_list
- get_custom_rule_s *rule = malloc(sizeof(get_custom_rule_s));
-
- if (rule != NULL) {
- rule->id = id;
- rule->action = action;
- rule->pattern_id = pattern_id;
- strncpy(rule->name, name, LEN_NAME);
- rule->name[LEN_NAME - 1] = '\0';
- strncpy(rule->description, description, LEN_DESCRIPTION);
- rule->description[LEN_DESCRIPTION - 1] = '\0';
- rule->leaks_count = leaks_count;
- strncpy(rule->application_id, application_id, LEN_APPLICATION_ID);
- rule->application_id[LEN_APPLICATION_ID - 1] = '\0';
-
- data->editing_rules_list = g_list_prepend(data->editing_rules_list, rule);
- } else {
- return false;
- }
+ get_custom_rule_s *rule = g_slice_new(get_custom_rule_s);
+
+ rule->id = id;
+ rule->action = action;
+ rule->pattern_id = pattern_id;
+ strncpy(rule->name, name, LEN_NAME);
+ rule->name[LEN_NAME - 1] = '\0';
+ strncpy(rule->description, description, LEN_DESCRIPTION);
+ rule->description[LEN_DESCRIPTION - 1] = '\0';
+ rule->leaks_count = leaks_count;
+ strncpy(rule->application_id, application_id, LEN_APPLICATION_ID);
+ rule->application_id[LEN_APPLICATION_ID - 1] = '\0';
+
+ data->editing_rules_list = g_list_prepend(data->editing_rules_list, rule);
}
return true;
}
static bool _choose_app_app_info_cb(app_info_h app_info, void *user_data)
{
// Note that app will be freed in _choose_app_nf_pop_cb(), together with choose_app_data->app_list
- application_item_s *app = malloc(sizeof(application_item_s));
-
- if (app != NULL) {
- app->id = NULL;
- int res = app_info_get_app_id(app_info, &(app->id));
- if (res < 0) {
- LOGE("app_info_get_id() failed. Error=%d", res);
- // without an app_id it is not possible to create
- // an app specific DLP rule, so we bail out
- free(app);
- return true;
- }
-
- // Note that app->name bellow will be freed by free_application_item(),
- // called in _choose_app_nf_pop_cb()
- char *label = NULL;
- res = app_info_get_label(app_info, &label);
- if (res < 0) {
- LOGE("%s: app_info_get_label() failed. Error=%d", app->id, res);
- app->name = make_default_app_name(app->id);
- } else {
- if ('\0' == label[0]) {
- free(label);
- label = make_default_app_name(app->id);
- }
- app->name = label;
- }
+ application_item_s *app = g_slice_new(application_item_s);
- // Note that app->icon_path bellow will be freed by free_application_item(),
- // called in _choose_app_nf_pop_cb()
- app->icon_path = NULL;
- res = app_info_get_icon(app_info, &(app->icon_path));
- if (res < 0) {
- LOGE("app_info_get_icon() failed. Error=%d", res);
- app->icon_path = strdup(DEFAULT_ICON_PATH);
- }
+ app->id = NULL;
+ int res = app_info_get_app_id(app_info, &(app->id));
+ if (res < 0) {
+ LOGE("app_info_get_id() failed. Error=%d", res);
+ // without an app_id it is not possible to create
+ // an app specific DLP rule, so we bail out
+ free(app);
+ return true;
+ }
- choose_app_data_s *choose_app_data = user_data;
- if (NULL == choose_app_data->editing_rule)
- app->is_checked = true;
- else {
- app->is_checked = (0 == strcmp(choose_app_data->editing_rule->application_id, "")
- || g_list_find_custom(choose_app_data->editing_rules_list, app->id, _compare_rule_app_id_cb));
+ // Note that app->name bellow will be freed by free_application_item(),
+ // called in _choose_app_nf_pop_cb()
+ char *label = NULL;
+ res = app_info_get_label(app_info, &label);
+ if (res < 0) {
+ LOGE("%s: app_info_get_label() failed. Error=%d", app->id, res);
+ app->name = make_default_app_name(app->id);
+ } else {
+ if (is_empty(label)) {
+ free(label);
+ label = make_default_app_name(app->id);
}
+ app->name = label;
+ }
- app->check = NULL;
+ // Note that app->icon_path bellow will be freed by free_application_item(),
+ // called in _choose_app_nf_pop_cb()
+ app->icon_path = NULL;
+ res = app_info_get_icon(app_info, &(app->icon_path));
+ if (res < 0) {
+ LOGE("app_info_get_icon() failed. Error=%d", res);
+ app->icon_path = strdup(DEFAULT_ICON_PATH);
+ }
- choose_app_data->app_list = g_list_prepend(choose_app_data->app_list, app);
+ choose_app_data_s *choose_app_data = user_data;
+ if (NULL == choose_app_data->editing_rule)
+ app->is_checked = true;
+ else {
+ app->is_checked = (is_empty(choose_app_data->editing_rule->application_id)
+ || g_list_find_custom(choose_app_data->editing_rules_list, app->id, _compare_rule_app_id_cb));
}
+
+ app->check = NULL;
+
+ choose_app_data->app_list = g_list_prepend(choose_app_data->app_list, app);
+
return true;
}
return strcasecmp(((const application_item_s *)lhs)->name, ((const application_item_s *)rhs)->name);
}
-static gint _compare_apps_id_cb(gconstpointer lhs, gconstpointer rhs)
-{
- return strcmp(((const application_item_s *)lhs)->id, (const char*)rhs);
-}
-
/**
* @brief Internal callback function invoked when application genlist item is displayed
* @param[in] data The item data passed to the elm_genlist_item_append() function
return NULL;
}
+static void _gl_choose_app_content_del_cb(void *data, Evas_Object* obj)
+{
+ free_application_item(data);
+}
+
/**
* @brief Internal callback function when the choose application menu is popped from naviframe
* @param[in] data The user data passed to the callback function
static Eina_Bool _choose_app_nf_pop_cb(void *data, Evas_Object* obj)
{
choose_app_data_s *choose_app_data = data;
- g_list_free_full(choose_app_data->app_list, free_application_item);
+ g_list_free(choose_app_data->app_list);
choose_app_data->app_list = NULL;
- g_list_free_full(choose_app_data->editing_rules_list, free);
+ g_list_free_full(choose_app_data->editing_rules_list, free_dlp_rule);
choose_app_data->editing_rules_list = NULL;
if (NULL == choose_app_data->rule_template)
elm_object_disabled_set(choose_app_data->next_button, disable_next_button);
}
-size_t get_number_of_selected_apps(Evas_Object *genlist)
+static size_t get_number_of_selected_apps(Evas_Object *genlist)
{
const size_t total_apps = elm_genlist_items_count(genlist);
size_t app_count = 0;
return app_count;
}
-void create_select_all_apps_item(choose_app_data_s *data)
+static void create_select_all_apps_item(choose_app_data_s *data)
{
// Note that select_all_item bellow will be freed by free_application_item(),
// called in _choose_app_nf_pop_cb()
- application_item_s *select_all_item = calloc(1, sizeof(application_item_s));
- if (NULL != select_all_item) {
- select_all_item->id = SELECT_ALL_APPS_ITEM_ID;
- select_all_item->name = strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SELECT_ALL));
- const get_custom_rule_s *editing_rule = data->editing_rule;
- select_all_item->is_checked = (NULL == editing_rule || (NULL != editing_rule && '\0' == editing_rule->application_id[0]));
- select_all_item->check = NULL;
- data->app_list = g_list_prepend(data->app_list, select_all_item);
- }
+ application_item_s *select_all_item = g_slice_new0(application_item_s);
+ select_all_item->id = SELECT_ALL_APPS_ITEM_ID;
+ select_all_item->name = strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SELECT_ALL));
+ const get_custom_rule_s *editing_rule = data->editing_rule;
+ select_all_item->is_checked = (NULL == editing_rule || is_empty(editing_rule->application_id));
+ select_all_item->check = NULL;
+ data->app_list = g_list_prepend(data->app_list, select_all_item);
}
-void set_app_item_check_state(Elm_Object_Item *item, const bool state)
+static void set_app_item_check_state(Elm_Object_Item *item, const bool state)
{
if (NULL != item) {
application_item_s *app_item = elm_object_item_data_get(item);
}
}
-void delete_unchecked_apps_rules(const GList *editing_rules_list, GList *selected_apps_list)
+static void delete_unchecked_apps_rules(const GList *editing_rules_list, GList *selected_apps_list)
{
const GList *l;
for (l = editing_rules_list; l != NULL; l = l->next) {
static choose_app_data_s data = { .ad = NULL, .app_list = NULL, .config = NULL, .rule_template = NULL, .genlist = NULL, .pop_to_nf_it = NULL };
data.ad = ad;
- g_list_free_full(data.app_list, free_application_item);
data.app_list = NULL;
data.config = config;
data.rule_template = rule_template;
itc->item_style = "multiline";
itc->func.text_get = _gl_choose_app_text_get_cb;
itc->func.content_get = _gl_choose_app_content_get_cb;
- itc->func.del = NULL;
- Elm_Object_Item *it = NULL;
+ itc->func.del = _gl_choose_app_content_del_cb;
GList* l;
for (l = g_list_nth(data.app_list, 1); l != NULL; l = l->next) {
// append item to the genlist
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(data.genlist, itc, l->data, NULL, ELM_GENLIST_ITEM_NONE, _choose_app_menu_item_selected_cb, &data);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
int leaks_count,
void *user_data)
{
- get_pattern_s *dlp_pattern = malloc(sizeof(get_pattern_s));
-
- if (dlp_pattern != NULL) {
- dlp_pattern->id = id;
- strncpy(dlp_pattern->pattern, pattern, LEN_PATTERN);
- dlp_pattern->pattern[LEN_PATTERN - 1] = '\0';
- strncpy(dlp_pattern->name, name, LEN_NAME);
- dlp_pattern->name[LEN_NAME - 1] = '\0';
- strncpy(dlp_pattern->description, description, LEN_DESCRIPTION);
- dlp_pattern->description[LEN_DESCRIPTION - 1] = '\0';
- dlp_pattern->type = type;
- strncpy(dlp_pattern->category.text, category, LEN_CATEGORY);
- dlp_pattern->category.text[LEN_CATEGORY - 1] = '\0';
- dlp_pattern->undeletable = undeletable;
- dlp_pattern->leaks_count = leaks_count;
-
- /* add pattern to pattern list */
- quick_rule_template_data_s *data = user_data;
- data->pattern_list = g_list_append(data->pattern_list, dlp_pattern);
- }
+ get_pattern_s *dlp_pattern = g_slice_new(get_pattern_s);
+
+ dlp_pattern->id = id;
+ strncpy(dlp_pattern->pattern, pattern, LEN_PATTERN);
+ dlp_pattern->pattern[LEN_PATTERN - 1] = '\0';
+ strncpy(dlp_pattern->name, name, LEN_NAME);
+ dlp_pattern->name[LEN_NAME - 1] = '\0';
+ strncpy(dlp_pattern->description, description, LEN_DESCRIPTION);
+ dlp_pattern->description[LEN_DESCRIPTION - 1] = '\0';
+ dlp_pattern->type = type;
+ strncpy(dlp_pattern->category.text, category, LEN_CATEGORY);
+ dlp_pattern->category.text[LEN_CATEGORY - 1] = '\0';
+ dlp_pattern->undeletable = undeletable;
+ dlp_pattern->leaks_count = leaks_count;
+
+ /* add pattern to pattern list */
+ quick_rule_template_data_s *data = user_data;
+ data->pattern_list = g_list_prepend(data->pattern_list, dlp_pattern);
+
return true;
}
{
quick_rule_template_item_s *item = data;
evas_object_del(item->radio);
- free(item);
+ g_slice_free(quick_rule_template_item_s, item);
}
/**
* @param[in] data The user data passed to the callback function
* @param[in] obj The object invoking this callback function
*/
-Eina_Bool _rule_template_nf_pop_cb(void *data, Evas_Object* obj)
+static Eina_Bool _rule_template_nf_pop_cb(void *data, Evas_Object* obj)
{
quick_rule_template_data_s *rule_template_data = data;
g_list_free_full(rule_template_data->pattern_list, free_dlp_pattern);
*/
void clean_up_privacy_dlp_choose_rule_template_view()
{
- g_list_free_full(quick_rule_template_data.pattern_list, free_dlp_rule);
+ g_list_free_full(quick_rule_template_data.pattern_list, free_dlp_pattern);
quick_rule_template_data.pattern_list = NULL;
}
LOGE("privacy_guard_client_foreach_dlp_patterns() failed. [%d]", res);
return;
}
+ quick_rule_template_data.pattern_list = g_list_reverse(quick_rule_template_data.pattern_list);
Evas_Object *genlist = common_genlist_add(ad->nf);
evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
itc->func.content_get = _gl_rule_template_get_cb;
itc->func.del = _gl_rule_template_del_cb;
- Elm_Object_Item *it = NULL;
GList* l;
for (l = quick_rule_template_data.pattern_list; l != NULL; l = l->next) {
- quick_rule_template_item_s *item = calloc(1, sizeof(quick_rule_template_item_s));
+ quick_rule_template_item_s *item = g_slice_new0(quick_rule_template_item_s);
- if (item != NULL) {
- // item data
- item->pattern = l->data;
- item->radio = NULL;
+ // item data
+ item->pattern = l->data;
+ item->radio = NULL;
- // append item to the genlist
- it = elm_genlist_item_append(genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _rule_template_menu_item_selected_cb, &quick_rule_template_data);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
+ // append item to the genlist
+ Elm_Object_Item *it = elm_genlist_item_append(genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _rule_template_menu_item_selected_cb, &quick_rule_template_data);
+ log_if(it == NULL, 1, "Error in elm_genlist_item_append");
- // check if pattern is already in use
- if (g_list_find(quick_rule_template_data.patterns_in_use_list, GINT_TO_POINTER(item->pattern->id)) != NULL)
- elm_object_item_disabled_set(it, EINA_TRUE);
+ // check if pattern is already in use
+ if (g_list_find(quick_rule_template_data.patterns_in_use_list, GINT_TO_POINTER(item->pattern->id)) != NULL)
+ elm_object_item_disabled_set(it, EINA_TRUE);
- evas_object_smart_callback_add(genlist, "realized", _gl_rule_template_item_realized_cb, &quick_rule_template_data);
- } else {
- LOGE("privacy_guard_client_foreach_dlp_patterns() failed to calloc quick_rule_template_item_s");
- }
+ evas_object_smart_callback_add(genlist, "realized", _gl_rule_template_item_realized_cb, &quick_rule_template_data);
}
elm_genlist_item_class_free(itc);
{
log_details_data_s *ldd = data;
+ if (!ldd->ctxpopup) {
+ ldd->ctxpopup = create_ctxpop(ldd->ad);
+ elm_ctxpopup_item_append(ldd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE), NULL, _log_details_delete_menu_cb, data);
+ evas_object_smart_callback_add(ldd->ctxpopup, "dismissed", _log_details_menu_dismissed_cb, ldd);
+ } else {
+ evas_object_show(ldd->ctxpopup);
+ }
+
eext_object_event_callback_del(ldd->entry, EEXT_CALLBACK_MORE, _log_details_menu_cb);
eext_object_event_callback_add(ldd->entry, EEXT_CALLBACK_MORE, _log_details_dismiss_menu_cb, ldd);
-
- ldd->ctxpopup = create_ctxpop(ldd->ad);
- elm_ctxpopup_item_append(ldd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE), NULL, _log_details_delete_menu_cb, data);
- evas_object_smart_callback_add(ldd->ctxpopup, "dismissed", _log_details_menu_dismissed_cb, ldd);
}
static void _log_details_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
{
log_details_data_s *ldd = data;
- delete_ctxpopup(obj);
- ldd->ctxpopup = NULL;
eext_object_event_callback_del(ldd->entry, EEXT_CALLBACK_MORE, _log_details_dismiss_menu_cb);
if (NULL == ldd->confirm_popup)
elm_naviframe_item_pop(ldd->ad->nf);
}
-char* get_log_action(int action)
+static bool is_undisplayable_char(const unsigned char value)
{
- switch (action) {
- case PRIV_GUARD_DLP_ACTION_ALLOW:
- return dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION_ALLOW);
- case PRIV_GUARD_DLP_ACTION_DENY:
- return dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION_DENY);
- case PRIV_GUARD_DLP_ACTION_SANITIZE:
- return dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION_SANITIZE);
- default:
- return " ";
- }
+ return (value != 0xa && value != 0xd && (value < ' ' || value > '~'));
}
-bool is_undisplayable_char(const unsigned char value)
+static void add_log_info_to_entry(Evas_Object *entry, const char *format, ...)
{
- return (value != 0xa && value != 0xd && (value < ' ' || value > '~'));
+ va_list arg_list;
+ va_start(arg_list, format);
+
+ GString* string_buf = g_string_new(NULL);
+ g_string_vprintf(string_buf, format, arg_list);
+ elm_entry_entry_insert(entry, string_buf->str);
+ g_string_free(string_buf, TRUE);
+
+ va_end(arg_list);
+}
+
+static void add_raw_packet_to_entry(Evas_Object *entry, const leak_log_get_detail_data_s *detailed_log)
+{
+ if (detailed_log->leak_len > 0) {
+ // Copy raw packet to a temporary buffer
+ const size_t packet_len = (detailed_log->pkt_len < LEN_RAW_PACKET) ? detailed_log->pkt_len : LEN_RAW_PACKET;
+ const size_t raw_buffer_len = packet_len + 1;
+ char *raw_packet = g_slice_alloc(raw_buffer_len);
+
+ memcpy(raw_packet, detailed_log->raw_packet, packet_len);
+
+ size_t i;
+ // Replaces undisplayable characters with "."
+ for (i = 0; i < packet_len; ++i) {
+ if (is_undisplayable_char(raw_packet[i]))
+ raw_packet[i] = '.';
+ }
+
+ char temp_char = raw_packet[detailed_log->leak_offset];
+ raw_packet[detailed_log->leak_offset] = 0;
+ elm_entry_entry_insert(entry, elm_entry_utf8_to_markup(raw_packet));
+ elm_entry_entry_insert(entry, "<hilight>");
+ raw_packet[detailed_log->leak_offset] = temp_char;
+ temp_char = raw_packet[detailed_log->leak_offset + detailed_log->leak_len];
+ raw_packet[detailed_log->leak_offset + detailed_log->leak_len] = 0;
+ elm_entry_entry_insert(entry, elm_entry_utf8_to_markup(raw_packet + detailed_log->leak_offset));
+ elm_entry_entry_insert(entry, "</hilight>");
+ raw_packet[detailed_log->leak_offset + detailed_log->leak_len] = temp_char;
+ // Make sure buffer is zero terminated
+ raw_packet[packet_len] = 0;
+ elm_entry_entry_insert(entry, elm_entry_utf8_to_markup(raw_packet + detailed_log->leak_offset + detailed_log->leak_len));
+
+ g_slice_free1(raw_buffer_len, raw_packet);
+ }
}
/**
int res = privacy_guard_client_get_leak_log_detail(user_id, item->data->log_id, &detailed_log);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_get_leak_log_detail() is failed. [%d]", res);
- char *log_info_syntax = "<br><b>%s </b> %s<br>";
-
- size_t string_mem_needed = snprintf(NULL, 0, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_CATEGORY), detailed_log.category.text);
- char *string_buf = malloc(string_mem_needed + 1);
- if (NULL != string_buf) {
- snprintf(string_buf, string_mem_needed+1, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_CATEGORY), detailed_log.category.text);
- elm_entry_entry_insert(entry, string_buf);
- free(string_buf);
- }
-
- string_mem_needed = snprintf(NULL, 0, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_APPLICATION), detailed_log.application_name);
- string_buf = malloc(string_mem_needed + 1);
- if (NULL != string_buf) {
- snprintf(string_buf, string_mem_needed+1, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_APPLICATION), detailed_log.application_name);
- elm_entry_entry_insert(entry, string_buf);
- free(string_buf);
- }
-
- string_mem_needed = snprintf(NULL, 0, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_DESTINATION), detailed_log.destination);
- string_buf = malloc(string_mem_needed + 1);
- if (NULL != string_buf) {
- snprintf(string_buf, string_mem_needed+1, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_DESTINATION), detailed_log.destination);
- elm_entry_entry_insert(entry, string_buf);
- free(string_buf);
- }
-
- string_mem_needed = snprintf(NULL, 0, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_PATTERN), detailed_log.pattern_name);
- string_buf = malloc(string_mem_needed + 1);
- if (NULL != string_buf) {
- snprintf(string_buf, string_mem_needed+1, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_PATTERN), detailed_log.pattern_name);
- elm_entry_entry_insert(entry, string_buf);
- free(string_buf);
- }
-
+ const char *log_info_syntax = "<br><b>%s </b> %s<br>";
+ add_log_info_to_entry(entry, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_CATEGORY), detailed_log.category.text);
+ add_log_info_to_entry(entry, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_APPLICATION), detailed_log.application_name);
+ add_log_info_to_entry(entry, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_DESTINATION), detailed_log.destination);
+ add_log_info_to_entry(entry, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_PATTERN), detailed_log.pattern_name);
// NOTE: code below is commented out because only allow actions will be
// released to Tizen 4.0, so action information is not meaningful.
- // string_mem_needed = snprintf(NULL, 0, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION), get_log_action(detailed_log.action));
- // string_buf = malloc(string_mem_needed+1);
- // sprintf(string_buf, log_info_syntax, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION), get_log_action(detailed_log.action));
- // elm_entry_entry_insert(entry, string_buf);
- // free(string_buf);
-
- string_mem_needed = snprintf(NULL, 0, "<br><b>%s</b><br>", dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_LOG));
- string_buf = malloc(string_mem_needed + 1);
- if (NULL != string_buf) {
- snprintf(string_buf, string_mem_needed+1, "<br><b>%s</b><br>", dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_LOG));
- elm_entry_entry_insert(entry, string_buf);
- free(string_buf);
- }
-
- if (detailed_log.leak_len > 0) {
- // Copy raw packet to a temporary buffer
- const size_t packet_len = (detailed_log.pkt_len < LEN_RAW_PACKET) ? detailed_log.pkt_len : LEN_RAW_PACKET;
- char *raw_packet = malloc(packet_len + 1);
-
- if (raw_packet != NULL) {
- memcpy(raw_packet, detailed_log.raw_packet, packet_len);
-
- size_t i;
- // Replaces undisplayable characters with "."
- for (i = 0; i < packet_len; ++i) {
- if (is_undisplayable_char(raw_packet[i]))
- raw_packet[i] = '.';
- }
-
- char temp_char = raw_packet[detailed_log.leak_offset];
- raw_packet[detailed_log.leak_offset] = 0;
- elm_entry_entry_insert(entry, elm_entry_utf8_to_markup(raw_packet));
- elm_entry_entry_insert(entry, "<hilight>");
- raw_packet[detailed_log.leak_offset] = temp_char;
- temp_char = raw_packet[detailed_log.leak_offset + detailed_log.leak_len];
- raw_packet[detailed_log.leak_offset + detailed_log.leak_len] = 0;
- elm_entry_entry_insert(entry, elm_entry_utf8_to_markup(raw_packet + detailed_log.leak_offset));
- elm_entry_entry_insert(entry, "</hilight>");
- raw_packet[detailed_log.leak_offset + detailed_log.leak_len] = temp_char;
- // Make sure buffer is zero terminated
- raw_packet[packet_len] = 0;
- elm_entry_entry_insert(entry, elm_entry_utf8_to_markup(raw_packet + detailed_log.leak_offset + detailed_log.leak_len));
-
- free(raw_packet);
- }
- }
+ //add_log_info_to_entry(entry, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION), get_log_action(detailed_log.action));
+ add_log_info_to_entry(entry, "<br><b>%s</b><br>", dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_DETAILS_LOG));
+ add_raw_packet_to_entry(entry, &detailed_log);
evas_object_show(entry);
*/
static char* _gl_enabled_text_get_cb(void *data, Evas_Object *obj, const char *part)
{
- if (!strcmp(part, "elm.text"))
+ if (!strcmp(part, "elm.text")) {
return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_TITLE));
- else if (!strcmp(part, "elm.text.multiline")) {
- const char *format = "%s<font_size=25><br/>%s</font_size>";
- int string_mem_needed = snprintf(NULL, 0, format,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_DESCRIPTION),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_DESCRIPTION_NOTE));
- char *string_buf = malloc(string_mem_needed+1);
-
- if (string_buf != NULL) {
- snprintf(string_buf, string_mem_needed, format,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_DESCRIPTION),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_DESCRIPTION_NOTE));
- return string_buf;
- }
+ } else if (!strcmp(part, "elm.text.multiline")) {
+ GString *string_buf = g_string_new(NULL);
+ g_string_printf(string_buf, "%s<font_size=25><br/>%s</font_size>",
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_DESCRIPTION), dgettext("privacy-setting", PRIVACY_MENU_DLP_DESCRIPTION_NOTE));
+ char *description = strdup(string_buf->str);
+ g_string_free(string_buf, TRUE);
+ return description;
}
return NULL;
return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_CUSTOM_DESCRIPTION));
case PRIV_GUARD_DLP_PROFILE_ADVANCED:
{
- const char *format = "%s<font_size=25><br/>%s</font_size>";
- int string_mem_needed = snprintf(NULL, 0, format,
+ GString *string_buf = g_string_new(NULL);
+ g_string_printf(string_buf, "%s<font_size=25><br/>%s</font_size>",
dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_ADVANCED_DESCRIPTION),
dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_ADVANCED_DESCRIPTION_NOTE));
- char *string_buf = malloc(string_mem_needed+1);
-
- if (string_buf != NULL) {
- snprintf(string_buf, string_mem_needed, format,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_ADVANCED_DESCRIPTION),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_ADVANCED_DESCRIPTION_NOTE));
- return string_buf;
- }
-
- break;
+ char *advanced_description = strdup(string_buf->str);
+ g_string_free(string_buf, TRUE);
+ return advanced_description;
}
default:
LOGE("Invalid dlp profile configuration");
*/
static void _gl_del_item_cb(void *data, Evas_Object *obj)
{
- item_data_s *id = data;
- free(id);
+ g_slice_free(item_data_s, data);
}
/*
menu_reports_list = NULL;
}
- menu_reports_list = g_list_append(menu_reports_list, PRIVACY_MENU_DLP_REPORTS_FULL);
- menu_reports_list = g_list_append(menu_reports_list, PRIVACY_MENU_DLP_REPORTS_APP_RANK);
- menu_reports_list = g_list_append(menu_reports_list, PRIVACY_MENU_DLP_REPORTS_STATISTICS);
- menu_reports_list = g_list_append(menu_reports_list, PRIVACY_MENU_DLP_REPORTS_RULES_AND_PATTERNS);
+ menu_reports_list = g_list_prepend(menu_reports_list, PRIVACY_MENU_DLP_REPORTS_FULL);
+ menu_reports_list = g_list_prepend(menu_reports_list, PRIVACY_MENU_DLP_REPORTS_APP_RANK);
+ menu_reports_list = g_list_prepend(menu_reports_list, PRIVACY_MENU_DLP_REPORTS_STATISTICS);
+ menu_reports_list = g_list_prepend(menu_reports_list, PRIVACY_MENU_DLP_REPORTS_RULES_AND_PATTERNS);
+ menu_reports_list = g_list_reverse(menu_reports_list);
Elm_Genlist_Item_Class *gtc_reports = elm_genlist_item_class_new();
gtc_reports->item_style = "group_index";
int i = 0;
for (i = 0; i < (int)g_list_length(menu_reports_list); ++i) {
- item_data_s *id = calloc(1, sizeof(item_data_s)); // note that id is freed in _gl_del_item_cb
- if (NULL != id) {
- id->index = i;
- id->menu = (char*)g_list_nth_data(menu_reports_list, i);
- id->title = strdup(dgettext("privacy-setting", id->menu));
- it_reports = elm_genlist_item_append(genlist, itc_reports, id, NULL, ELM_GENLIST_ITEM_NONE, _selected_report_cb, ad);
- log_if(it_reports == NULL, 1, "Error in elm_genlist_item_append");
- }
+ item_data_s *id = g_slice_new0(item_data_s); // note that id is freed in _gl_del_item_cb
+ id->index = i;
+ id->menu = (char*)g_list_nth_data(menu_reports_list, i);
+ id->title = strdup(dgettext("privacy-setting", id->menu));
+ it_reports = elm_genlist_item_append(genlist, itc_reports, id, NULL, ELM_GENLIST_ITEM_NONE, _selected_report_cb, ad);
+ log_if(it_reports == NULL, 1, "Error in elm_genlist_item_append");
}
elm_genlist_item_class_free(itc_reports);
static bool _pattern_create_view_category_cb(const char *category, void *user_data)
{
pattern_create_view_data_s *pcvd = user_data;
- pcvd->category_list = g_list_append(pcvd->category_list, strdup(category));
+ pcvd->category_list = g_list_prepend(pcvd->category_list, strdup(category));
return true;
}
static void _pattern_create_view_free_category_cb(void *category)
{
- free((char *)category);
+ free(category);
}
static void _pattern_create_field_changed_cb(void *data, Evas_Object *obj, void* event_info)
elm_object_text_set(obj, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_REGULAR_EXPRESSION));
}
-Evas_Object *add_category_hoversel_to_grid(Evas_Object *rule_grid, pattern_create_view_data_s *data, int col, int row, int col_span, int row_span)
+static Evas_Object *add_category_hoversel_to_grid(Evas_Object *rule_grid, pattern_create_view_data_s *data, int col, int row, int col_span, int row_span)
{
Evas_Object *hoversel = elm_hoversel_add(rule_grid);
elm_hoversel_horizontal_set(hoversel, EINA_FALSE);
GList* l;
/* Append patterns to hoversel */
for (l = data->category_list; l != NULL; l = l->next) {
- const char *category = l->data;
- Elm_Object_Item *item = elm_hoversel_item_add(hoversel, category, NULL, ELM_ICON_NONE, _pattern_create_category_item_cb, category);
+ const char *category = l->data;
+ elm_hoversel_item_add(hoversel, category, NULL, ELM_ICON_NONE, _pattern_create_category_item_cb, category);
}
if (NULL != data->category_list) {
const char *first_category = (const char *)(data->category_list->data);
return hoversel;
}
-Evas_Object *add_type_hoversel_to_grid(Evas_Object *rule_grid, pattern_create_view_data_s *data, int col, int row, int col_span, int row_span)
+static Evas_Object *add_type_hoversel_to_grid(Evas_Object *rule_grid, pattern_create_view_data_s *data, int col, int row, int col_span, int row_span)
{
Evas_Object *hoversel = elm_hoversel_add(rule_grid);
elm_hoversel_horizontal_set(hoversel, EINA_FALSE);
/* Get dlp custom patterns from privacy guard */
const int res = privacy_guard_client_foreach_dlp_categories(_pattern_create_view_category_cb, &pattern_create_view_data);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_dlp_categories() failed. [%d]", res);
+ pattern_create_view_data.category_list = g_list_reverse(pattern_create_view_data.category_list);
Evas_Object *bg = elm_bg_add(ad->nf);
elm_bg_color_set(bg, 255, 255, 255);
static get_pattern_s pattern_delete_select_all_pattern = { .id = SELECT_ALL_PATTERNS_ITEM };
-size_t get_number_of_selected_patterns(Evas_Object *genlist);
+static size_t get_number_of_selected_patterns(Evas_Object *genlist);
void set_pattern_item_check_state(Elm_Object_Item *item, const bool state)
{
elm_naviframe_item_pop(pdvd->ad->nf);
if (total_patterns_deleted > 0) {
+ GString *string_buf = g_string_new(NULL);
const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_MESSAGE);
- const size_t buffer_len = snprintf(NULL, 0, format, total_patterns_deleted) + 1;
- char *string_buffer = malloc(buffer_len);
- if (NULL != string_buffer) {
- snprintf(string_buffer, buffer_len, format, total_patterns_deleted);
- show_toast_notification(string_buffer, pdvd->ad->win);
- free(string_buffer);
- }
+ g_string_printf(string_buf, format, total_patterns_deleted);
+ show_toast_notification(string_buf->str, pdvd->ad->win);
+ g_string_free(string_buf, TRUE);
}
}
pattern_delete_view_data_s *pdvd = data;
const size_t number_of_selected_patterns = get_number_of_selected_patterns(pdvd->genlist);
+ GString *confirm_del_msg = g_string_new(NULL);
const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_MESSAGE_MESSAGE);
- const size_t buff_len = snprintf(NULL, 0, format, number_of_selected_patterns) + 1;
- char *confirm_del_msg = malloc(buff_len);
- if (NULL != confirm_del_msg) {
- snprintf(confirm_del_msg, buff_len, format, number_of_selected_patterns);
- pdvd->confirm_popup = create_two_buttons_popup(
- pdvd->genlist,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_TITLE),
- confirm_del_msg,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
- _pattern_delete_popup_ok_cb,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _pattern_delete_popup_cancel_cb,
- _pattern_delete_popup_cancel_cb,
- pdvd);
- free(confirm_del_msg);
- }
+ g_string_printf(confirm_del_msg, format, number_of_selected_patterns);
+ pdvd->confirm_popup = create_two_buttons_popup(
+ pdvd->genlist,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_TITLE),
+ confirm_del_msg->str,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
+ _pattern_delete_popup_ok_cb,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
+ _pattern_delete_popup_cancel_cb,
+ _pattern_delete_popup_cancel_cb,
+ pdvd);
+ g_string_free(confirm_del_msg, TRUE);
}
static void _pattern_delete_cancel_cb(void *data, Evas_Object *obj, void *event_info)
static void _free_pattern_delete_item_cb(void *item)
{
- free((pattern_delete_item_s *)item);
+ g_slice_free(pattern_delete_item_s, item);
}
static Eina_Bool _pattern_delete_nf_pop_cb(void *data, Evas_Object* obj)
return EINA_TRUE;
}
-size_t get_number_of_selected_patterns(Evas_Object *genlist)
+static size_t get_number_of_selected_patterns(Evas_Object *genlist)
{
const size_t total_rules = elm_genlist_items_count(genlist);
size_t pattern_count = 0;
return pattern_count;
}
-void create_select_all_patterns_item(pattern_delete_view_data_s *data)
+static void create_select_all_patterns_item(pattern_delete_view_data_s *data)
{
strncpy(pattern_delete_select_all_pattern.name, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SELECT_ALL), LEN_NAME);
pattern_delete_select_all_pattern.name[LEN_NAME - 1] = '\0';
// Note that item below will be freed by _free_pattern_delete_item_cb(),
// called in _pattern_delete_nf_pop_cb()
- pattern_delete_item_s *item = malloc(sizeof(pattern_delete_item_s));
- if (NULL != item) {
- item->pattern = &pattern_delete_select_all_pattern;
- item->is_checked = false;
- item->check = NULL;
- data->pattern_item_list = g_list_prepend(data->pattern_item_list, item);
- }
+ pattern_delete_item_s *item = g_slice_new(pattern_delete_item_s);
+ item->pattern = &pattern_delete_select_all_pattern;
+ item->is_checked = false;
+ item->check = NULL;
+ data->pattern_item_list = g_list_prepend(data->pattern_item_list, item);
}
-void populate_pattern_item_list(pattern_delete_view_data_s *data, const GList *pattern_list)
+static void populate_pattern_item_list(pattern_delete_view_data_s *data, const GList *pattern_list)
{
const GList* l;
for (l = pattern_list; l != NULL; l = l->next) {
continue;
// note that item is freed together with pattern_item_list in _pattern_delete_nf_pop_cb
- pattern_delete_item_s *item = malloc(sizeof(pattern_delete_item_s));
- if (NULL != item) {
- item->pattern = l->data;
- item->is_checked = false;
- item->check = NULL;
- data->pattern_item_list = g_list_append(data->pattern_item_list, item);
- }
+ pattern_delete_item_s *item = g_slice_new(pattern_delete_item_s);
+ item->pattern = l->data;
+ item->is_checked = false;
+ item->check = NULL;
+ data->pattern_item_list = g_list_prepend(data->pattern_item_list, item);
}
+ if (NULL != data->pattern_item_list)
+ data->pattern_item_list = g_list_reverse(data->pattern_item_list);
}
void create_privacy_dlp_pattern_delete_view(struct app_data_s *ad, const GList *pattern_list, void *pattern_list_data)
itc->func.text_get = _gl_pattern_delete_text_get_cb;
itc->func.content_get = _gl_pattern_delete_content_get_cb;
itc->func.del = NULL;
- Elm_Object_Item *it = NULL;
GList* l;
for (l = data.pattern_item_list; l != NULL; l = l->next) {
// append item to the genlist
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(data.genlist, itc, l->data, NULL, ELM_GENLIST_ITEM_NONE, _pattern_delete_menu_item_selected_cb, &data);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
return strdup("");
const get_pattern_s *pattern = data;
- const int leaks_captured = pattern->leaks_count;
- const size_t string_mem_needed = snprintf(NULL, 0, "%d", leaks_captured) + 1;
- char *string_buf = calloc(string_mem_needed, sizeof(char));
- if (NULL != string_buf) {
- snprintf(string_buf, string_mem_needed, "%d", leaks_captured);
- return string_buf;
- }
+ GString *string_buf = g_string_new(NULL);
+ g_string_printf(string_buf, "%d", pattern->leaks_count);
+ char *leaks_captured = strdup(string_buf->str);
+ g_string_free(string_buf, TRUE);
+ return leaks_captured;
}
+
return NULL;
}
if (PRIV_GUARD_ERROR_SUCCESS == res) {
LOGI("Pattern (id=%d) deleted", pdvd->current_pattern.id);
+ GString *string_buffer = g_string_new(NULL);
const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_MESSAGE);
- const size_t buffer_len = snprintf(NULL, 0, format, 1) + 1;
- char *string_buffer = malloc(buffer_len);
- if (NULL != string_buffer) {
- snprintf(string_buffer, buffer_len, format, 1);
- show_toast_notification(string_buffer, pdvd->ad->win);
- free(string_buffer);
- }
+ g_string_printf(string_buffer, format, 1);
+ show_toast_notification(string_buffer->str, pdvd->ad->win);
+ g_string_free(string_buffer, TRUE);
} else {
LOGE("privacy_guard_client_delete_dlp_pattern() failed. Error=%d", res);
}
elm_ctxpopup_dismiss(pdvd->ctxpopup);
const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_MESSAGE_MESSAGE);
- const size_t buff_len = snprintf(NULL, 0, format, 1) + 1;
- char *confirm_del_msg = malloc(buff_len);
- if (NULL != confirm_del_msg) {
- snprintf(confirm_del_msg, buff_len, format, 1);
- pdvd->delete_popup = create_two_buttons_popup(
- pdvd->ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_TITLE),
- confirm_del_msg,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
- _pattern_detailed_view_delete_ok_cb,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _pattern_detailed_view_delete_cancel_cb,
- _pattern_detailed_view_delete_cancel_cb,
- pdvd);
- free(confirm_del_msg);
- evas_object_smart_callback_add(pdvd->delete_popup, "dismissed", _pattern_detailed_view_popup_dismissed_cb, pdvd);
- }
+ GString *confirm_del_msg = g_string_new(NULL);
+ g_string_printf(confirm_del_msg, format, 1);
+ pdvd->delete_popup = create_two_buttons_popup(
+ pdvd->ad->nf,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_TITLE),
+ confirm_del_msg->str,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
+ _pattern_detailed_view_delete_ok_cb,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
+ _pattern_detailed_view_delete_cancel_cb,
+ _pattern_detailed_view_delete_cancel_cb,
+ pdvd);
+ g_string_free(confirm_del_msg, TRUE);
+
+ evas_object_smart_callback_add(pdvd->delete_popup, "dismissed", _pattern_detailed_view_popup_dismissed_cb, pdvd);
}
static void _pattern_detailed_view_menu_button_cb(void *data, Evas_Object *obj, void *event_info)
eext_object_event_callback_del(pdvd->genlist, EEXT_CALLBACK_MORE, _pattern_detailed_view_menu_button_cb);
eext_object_event_callback_add(pdvd->genlist, EEXT_CALLBACK_MORE, _pattern_detailed_view_dismiss_menu_cb, pdvd);
- pdvd->ctxpopup = create_ctxpop(pdvd->ad);
- elm_ctxpopup_item_append(pdvd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _pattern_detailed_view_delete_rule_cb, pdvd);
- evas_object_smart_callback_add(pdvd->ctxpopup, "dismissed", _pattern_detailed_view_menu_dismissed_cb, pdvd);
+ if (!pdvd->ctxpopup) {
+ pdvd->ctxpopup = create_ctxpop(pdvd->ad);
+ elm_ctxpopup_item_append(pdvd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _pattern_detailed_view_delete_rule_cb, pdvd);
+ evas_object_smart_callback_add(pdvd->ctxpopup, "dismissed", _pattern_detailed_view_menu_dismissed_cb, pdvd);
+ } else {
+ evas_object_show(pdvd->ctxpopup);
+ }
}
}
static void _pattern_detailed_view_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
{
pattern_detailed_view_data_s *pdvd = data;
- delete_ctxpopup(obj);
- pdvd->ctxpopup = NULL;
eext_object_event_callback_del(pdvd->genlist, EEXT_CALLBACK_MORE, _pattern_detailed_view_dismiss_menu_cb);
if (NULL == pdvd->delete_popup)
elm_ctxpopup_dismiss(pdvd->ctxpopup);
}
-void add_pattern_item_to_genlist(Evas_Object *genlist, void* data, const char* item_style, void* func_text_get)
+static void add_pattern_item_to_genlist(Evas_Object *genlist, void* data, const char* item_style, void* func_text_get)
{
Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
itc->item_style = item_style;
elm_genlist_item_class_free(itc);
}
-void set_current_pattern(get_pattern_s *current_pattern, const get_pattern_s *pattern)
+static void set_current_pattern(get_pattern_s *current_pattern, const get_pattern_s *pattern)
{
current_pattern->id = pattern->id;
strncpy(current_pattern->pattern, pattern->pattern, LEN_PATTERN);
current_pattern->leaks_count = pattern->leaks_count;
}
-Evas_Object *create_pattern_detail_genlist(pattern_detailed_view_data_s *data)
+static Evas_Object *create_pattern_detail_genlist(pattern_detailed_view_data_s *data)
{
Evas_Object *genlist = common_genlist_add(data->ad->nf);
evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
.pattern_genlist = NULL
};
-void create_pattern_genlist(dlp_pattern_list_data_s* data);
-void set_pattern_filter_text(Evas_Object *category_hoversel, dlp_pattern_list_data_s* data);
-bool has_deletable_pattern(const GList *pattern_list);
+static void create_pattern_genlist(dlp_pattern_list_data_s* data);
+static void set_pattern_filter_text(Evas_Object *category_hoversel, dlp_pattern_list_data_s* data);
+static bool has_deletable_pattern(const GList *pattern_list);
static void _pattern_list_view_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
static void _pattern_list_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info);
-bool _pg_dlp_categories_cb(const char *category, void *user_data)
+static bool _pg_dlp_categories_cb(const char *category, void *user_data)
{
/* add category to category list */
dlp_pattern_list_data_s *data = user_data;
- data->category_list = g_list_append(data->category_list, strdup(category));
+ data->category_list = g_list_prepend(data->category_list, strdup(category));
return true;
}
-bool _pg_dlp_patterns_cb(int id, const char *pattern, const char *name, const char *description, PgDlpPatternType type,
+static bool _pg_dlp_patterns_cb(int id, const char *pattern, const char *name, const char *description, PgDlpPatternType type,
const char *category, bool undeletable, int leaks_count, void *user_data)
{
/* create a new pattern */
- get_pattern_s *dlp_pattern = malloc(sizeof(get_pattern_s)); // this pattern is freed at delete_pattern_list()
- if (NULL != dlp_pattern) {
- dlp_pattern->id = id;
- strncpy(dlp_pattern->pattern, pattern, LEN_PATTERN);
- dlp_pattern->pattern[LEN_PATTERN - 1] = '\0';
- strncpy(dlp_pattern->name, name, LEN_NAME);
- dlp_pattern->name[LEN_NAME - 1] = '\0';
- strncpy(dlp_pattern->description, description, LEN_DESCRIPTION);
- dlp_pattern->description[LEN_DESCRIPTION - 1] = '\0';
- dlp_pattern->type = type;
- strncpy(dlp_pattern->category.text, category, LEN_CATEGORY);
- dlp_pattern->category.text[LEN_CATEGORY - 1] = '\0';
- dlp_pattern->undeletable = undeletable;
- dlp_pattern->leaks_count = leaks_count;
- /* add pattern to pattern list */
- dlp_pattern_list_data_s *data = user_data;
- data->pattern_list = g_list_append(data->pattern_list, dlp_pattern);
- }
+ get_pattern_s *dlp_pattern = g_slice_new(get_pattern_s); // this pattern is freed at delete_pattern_list()
+
+ dlp_pattern->id = id;
+ strncpy(dlp_pattern->pattern, pattern, LEN_PATTERN);
+ dlp_pattern->pattern[LEN_PATTERN - 1] = '\0';
+ strncpy(dlp_pattern->name, name, LEN_NAME);
+ dlp_pattern->name[LEN_NAME - 1] = '\0';
+ strncpy(dlp_pattern->description, description, LEN_DESCRIPTION);
+ dlp_pattern->description[LEN_DESCRIPTION - 1] = '\0';
+ dlp_pattern->type = type;
+ strncpy(dlp_pattern->category.text, category, LEN_CATEGORY);
+ dlp_pattern->category.text[LEN_CATEGORY - 1] = '\0';
+ dlp_pattern->undeletable = undeletable;
+ dlp_pattern->leaks_count = leaks_count;
+ /* add pattern to pattern list */
+ dlp_pattern_list_data_s *data = user_data;
+ data->pattern_list = g_list_prepend(data->pattern_list, dlp_pattern);
+
return true;
}
static void _pattern_genlist_del_cb(void *data, Evas_Object *obj)
{
- dlp_item_pattern_s *item = (dlp_item_pattern_s *)data;
- free(item);
+ g_slice_free(dlp_item_pattern_s, data);
}
static void _pattern_filter_cb(void *data, Evas_Object *obj, void *event_info)
static void _pattern_list_view_delete_rules_cb(void *data, Evas_Object *obj, void *event_info)
{
dlp_pattern_list_data_s *dpld = data;
-
elm_ctxpopup_dismiss(dpld->pattern_ctxpopup);
create_privacy_dlp_pattern_delete_view(dpld->ad, dpld->pattern_list, dpld);
}
eext_object_event_callback_del(dpld->pattern_genlist, EEXT_CALLBACK_MORE, _pattern_list_view_menu_button_cb);
eext_object_event_callback_add(dpld->pattern_genlist, EEXT_CALLBACK_MORE, _pattern_list_view_dismiss_menu_cb, dpld);
- dpld->pattern_ctxpopup = create_ctxpop(dpld->ad);
-
- elm_ctxpopup_item_append(dpld->pattern_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CREATE), NULL, _pattern_list_view_create_rule_cb, data);
- if (has_deletable_pattern(dpld->pattern_list))
- elm_ctxpopup_item_append(dpld->pattern_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _pattern_list_view_delete_rules_cb, data);
- evas_object_smart_callback_add(dpld->pattern_ctxpopup, "dismissed", _pattern_list_view_menu_dismissed_cb, dpld);
+ if (!dpld->pattern_ctxpopup) {
+ dpld->pattern_ctxpopup = create_ctxpop(dpld->ad);
+ elm_ctxpopup_item_append(dpld->pattern_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CREATE), NULL, _pattern_list_view_create_rule_cb, data);
+ if (has_deletable_pattern(dpld->pattern_list))
+ elm_ctxpopup_item_append(dpld->pattern_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _pattern_list_view_delete_rules_cb, data);
+ evas_object_smart_callback_add(dpld->pattern_ctxpopup, "dismissed", _pattern_list_view_menu_dismissed_cb, dpld);
+ } else {
+ evas_object_show(dpld->pattern_ctxpopup);
+ }
}
static void _pattern_list_view_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
{
dlp_pattern_list_data_s *dpld = data;
- delete_ctxpopup(obj);
- dpld->pattern_ctxpopup = NULL;
eext_object_event_callback_del(dpld->pattern_genlist, EEXT_CALLBACK_MORE, _pattern_list_view_dismiss_menu_cb);
eext_object_event_callback_add(dpld->pattern_genlist, EEXT_CALLBACK_MORE, _pattern_list_view_menu_button_cb, dpld);
if (NULL == pattern_list_data.pattern_list)
return;
- /* Delete all the rules */
- GList* l;
- for (l = pattern_list_data.pattern_list; l != NULL; l = l->next) {
- get_pattern_s* pattern = (get_pattern_s*)(l->data);
- free(pattern);
- }
- /* Delete pattern list */
- g_list_free(pattern_list_data.pattern_list);
+ g_list_free_full(pattern_list_data.pattern_list, free_dlp_pattern);
pattern_list_data.pattern_list = NULL;
}
-void set_pattern_filter_text(Evas_Object *category_hoversel, dlp_pattern_list_data_s* data)
+static void set_pattern_filter_text(Evas_Object *category_hoversel, dlp_pattern_list_data_s* data)
{
const char format[] = "<color=#FFFFFFFF left_margin=25>%s</color>";
char text[LEN_CATEGORY + 1 + sizeof format];
elm_object_text_set(category_hoversel, text);
}
-void set_empty_pattern_genlist(Evas_Object *pattern_genlist)
+static void set_empty_pattern_genlist(Evas_Object *pattern_genlist)
{
elm_layout_theme_set(pattern_genlist, "layout", "nocontents", "default");
}
-int populate_pattern_genlist(dlp_pattern_list_data_s* data)
+static int populate_pattern_genlist(dlp_pattern_list_data_s* data)
{
int pattern_count = 0;
/* Append patterns as genlist item */
for (l = data->pattern_list; l != NULL; l = l->next) {
// note item will be freed either in _pattern_genlist_del_cb or at the end of the loop
- dlp_item_pattern_s *item = calloc(1, sizeof(dlp_item_pattern_s));
+ dlp_item_pattern_s *item = g_slice_new0(dlp_item_pattern_s);
if (NULL == item)
continue;
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
++pattern_count;
} else {
- free(item);
+ g_slice_free(dlp_item_pattern_s, item);
}
}
return pattern_count;
}
-void create_pattern_hoversel(dlp_pattern_list_data_s *data)
+static void create_pattern_hoversel(dlp_pattern_list_data_s *data)
{
Evas_Object *pattern_hoversel = elm_hoversel_add(data->pattern_box);
elm_hoversel_horizontal_set(pattern_hoversel, EINA_FALSE);
// Populate hoversel
elm_hoversel_item_add(pattern_hoversel, ALL_PATTERNS, NULL, ELM_ICON_NONE, _pattern_filter_cb, data);
GList* l;
- const char *category;
for (l = data->category_list; l != NULL; l = l->next) {
+ const char *category;
category = l->data;
elm_hoversel_item_add(pattern_hoversel, category, NULL, ELM_ICON_NONE, _pattern_filter_cb, data);
}
elm_box_pack_end(data->pattern_box, pattern_hoversel);
}
-void create_pattern_genlist(dlp_pattern_list_data_s* data)
+static void create_pattern_genlist(dlp_pattern_list_data_s* data)
{
data->pattern_genlist = common_genlist_add(data->pattern_box);
evas_object_size_hint_weight_set(data->pattern_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(data->pattern_box, data->pattern_genlist);
}
-void create_pattern_list_components(dlp_pattern_list_data_s* data)
+static void create_pattern_list_components(dlp_pattern_list_data_s* data)
{
/* Create box container to hold view's components */
data->pattern_box = elm_box_add(data->view_parent);
eext_object_event_callback_add(data->pattern_box, EEXT_CALLBACK_MORE, _pattern_list_view_menu_button_cb, data);
}
-bool has_deletable_pattern(const GList *pattern_list)
+static bool has_deletable_pattern(const GList *pattern_list)
{
bool has_deletable = false;
GList* l;
int res = privacy_guard_client_foreach_dlp_categories(_pg_dlp_categories_cb, &pattern_list_data);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_dlp_categories() failed. [%d]", res);
+ pattern_list_data.category_list = g_list_reverse(pattern_list_data.category_list);
/* Get dlp patterns from privacy guard */
res = privacy_guard_client_foreach_dlp_patterns(_pg_dlp_patterns_cb, &pattern_list_data);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_dlp_patterns() failed. [%d]", res);
+ pattern_list_data.pattern_list = g_list_reverse(pattern_list_data.pattern_list);
create_pattern_list_components(&pattern_list_data);
}
static bool _pg_dlp_leak_logs_cb(const char *app_name, time_t first_time_stamp, time_t last_time_stamp, const char *app_icon, int leak_count, void *user_data)
{
// note that data is freed update_privacy_dlp_reports_app_rank_view() and create_privacy_dlp_reports_app_rank_view()
- leak_log_get_app_count_s *data = (leak_log_get_app_count_s *)malloc(sizeof(leak_log_get_app_count_s));
- if (data) {
- strncpy(data->application_name, app_name, LEN_APPLICATION_NAME);
- data->application_name[LEN_APPLICATION_NAME - 1] = '\0';
- data->first_time_stamp = first_time_stamp;
- data->last_time_stamp = last_time_stamp;
- strncpy(data->application_icon, app_icon, LEN_APPLICATION_ICON);
- data->application_icon[LEN_APPLICATION_ICON - 1] = '\0';
- data->leak_count = leak_count;
-
- dlp_leak_log_list = g_list_append(dlp_leak_log_list, data);
- }
+ leak_log_get_app_count_s *data = g_slice_new(leak_log_get_app_count_s);
+
+ strncpy(data->application_name, app_name, LEN_APPLICATION_NAME);
+ data->application_name[LEN_APPLICATION_NAME - 1] = '\0';
+ data->first_time_stamp = first_time_stamp;
+ data->last_time_stamp = last_time_stamp;
+ strncpy(data->application_icon, app_icon, LEN_APPLICATION_ICON);
+ data->application_icon[LEN_APPLICATION_ICON - 1] = '\0';
+ data->leak_count = leak_count;
+
+ dlp_leak_log_list = g_list_prepend(dlp_leak_log_list, data);
+
return true;
}
*/
static void _gl_del_cb(void *data, Evas_Object *obj)
{
- leak_log_get_app_count_s *item = data;
- free(item);
+ g_slice_free(leak_log_get_app_count_s, data);
}
/**
/* Get dlp leak logs from privacy guard */
int res = privacy_guard_client_foreach_app_leak_count(user_id, _pg_dlp_leak_logs_cb, NULL);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_app_leak_count() is failed. [%d]", res);
+ dlp_leak_log_list = g_list_reverse(dlp_leak_log_list);
if (g_list_length(dlp_leak_log_list) == 0) {
// No content in the genlist
itc->func.content_get = _gl_content_get_cb;
itc->func.del = _gl_del_cb;
- Elm_Object_Item *it = NULL;
GList *elem;
/* Append privacy related package as genlist item */
leak_log_get_app_count_s *item = elem->data;
// append to the genlist
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _menu_item_selected_cb, ad);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
/* Get dlp leak logs from privacy guard */
int res = privacy_guard_client_foreach_app_leak_count(user_id, _pg_dlp_leak_logs_cb, NULL);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_app_leak_count() is failed. [%d]", res);
+ dlp_leak_log_list = g_list_reverse(dlp_leak_log_list);
if (g_list_length(dlp_leak_log_list) == 0) {
// No content in the genlist
itc->func.content_get = _gl_content_get_cb;
itc->func.del = _gl_del_cb;
- Elm_Object_Item *it = NULL;
GList *elem;
/* Append privacy related package as genlist item */
leak_log_get_app_count_s *item = elem->data;
// append to the genlist
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _menu_item_selected_cb, ad);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
static bool _pg_dlp_leak_logs_cb(const char *category, time_t first_time_stamp, time_t last_time_stamp, int leak_count, void *user_data)
{
- leak_log_get_category_count_s *data = (leak_log_get_category_count_s *)malloc(sizeof(leak_log_get_category_count_s));
+ leak_log_get_category_count_s *data = g_slice_new(leak_log_get_category_count_s);
- if (data != NULL) {
- strncpy(data->category.text, category, LEN_CATEGORY);
- data->category.text[LEN_CATEGORY - 1] = '\0';
- data->first_time_stamp = first_time_stamp;
- data->last_time_stamp = last_time_stamp;
- data->leak_count = leak_count;
+ strncpy(data->category.text, category, LEN_CATEGORY);
+ data->category.text[LEN_CATEGORY - 1] = '\0';
+ data->first_time_stamp = first_time_stamp;
+ data->last_time_stamp = last_time_stamp;
+ data->leak_count = leak_count;
+
+ dlp_leak_log_list = g_list_prepend(dlp_leak_log_list, data);
- dlp_leak_log_list = g_list_append(dlp_leak_log_list, data);
- }
return true;
}
*/
static void _gl_del_cb(void *data, Evas_Object *obj)
{
- leak_log_get_category_count_s *item = data;
- free(item);
+ g_slice_free(leak_log_get_category_count_s, data);
}
/**
/* Get dlp leak logs from privacy guard */
int res = privacy_guard_client_foreach_category_leak_count(user_id, _pg_dlp_leak_logs_cb, NULL);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_category_leak_count() is failed. [%d]", res);
+ dlp_leak_log_list = g_list_reverse(dlp_leak_log_list);
if (g_list_length(dlp_leak_log_list) == 0) {
// No content in the genlist
itc->func.content_get = _gl_content_get_cb;
itc->func.del = _gl_del_cb;
- Elm_Object_Item *it = NULL;
GList *elem;
/* Append privacy related package as genlist item */
leak_log_get_category_count_s *item = elem->data;
// append to the genlist
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _menu_item_selected_cb, ad);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
/* Get dlp leak logs from privacy guard */
int res = privacy_guard_client_foreach_category_leak_count(user_id, _pg_dlp_leak_logs_cb, NULL);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_app_leak_count() is failed. [%d]", res);
+ dlp_leak_log_list = g_list_reverse(dlp_leak_log_list);
if (g_list_length(dlp_leak_log_list) == 0) {
// No content in the genlist
itc->func.content_get = _gl_content_get_cb;
itc->func.del = _gl_del_cb;
- Elm_Object_Item *it = NULL;
GList *elem;
/* Append privacy related package as genlist item */
leak_log_get_app_count_s *item = elem->data;
// append to the genlist
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _menu_item_selected_cb, ad);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
struct app_data_s *ad;
GList *log_list;
rule_action_filter action;
+ bool logs_deleted;
Evas_Object *genlist;
Evas_Object *confirm_delete_popup;
Evas_Object *delete_button;
.ad = NULL,
.log_list = NULL,
.action = ACTION_ALL,
+ .logs_deleted = false,
.genlist = NULL,
.confirm_delete_popup = NULL,
.delete_button = NULL,
.naviframe_title = NULL
};
-Evas_Object *create_check(Evas_Object *parent);
-size_t get_number_of_selected_logs(Evas_Object *genlist);
-void set_view_title_bar(reports_del_data_s *data);
+static Evas_Object *create_check(Evas_Object *parent);
+static size_t get_number_of_selected_logs(Evas_Object *genlist);
+static void set_view_title_bar(reports_del_data_s *data);
static void _reports_del_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
{
}
if (PRIV_GUARD_ERROR_SUCCESS == res) {
- char *toast_msg = NULL;
+ GString *toast_msg = g_string_new(NULL);
if (total_deleted_logs > 1) {
const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_LOGS_DELETED);
- const size_t buff_len = snprintf(NULL, 0, format, total_deleted_logs) + 1;
- toast_msg = malloc(buff_len);
- if (toast_msg != NULL)
- snprintf(toast_msg, buff_len, format, total_deleted_logs);
+ g_string_printf(toast_msg, format, total_deleted_logs);
} else {
- toast_msg = dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETED);
+ g_string_assign(toast_msg, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETED));
}
- show_toast_notification(toast_msg, rdd->ad->win);
+ show_toast_notification(toast_msg->str, rdd->ad->win);
- if (total_deleted_logs > 1)
- free(toast_msg);
+ g_string_free(toast_msg, TRUE);
}
destroy_popup(rdd->confirm_delete_popup);
rdd->confirm_delete_popup = NULL;
elm_naviframe_item_pop(rdd->ad->nf);
+ rdd->logs_deleted = true; // logs are deleted in the function below, so we set this flag to true
update_privacy_dlp_reports_full_view();
}
{
reports_del_data_s *rdd = data;
- const size_t number_of_selected_logs = get_number_of_selected_logs(rdd->genlist);
+ GString *confirm_del_msg = g_string_new(NULL);
const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_LOGS_WILL_BE_DELETED);
- const size_t buff_len = snprintf(NULL, 0, format, number_of_selected_logs) + 1;
- char *confirm_del_msg = malloc(buff_len);
-
- if (confirm_del_msg != NULL) {
- snprintf(confirm_del_msg, buff_len, format, number_of_selected_logs);
-
- rdd->confirm_delete_popup = create_two_buttons_popup(
- rdd->genlist,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_LOG),
- confirm_del_msg,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
- _reports_del_popup_ok_cb,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _reports_del_popup_cancel_cb,
- _reports_del_popup_cancel_cb,
- rdd);
-
- free(confirm_del_msg);
- }
+ g_string_printf(confirm_del_msg, format, get_number_of_selected_logs(rdd->genlist));
+ rdd->confirm_delete_popup = create_two_buttons_popup(
+ rdd->genlist,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_LOG),
+ confirm_del_msg->str,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
+ _reports_del_popup_ok_cb,
+ dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
+ _reports_del_popup_cancel_cb,
+ _reports_del_popup_cancel_cb,
+ rdd);
+ g_string_free(confirm_del_msg, TRUE);
}
static char *_reports_del_select_all_text_get_cb(void *data, Evas_Object *obj, const char *part)
static char *_reports_del_gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
{
+ if (reports_del_data.logs_deleted)
+ return NULL;
+
dlp_item_log_s *item = (dlp_item_log_s *)data;
if (strcmp(part, "elm.text") == 0)
localtime_r(&item->data->time_stamp, &timeinfo);
strftime(time_str, sizeof(time_str), "%a, %x %X", &timeinfo);
- size_t string_mem_needed = snprintf(NULL, 0,
- "%s<br>%s",
- item->data->destination,
- time_str);
-
- char *string_buf = malloc(string_mem_needed + 1);
-
- if (string_buf != NULL) {
- snprintf(string_buf,
- string_mem_needed+1,
- "%s<br>%s",
- item->data->destination,
- time_str);
-
- char *multiline = strdup(string_buf);
- free(string_buf);
+ GString *string_buf = g_string_new(NULL);
+ g_string_printf(string_buf, "%s<br>%s", item->data->destination, time_str);
+ char *multiline = strdup(string_buf->str);
+ g_string_free(string_buf, TRUE);
- return multiline;
- }
+ return multiline;
}
return NULL;
static Evas_Object *_reports_del_gl_content_get_cb(void *data, Evas_Object *obj, const char *part)
{
+ if (reports_del_data.logs_deleted)
+ return NULL;
+
dlp_item_log_s *item = (dlp_item_log_s *)data;
if (strcmp(part, "elm.swallow.end") == 0) {
static void _reports_del_gl_del_cb(void *data, Evas_Object *obj)
{
- dlp_item_log_s *item = data;
- free(item);
+ g_slice_free(dlp_item_log_s, data);
}
static void _reports_del_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
set_view_title_bar(rdd);
}
-void set_view_title_bar(reports_del_data_s *data)
+static void set_view_title_bar(reports_del_data_s *data)
{
const size_t number_of_selected_logs = get_number_of_selected_logs(data->genlist);
if (number_of_selected_logs > 0) {
elm_object_disabled_set(data->delete_button, EINA_FALSE);
+ GString *string_buffer = g_string_new(NULL);
const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_LOGS_TITLE_SELECTED);
- const size_t buffer_len = snprintf(NULL, 0, format, number_of_selected_logs) + 1;
- char *string_buffer = malloc(buffer_len);
+ g_string_printf(string_buffer, format, number_of_selected_logs);
- if (string_buffer != NULL) {
- snprintf(string_buffer, buffer_len, format, number_of_selected_logs);
- elm_object_item_part_text_set(data->naviframe_title, "default", string_buffer);
- free(string_buffer);
- }
+ elm_object_item_part_text_set(data->naviframe_title, "default", string_buffer->str);
+ g_string_free(string_buffer, TRUE);
} else {
elm_object_disabled_set(data->delete_button, EINA_TRUE);
elm_object_item_part_text_set(data->naviframe_title, "default", dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_LOGS_TITLE));
}
}
-size_t get_number_of_selected_logs(Evas_Object *genlist)
+static size_t get_number_of_selected_logs(Evas_Object *genlist)
{
const size_t total_logs = elm_genlist_items_count(genlist);
size_t log_count = 0;
return log_count;
}
-Evas_Object *create_check(Evas_Object *parent)
+static Evas_Object *create_check(Evas_Object *parent)
{
Evas_Object *check;
check = elm_check_add(parent);
return check;
}
-Evas_Object *add_title_button_to_naviframe(Evas_Object *nf, Elm_Object_Item *nf_it, const bool left_side, const char* text,
+static Evas_Object *add_title_button_to_naviframe(Evas_Object *nf, Elm_Object_Item *nf_it, const bool left_side, const char* text,
Evas_Smart_Cb btn_clicked_cb, void* data)
{
Evas_Object *btn = elm_button_add(nf);
return btn;
}
-void create_select_all_item(reports_del_data_s *data)
+static void create_select_all_item(reports_del_data_s *data)
{
Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
itc->item_style = "singleline";
itc->func.text_get = _reports_del_select_all_text_get_cb;
itc->func.content_get = _reports_del_select_all_content_get_cb;
+ itc->func.del = _reports_del_gl_del_cb;
- dlp_item_log_s *item = calloc(1, sizeof(dlp_item_log_s));
+ dlp_item_log_s *item = g_slice_new0(dlp_item_log_s);
- if (item != NULL) {
- item->data = NULL; // Select all check has no leak log associated to it
- item->check = NULL;
- item->is_checked = false;
- }
+ item->data = NULL; // Select all check has no leak log associated to it
+ item->check = NULL;
+ item->is_checked = false;
elm_genlist_item_append(data->genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _reports_del_select_all_selected_cb, data);
elm_genlist_item_class_free(itc);
}
-void populate_reports_del_genlist(reports_del_data_s *data)
+static void populate_reports_del_genlist(reports_del_data_s *data)
{
if (NULL == data->log_list)
return;
/* Append privacy related package as genlist item */
for (l = data->log_list; l != NULL; l = l->next) {
- dlp_item_log_s *item = calloc(1, sizeof(dlp_item_log_s));
-
- if (item != NULL) {
- // item data
- item->data = (dlp_log_s*)l->data;
- item->check = NULL;
- item->is_checked = false;
-
- // append to the genlist
- if (filter_rule_by_action(item->data->action, data->action)) {
- it = elm_genlist_item_append(data->genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _reports_del_item_selected_cb, data);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
- }
+ dlp_item_log_s *item = g_slice_new0(dlp_item_log_s);
+
+ // item data
+ item->data = (dlp_log_s*)l->data;
+ item->check = NULL;
+ item->is_checked = false;
+
+ // append to the genlist
+ if (filter_rule_by_action(item->data->action, data->action)) {
+ it = elm_genlist_item_append(data->genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _reports_del_item_selected_cb, data);
+ log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
}
elm_genlist_item_class_free(itc);
}
-void create_reports_del_genlist(reports_del_data_s *data)
+static void create_reports_del_genlist(reports_del_data_s *data)
{
data->genlist = common_genlist_add(data->ad->nf);
evas_object_size_hint_weight_set(data->genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
}
reports_del_data.log_list = log_list;
reports_del_data.action = action;
+ reports_del_data.logs_deleted = false;
create_reports_del_genlist(&reports_del_data);
};
// forward declarations
-void set_action_filter_text(Evas_Object *action_hoversel, int action);
-void create_reports_genlist(reports_full_view_data_s *data);
+static void set_action_filter_text(Evas_Object *action_hoversel, int action);
+static void create_reports_genlist(reports_full_view_data_s *data);
static void _reports_full_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
static void _reports_full_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info);
static bool _pg_dlp_leak_logs_cb(int id, time_t time_stamp, PgDlpAction action, const char *app_name, const char *app_icon, const char *destination, void *user_data)
{
- dlp_log_s *data = (dlp_log_s *)malloc(sizeof(dlp_log_s));
+ dlp_log_s *data = g_slice_new(dlp_log_s);
- if (data != NULL) {
- data->log_id = id;
- data->time_stamp = time_stamp;
- data->action = action;
- data->app_name = strdup(app_name);
- data->app_icon = strdup(app_icon);
- data->destination = strdup(destination);
+ data->log_id = id;
+ data->time_stamp = time_stamp;
+ data->action = action;
+ data->app_name = strdup(app_name);
+ data->app_icon = strdup(app_icon);
+ data->destination = strdup(destination);
- reports_full_view_data.dlp_leak_log_list = g_list_append(reports_full_view_data.dlp_leak_log_list, data);
- }
+ reports_full_view_data.dlp_leak_log_list = g_list_prepend(reports_full_view_data.dlp_leak_log_list, data);
return true;
}
+static void free_dlp_log_s(void *leak_log)
+{
+ if (NULL != leak_log) {
+ dlp_log_s *dlp_leak_log = leak_log;
+ free(dlp_leak_log->app_name);
+ free(dlp_leak_log->app_icon);
+ free(dlp_leak_log->destination);
+ g_slice_free(dlp_log_s, leak_log);
+ }
+}
+
+static void free_dlp_leak_log_list(reports_full_view_data_s* data)
+{
+ if (data->dlp_leak_log_list != NULL) {
+ g_list_free(data->dlp_leak_log_list);
+ data->dlp_leak_log_list = NULL;
+ }
+}
+
static char* _gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
{
dlp_item_log_s *item = (dlp_item_log_s *)data;
localtime_r(&item->data->time_stamp, &timeinfo);
strftime(time_str, sizeof(time_str), "%a, %x %X", &timeinfo);
- size_t string_mem_needed = snprintf(NULL, 0,
- "%s<br>%s",
- item->data->destination,
- time_str);
+ GString *string_buf = g_string_new(NULL);
+ g_string_printf(string_buf, "%s<br>%s", item->data->destination, time_str);
+ char *multiline = strdup(string_buf->str);
+ g_string_free(string_buf, TRUE);
- char *string_buf = malloc(string_mem_needed+1);
-
- if (string_buf != NULL) {
- snprintf(string_buf,
- string_mem_needed+1,
- "%s<br>%s",
- item->data->destination,
- time_str);
-
- char *multiline = strdup(string_buf);
- free(string_buf);
-
- return multiline;
- }
+ return multiline;
}
return NULL;
dlp_item_log_s *item = (dlp_item_log_s *)data;
if (strcmp(part, "elm.swallow.icon") == 0) {
- int x, y;
if (item->data == NULL)
return NULL;
static void _gl_del_cb(void *data, Evas_Object *obj)
{
dlp_item_log_s *item = data;
- free(item);
-}
-
-void apply_action_filter(reports_full_view_data_s *data, Evas_Object *obj, int action)
-{
- data->current_action = action;
- set_action_filter_text(obj, action);
- elm_box_unpack(data->box, data->genlist);
- evas_object_del(data->genlist);
- create_reports_genlist(data);
+ free_dlp_log_s(item->data);
+ g_slice_free(dlp_item_log_s, data);
}
static void _reports_full_delete_cb(void *data, Evas_Object *obj, void *event_info)
{
reports_full_view_data_s *rfvd = data;
if (rfvd->leaks_count > 0) {
- rfvd->ctxpopup = create_ctxpop(rfvd->ad);
+ if (!rfvd->ctxpopup) {
+ rfvd->ctxpopup = create_ctxpop(rfvd->ad);
+ elm_ctxpopup_item_append(rfvd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE),
+ NULL, _reports_full_delete_cb, data);
+ evas_object_smart_callback_add(rfvd->ctxpopup, "dismissed", _reports_full_menu_dismissed_cb, rfvd);
+ } else {
+ evas_object_show(rfvd->ctxpopup);
+ }
eext_object_event_callback_del(rfvd->genlist, EEXT_CALLBACK_MORE, _reports_full_menu_cb);
eext_object_event_callback_add(rfvd->genlist, EEXT_CALLBACK_MORE, _reports_full_dismiss_menu_cb, rfvd);
-
- elm_ctxpopup_item_append(rfvd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE),
- NULL, _reports_full_delete_cb, data);
- evas_object_smart_callback_add(rfvd->ctxpopup, "dismissed", _reports_full_menu_dismissed_cb, rfvd);
}
}
static void _reports_full_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
{
reports_full_view_data_s *rfvd = data;
- delete_ctxpopup(obj);
- rfvd->ctxpopup = NULL;
eext_object_event_callback_del(rfvd->genlist, EEXT_CALLBACK_MORE, _reports_full_dismiss_menu_cb);
eext_object_event_callback_add(rfvd->genlist, EEXT_CALLBACK_MORE, _reports_full_menu_cb, rfvd);
elm_ctxpopup_dismiss(rfvd->ctxpopup);
}
-const char *get_action_text(unsigned int action)
-{
- if (action < ACTION_TOTAL)
- return ACTION_TEXT[action];
- else
- return NULL;
-}
-
-void set_action_filter_text(Evas_Object *action_hoversel, int action)
-{
- char text[ACTION_TEXT_LEN + 1];
- text[ACTION_TEXT_LEN] = 0;
- const char *format = "<color=#FFFFFFFF>%s</color>";
- const char *action_text = get_action_text(action);
- snprintf(text, ACTION_TEXT_LEN, format, action_text);
- elm_object_text_set(action_hoversel, text);
-}
-
-int populate_reports_genlist(reports_full_view_data_s *data)
+static int populate_reports_genlist(reports_full_view_data_s *data)
{
int leaks_count = 0;
/* Append privacy related package as genlist item */
for (l = data->dlp_leak_log_list; l != NULL; l = l->next) {
- dlp_item_log_s *item = calloc(1, sizeof(dlp_item_log_s));
-
- if (item != NULL) {
- // item data
- item->data = (dlp_log_s*)l->data;
-
- // append to the genlist
- if (filter_rule_by_action(item->data->action, data->current_action)) {
- it = elm_genlist_item_append(data->genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _menu_item_selected_cb, data->ad);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
- if (NULL != it)
- ++leaks_count;
- }
+ dlp_item_log_s *item = g_slice_new0(dlp_item_log_s);
+
+ // item data
+ item->data = (dlp_log_s*)l->data;
+
+ // append to the genlist
+ if (filter_rule_by_action(item->data->action, data->current_action)) {
+ it = elm_genlist_item_append(data->genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _menu_item_selected_cb, data->ad);
+ log_if(it == NULL, 1, "Error in elm_genlist_item_append");
+ if (NULL != it)
+ ++leaks_count;
}
}
return leaks_count;
}
-void create_reports_genlist(reports_full_view_data_s *data)
+static void create_reports_genlist(reports_full_view_data_s *data)
{
data->genlist = common_genlist_add(data->box);
evas_object_size_hint_weight_set(data->genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
return btn;
}
+static Eina_Bool _reports_full_view_nf_pop_cb(void *data, Evas_Object* obj)
+{
+ free_dlp_leak_log_list(data);
+ return EINA_TRUE;
+}
+
/**
* @brief Creates essential objects for the screen.
*/
void create_privacy_dlp_reports_full_view(dlp_statistics_cb_s *scb, struct app_data_s *ad)
{
- if (reports_full_view_data.dlp_leak_log_list != NULL) {
- g_list_free(reports_full_view_data.dlp_leak_log_list);
- reports_full_view_data.dlp_leak_log_list = NULL;
- }
-
stats_cb = scb;
- reports_full_view_data.ad = ad;
-
+ reports_full_view_data.dlp_leak_log_list = NULL;
reports_full_view_data.ad = ad;
reports_full_view_data.leaks_count = 0;
int res = privacy_guard_client_foreach_leak_logs(user_id, _pg_dlp_leak_logs_cb, NULL);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_leak_logs() is failed. [%d]", res);
}
+ reports_full_view_data.dlp_leak_log_list = g_list_reverse(reports_full_view_data.dlp_leak_log_list);
/* Create box container to hold view's components */
Evas_Object *box = elm_box_add(ad->nf);
/* Change "Privacy Setting" to proper DID : use dgettext() */
Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->nf, dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_FULL), full_view_back_btn_add(ad), NULL, box, NULL);
+ /* set callback to genlist item pop event */
+ elm_naviframe_item_pop_cb_set(nf_it, _reports_full_view_nf_pop_cb, &reports_full_view_data);
+
elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
}
return;
}
- if (reports_full_view_data.dlp_leak_log_list != NULL) {
- g_list_free(reports_full_view_data.dlp_leak_log_list);
- reports_full_view_data.dlp_leak_log_list = NULL;
- }
+ free_dlp_leak_log_list(&reports_full_view_data);
uid_t user_id = getuid();
int res = privacy_guard_client_foreach_leak_logs(user_id, _pg_dlp_leak_logs_cb, NULL);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_leak_logs() is failed. [%d]", res);
}
+ reports_full_view_data.dlp_leak_log_list = g_list_reverse(reports_full_view_data.dlp_leak_log_list);
elm_box_unpack(reports_full_view_data.box, reports_full_view_data.genlist);
evas_object_del(reports_full_view_data.genlist);
void delete_pattern_list();
void delete_rule_list();
-Eina_Bool _rules_patterns_nf_pop_cb(void *data, Evas_Object* obj)
+static Eina_Bool _rules_patterns_nf_pop_cb(void *data, Evas_Object* obj)
{
delete_category_list();
delete_pattern_list();
create_privacy_dlp_patterns_list_view(rpvd->ad, rpvd->content, rpvd->config);
}
-Evas_Object* create_rules_and_patterns_tabbar(rules_patterns_view_data_s *data)
+static Evas_Object* create_rules_and_patterns_tabbar(rules_patterns_view_data_s *data)
{
Evas_Object *toolbar = elm_toolbar_add(data->ad->nf);
elm_object_style_set(toolbar, "tabbar_with_title");
static get_custom_rule_s rule_delete_select_all_rule = { .id = SELECT_ALL_RULES_ITEM };
-size_t get_number_of_selected_rules(Evas_Object *genlist);
+static size_t get_number_of_selected_rules(Evas_Object *genlist);
static void set_rules_by_pattern_and_action(GList *rule_item_list, const rule_delete_item_s *current_rule_item);
static char *_gl_rule_delete_text_get_cb(void *data, Evas_Object *obj, const char *part)
static void _free_rule_delete_item_cb(void *rule_delete_item)
{
- free((rule_delete_item_s *)rule_delete_item);
+ g_slice_free(rule_delete_item_s, rule_delete_item);
}
static Eina_Bool _rule_delete_nf_pop_cb(void *data, Evas_Object* obj)
}
}
-size_t get_number_of_selected_rules(Evas_Object *genlist)
+static size_t get_number_of_selected_rules(Evas_Object *genlist)
{
const size_t total_rules = elm_genlist_items_count(genlist);
size_t rule_count = 0;
return rule_count;
}
-void populate_rule_item_list(rule_delete_view_data_s *data, const GList *rule_list)
+static void populate_rule_item_list(rule_delete_view_data_s *data, const GList *rule_list)
{
const GList* l;
for (l = rule_list; l != NULL; l = l->next) {
- rule_delete_item_s *item = malloc(sizeof(rule_delete_item_s));
+ rule_delete_item_s *item = g_slice_new(rule_delete_item_s);
- if (item != NULL) {
- item->rule = l->data;
- item->is_checked = false;
- item->check = NULL;
+ item->rule = l->data;
+ item->is_checked = false;
+ item->check = NULL;
- data->rule_item_list = g_list_append(data->rule_item_list, item);
- }
+ data->rule_item_list = g_list_prepend(data->rule_item_list, item);
}
+ data->rule_item_list = g_list_reverse(data->rule_item_list);
}
-void create_select_all_rules_item(rule_delete_view_data_s *data)
+static void create_select_all_rules_item(rule_delete_view_data_s *data)
{
strncpy(rule_delete_select_all_rule.name, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SELECT_ALL), LEN_NAME);
rule_delete_select_all_rule.name[LEN_NAME - 1] = '\0';
// Note that the variable item below is freed by _free_rule_delete_item_cb(),
// called in _rule_delete_nf_pop_cb()
- rule_delete_item_s *item = malloc(sizeof(rule_delete_item_s));
- if (item != NULL) {
- item->rule = &rule_delete_select_all_rule;
- item->is_checked = false;
- item->check = NULL;
+ rule_delete_item_s *item = g_slice_new(rule_delete_item_s);
- data->rule_item_list = g_list_prepend(data->rule_item_list, item);
- }
+ item->rule = &rule_delete_select_all_rule;
+ item->is_checked = false;
+ item->check = NULL;
+
+ data->rule_item_list = g_list_prepend(data->rule_item_list, item);
}
static void add_select_all_item_to_genlist(rule_delete_view_data_s *data)
itc->func.text_get = _gl_rule_delete_text_get_cb;
itc->func.content_get = _gl_rule_delete_content_get_cb;
itc->func.del = NULL;
- Elm_Object_Item *it = NULL;
GList* l = g_list_nth(data.rule_item_list, 1);
while (l != NULL) {
// append item to the genlist
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(data.genlist, itc, l->data, NULL, ELM_GENLIST_ITEM_NONE, _rule_delete_menu_item_selected_cb, &data);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
rule = ((rule_delete_item_s *)(l->data))->rule;
}
}
+
elm_genlist_item_class_free(itc);
+
evas_object_show(data.genlist);
/* Add genlist to naviframe */
.ad = NULL,
.rule_details_genlist = NULL };
-char* get_rule_action(int action);
+static char* get_rule_action(int action);
static bool delete_rules_by_pattern_and_action(const get_custom_rule_s *current_rule);
static void _rule_detailed_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info);
static void _rule_detailed_view_menu_button_cb(void *data, Evas_Object *obj, void *event_info);
return NULL;
}
-void _rule_detailed_view_edit_rule_cb(void *data, Evas_Object *obj, void *event_info)
+static void _rule_detailed_view_edit_rule_cb(void *data, Evas_Object *obj, void *event_info)
{
rule_detailed_view_data_s *rdvd = data;
elm_ctxpopup_dismiss(rdvd->ctxpopup);
create_privacy_dlp_rule_edit_view(rdvd->ad, rdvd->pop_to_nf_it, NULL, &rdvd->current_rule, NULL, rdvd->rule_list_data, rdvd);
}
-void _rule_detailed_view_delete_ok_cb(void *data, Evas_Object *obj, void *event_info)
+static void _rule_detailed_view_delete_ok_cb(void *data, Evas_Object *obj, void *event_info)
{
rule_detailed_view_data_s *rdvd = data;
elm_naviframe_item_pop(rdvd->ad->nf);
}
-void _rule_detailed_view_delete_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+static void _rule_detailed_view_delete_cancel_cb(void *data, Evas_Object *obj, void *event_info)
{
rule_detailed_view_data_s *rdvd = data;
elm_popup_dismiss(rdvd->delete_popup);
eext_object_event_callback_add(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_menu_button_cb, rdvd);
}
-void _rule_detailed_view_delete_rule_cb(void *data, Evas_Object *obj, void *event_info)
+static void _rule_detailed_view_delete_rule_cb(void *data, Evas_Object *obj, void *event_info)
{
rule_detailed_view_data_s *rdvd = data;
evas_object_smart_callback_add(rdvd->delete_popup, "dismissed", _rule_detailed_view_popup_dismissed_cb, rdvd);
}
-Eina_Bool _rule_detailed_view_nf_pop_cb(void *data, Evas_Object* obj)
+static Eina_Bool _rule_detailed_view_nf_pop_cb(void *data, Evas_Object* obj)
{
rule_detailed_view_data_s *rdvd = data;
if (NULL != rdvd->rule_list_data)
eext_object_event_callback_del(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_menu_button_cb);
eext_object_event_callback_add(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_dismiss_menu_cb, rdvd);
- rdvd->ctxpopup = create_ctxpop(rdvd->ad);
- elm_ctxpopup_item_append(rdvd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_EDIT), NULL, _rule_detailed_view_edit_rule_cb, data);
- elm_ctxpopup_item_append(rdvd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _rule_detailed_view_delete_rule_cb, data);
- evas_object_smart_callback_add(rdvd->ctxpopup, "dismissed", _rule_detailed_view_menu_dismissed_cb, rdvd);
+ if (!rdvd->ctxpopup) {
+ rdvd->ctxpopup = create_ctxpop(rdvd->ad);
+ elm_ctxpopup_item_append(rdvd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_EDIT), NULL, _rule_detailed_view_edit_rule_cb, data);
+ elm_ctxpopup_item_append(rdvd->ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _rule_detailed_view_delete_rule_cb, data);
+ evas_object_smart_callback_add(rdvd->ctxpopup, "dismissed", _rule_detailed_view_menu_dismissed_cb, rdvd);
+ } else {
+ evas_object_show(rdvd->ctxpopup);
+ }
}
static void _rule_detailed_view_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
{
rule_detailed_view_data_s *rdvd = data;
- delete_ctxpopup(obj);
- rdvd->ctxpopup = NULL;
eext_object_event_callback_del(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_dismiss_menu_cb);
if (NULL == rdvd->delete_popup)
return deleted;
}
-void set_current_pattern_name(rule_detailed_view_data_s *data)
+static void set_current_pattern_name(rule_detailed_view_data_s *data)
{
const int res = privacy_guard_client_foreach_dlp_patterns(_pg_dlp_rule_pattern_name_cb, data);
if (PRIV_GUARD_ERROR_SUCCESS != res) {
LOGE("privacy_guard_client_foreach_dlp_patterns() failed. Error=%d", res);
strncpy(data->pattern_name, "(error)", LEN_PATTERN);
- } else if ('\0' == data->pattern_name[0]) {
+ } else if (is_empty(data->pattern_name)) {
LOGE("Pattern %d not found in database", data->current_rule.pattern_id);
strncpy(data->pattern_name, "(null)", LEN_PATTERN);
}
}
-char* get_rule_action(int action)
-{
- switch (action) {
- case PRIV_GUARD_DLP_ACTION_ALLOW: return "Allow";
- case PRIV_GUARD_DLP_ACTION_DENY: return "Deny";
- case PRIV_GUARD_DLP_ACTION_SANITIZE: return "Sanitize";
- default: return "";
- }
-}
-
-void add_rule_item_to_genlist(Evas_Object *genlist, void* data, const char* item_style, void* func_text_get)
+static void add_rule_item_to_genlist(Evas_Object *genlist, void* data, const char* item_style, void* func_text_get)
{
Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
itc->item_style = item_style;
elm_genlist_item_class_free(itc);
}
-void set_current_rule(rule_detailed_view_data_s *data, const get_custom_rule_s *rule)
+static void set_current_rule(rule_detailed_view_data_s *data, const get_custom_rule_s *rule)
{
data->current_rule.id = rule->id;
data->current_rule.action = rule->action;
data->current_rule.application_id[LEN_APPLICATION_ID - 1] = '\0';
}
-void create_rule_detailed_view_components(rule_detailed_view_data_s *data)
+static void create_rule_detailed_view_components(rule_detailed_view_data_s *data)
{
Evas_Object *rule_details_genlist = common_genlist_add(data->ad->nf);
evas_object_size_hint_weight_set(rule_details_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
{
get_pattern_s *dlp_pattern = create_pattern(id, pattern, name, description, type, category, undeletable, leaks_count);
rule_edit_data_s *red = user_data;
- red->pattern_list = g_list_append(red->pattern_list, dlp_pattern);
+ red->pattern_list = g_list_prepend(red->pattern_list, dlp_pattern);
return true;
}
bool rule_created = false;
const GList *l;
- char rule_name[LEN_NAME];
for (l = red->app_list; l != NULL; l = l->next) {
const application_item_s *app_item = l->data;
if (!app_item->is_checked)
bool undeletable,
int leaks_count)
{
- get_pattern_s *dlp_pattern = malloc(sizeof(get_pattern_s));
+ get_pattern_s *dlp_pattern = g_slice_new(get_pattern_s);
- if (dlp_pattern != NULL) {
- dlp_pattern->id = id;
+ dlp_pattern->id = id;
- strncpy(dlp_pattern->pattern, pattern, LEN_PATTERN);
- dlp_pattern->pattern[LEN_PATTERN - 1] = '\0';
+ strncpy(dlp_pattern->pattern, pattern, LEN_PATTERN);
+ dlp_pattern->pattern[LEN_PATTERN - 1] = '\0';
- strncpy(dlp_pattern->name, name, LEN_NAME);
- dlp_pattern->name[LEN_NAME - 1] = '\0';
+ strncpy(dlp_pattern->name, name, LEN_NAME);
+ dlp_pattern->name[LEN_NAME - 1] = '\0';
- strncpy(dlp_pattern->description, description, LEN_DESCRIPTION);
- dlp_pattern->description[LEN_DESCRIPTION - 1] = '\0';
+ strncpy(dlp_pattern->description, description, LEN_DESCRIPTION);
+ dlp_pattern->description[LEN_DESCRIPTION - 1] = '\0';
- dlp_pattern->type = type;
+ dlp_pattern->type = type;
- strncpy(dlp_pattern->category.text, category, LEN_CATEGORY);
- dlp_pattern->category.text[LEN_CATEGORY - 1] = '\0';
+ strncpy(dlp_pattern->category.text, category, LEN_CATEGORY);
+ dlp_pattern->category.text[LEN_CATEGORY - 1] = '\0';
- dlp_pattern->undeletable = undeletable;
+ dlp_pattern->undeletable = undeletable;
- dlp_pattern->leaks_count = leaks_count;
- }
+ dlp_pattern->leaks_count = leaks_count;
return dlp_pattern;
}
elm_object_disabled_set(button, disable);
}
-Evas_Object *add_pattern_hoversel_to_grid(Evas_Object *rule_grid, rule_edit_data_s *data, int col, int row, int col_span, int row_span)
+static Evas_Object *add_pattern_hoversel_to_grid(Evas_Object *rule_grid, rule_edit_data_s *data, int col, int row, int col_span, int row_span)
{
Evas_Object *hoversel = elm_hoversel_add(rule_grid);
elm_hoversel_horizontal_set(hoversel, EINA_FALSE);
if (NULL == g_list_find(data->pattern_ids_in_use_list, GINT_TO_POINTER(dlp_pattern->id))) {
/* if pattern is available, set the first available pattern to hoversel */
const char *hoversel_text = elm_object_text_get(hoversel);
- if (CUSTOM_PATTERN_ITEM_ID != dlp_pattern->id && NULL == data->current_rule && '\0' == hoversel_text[0]) {
+ if (CUSTOM_PATTERN_ITEM_ID != dlp_pattern->id && NULL == data->current_rule && is_empty(hoversel_text)) {
current_pattern = dlp_pattern;
elm_object_text_set(hoversel, current_pattern->name);
}
}
rule_edit_data_s *data = rule_edit_data;
+
if (!elm_hoversel_expanded_get(data->pattern_hoversel))
elm_hoversel_hover_end(data->pattern_hoversel);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_dlp_custom_patterns() failed. [%d]", res);
get_pattern_s *custom_pattern = create_pattern(CUSTOM_PATTERN_ITEM_ID, "", dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_CUSTOM), "", PRIV_GUARD_DLP_PATTERN_STRING, "", true, 0);
- data->pattern_list = g_list_append(data->pattern_list, custom_pattern);
+ data->pattern_list = g_list_prepend(data->pattern_list, custom_pattern);
+
+ data->pattern_list = g_list_reverse(data->pattern_list);
current_pattern = NULL;
GList* l;
/* Append patterns to hoversel */
for (l = data->pattern_list; l != NULL; l = l->next) {
get_pattern_s *dlp_pattern = l->data;
+
if (CUSTOM_PATTERN_ITEM_ID != dlp_pattern->id && strcmp(pattern, dlp_pattern->pattern) == 0 && pattern_type == dlp_pattern->type && undeletable == dlp_pattern->undeletable)
current_pattern = dlp_pattern;
Elm_Object_Item *item = elm_hoversel_item_add(data->pattern_hoversel, dlp_pattern->name, NULL, ELM_ICON_NONE, _rule_edit_pattern_item_cb, dlp_pattern);
+
+ if (NULL != g_list_find(data->pattern_ids_in_use_list, GINT_TO_POINTER(dlp_pattern->id)) && strcmp(dlp_pattern->name,elm_object_text_get(data->pattern_hoversel)))
+ elm_object_item_disabled_set(item, EINA_TRUE);
}
+
if (NULL != current_pattern)
elm_object_text_set(data->pattern_hoversel, current_pattern->name);
log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_dlp_custom_patterns() failed. [%d]", res);
get_pattern_s *custom_pattern = create_pattern(CUSTOM_PATTERN_ITEM_ID, "", dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_CUSTOM), "", PRIV_GUARD_DLP_PATTERN_STRING, "", true, 0);
- rule_edit_data.pattern_list = g_list_append(rule_edit_data.pattern_list, custom_pattern);
+ rule_edit_data.pattern_list = g_list_prepend(rule_edit_data.pattern_list, custom_pattern);
+
+ rule_edit_data.pattern_list = g_list_reverse(rule_edit_data.pattern_list);
Evas_Object *bg = elm_bg_add(ad->nf);
elm_bg_color_set(bg, 255, 255, 255);
.rule_ctxpopup = NULL
};
-void apply_rule_action_filter(dlp_rule_list_data_s *rld, Evas_Object *obj, int action);
-void create_rule_genlist(dlp_rule_list_data_s *data);
-const char *get_rule_action_text(rule_action_filter action);
-void set_rule_action_filter_text(Evas_Object *action_hoversel, int action);
+static void apply_rule_action_filter(dlp_rule_list_data_s *rld, Evas_Object *obj, int action);
+static void create_rule_genlist(dlp_rule_list_data_s *data);
+static const char *get_rule_action_text(rule_action_filter action);
+static void set_rule_action_filter_text(Evas_Object *action_hoversel, int action);
static void _rule_list_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info);
static void _rule_list_view_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
static bool _pg_dlp_rules_cb(int id, PgDlpAction action, int pattern_id, const char *name, const char *description, const char *application_id, int leaks_count, void *user_data)
{
/* create a new rule and store db data in it*/
- get_custom_rule_s *rule = (get_custom_rule_s *)malloc(sizeof(get_custom_rule_s));
-
- if (rule != NULL) {
- rule->id = id;
- rule->action = action;
- rule->pattern_id = pattern_id;
- strncpy(rule->name, name, LEN_NAME);
- rule->name[LEN_NAME - 1] = '\0';
- strncpy(rule->description, description, LEN_DESCRIPTION);
- rule->description[LEN_DESCRIPTION - 1] = '\0';
- rule->leaks_count = leaks_count;
- strncpy(rule->application_id, application_id, LEN_APPLICATION_ID);
- rule->application_id[LEN_APPLICATION_ID - 1] = '\0';
-
- GList **dlp_rules_list = user_data;
- *dlp_rules_list = g_list_prepend(*dlp_rules_list, rule);
- }
+ get_custom_rule_s *rule = g_slice_new(get_custom_rule_s);
+
+ rule->id = id;
+ rule->action = action;
+ rule->pattern_id = pattern_id;
+ strncpy(rule->name, name, LEN_NAME);
+ rule->name[LEN_NAME - 1] = '\0';
+ strncpy(rule->description, description, LEN_DESCRIPTION);
+ rule->description[LEN_DESCRIPTION - 1] = '\0';
+ rule->leaks_count = leaks_count;
+ strncpy(rule->application_id, application_id, LEN_APPLICATION_ID);
+ rule->application_id[LEN_APPLICATION_ID - 1] = '\0';
+
+ GList **dlp_rules_list = user_data;
+ *dlp_rules_list = g_list_prepend(*dlp_rules_list, rule);
+
return true;
}
static void _rule_genlist_del_cb(void *data, Evas_Object *obj)
{
- get_custom_rule_s *item = (get_custom_rule_s *)data;
- free(item);
+ g_slice_free(dlp_item_rule_s, data);
}
static char* _rule_genlist_text_get_cb(void *data, Evas_Object *obj, const char *part)
eext_object_event_callback_del(rld->rule_genlist, EEXT_CALLBACK_MORE, _rule_list_view_menu_button_cb);
eext_object_event_callback_add(rld->rule_genlist, EEXT_CALLBACK_MORE, _rule_list_view_dismiss_menu_cb, rld);
- rld->rule_ctxpopup = create_ctxpop(rld->ad);
- elm_ctxpopup_item_append(rld->rule_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CREATE), NULL, _rule_list_view_create_rule_cb, data);
- elm_ctxpopup_item_append(rld->rule_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _rule_list_view_delete_rules_cb, data);
- evas_object_smart_callback_add(rld->rule_ctxpopup, "dismissed", _rule_list_view_menu_dismissed_cb, rld);
+ if (!rld->rule_ctxpopup) {
+ rld->rule_ctxpopup = create_ctxpop(rld->ad);
+ elm_ctxpopup_item_append(rld->rule_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CREATE), NULL, _rule_list_view_create_rule_cb, data);
+ elm_ctxpopup_item_append(rld->rule_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _rule_list_view_delete_rules_cb, data);
+ evas_object_smart_callback_add(rld->rule_ctxpopup, "dismissed", _rule_list_view_menu_dismissed_cb, rld);
+ } else {
+ evas_object_show(rld->rule_ctxpopup);
+ }
}
static void _rule_list_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info)
{
dlp_rule_list_data_s *rld = data;
- delete_ctxpopup(obj);
- rld->rule_ctxpopup = NULL;
-
eext_object_event_callback_del(rld->rule_genlist, EEXT_CALLBACK_MORE, _rule_list_view_dismiss_menu_cb);
eext_object_event_callback_add(rld->rule_genlist, EEXT_CALLBACK_MORE, _rule_list_view_menu_button_cb, rld);
}
if (NULL == rule_list_data.rule_list)
return;
- /* Delete all the rules */
- GList* l;
- for (l = rule_list_data.rule_list; l != NULL; l = l->next) {
- get_custom_rule_s* rule = (get_custom_rule_s*)l->data;
- free(rule);
- }
-
- g_list_free(rule_list_data.rule_list);
+ g_list_free_full(rule_list_data.rule_list, free_dlp_rule);
rule_list_data.rule_list = NULL;
}
-void apply_rule_action_filter(dlp_rule_list_data_s *data, Evas_Object *obj, int action)
-{
- data->action = action;
- set_rule_action_filter_text(obj, action);
- elm_box_unpack(data->rule_box, data->rule_genlist);
- evas_object_del(data->rule_genlist);
- create_rule_genlist(data);
-}
-
-const char *get_rule_action_text(rule_action_filter action)
-{
- switch (action) {
- case ACTION_ALLOW:
- return "Allow";
- case ACTION_DENY:
- return "Deny";
- case ACTION_SANITIZE:
- return "Sanitize";
- default:
- return "All rules";
- }
-}
-
-void set_rule_action_filter_text(Evas_Object *action_hoversel, int action)
-{
- char text[ACTION_TEXT_LEN + 1];
- text[ACTION_TEXT_LEN] = 0;
- const char *format = "<color=#FFFFFFFF>%s</color>";
- const char *action_text = get_rule_action_text(action);
- snprintf(text, ACTION_TEXT_LEN, format, action_text);
- elm_object_text_set(action_hoversel, text);
-}
-
-int populate_genlist(dlp_rule_list_data_s *data)
+static int populate_genlist(dlp_rule_list_data_s *data)
{
int rule_count = 0;
GList* l = data->rule_list;
/* Append rules as genlist item */
while (l != NULL) {
- dlp_item_rule_s *item = calloc(1, sizeof(dlp_item_rule_s));
-
- if (item != NULL) {
- // rule item data
- item->data = (get_custom_rule_s*)l->data;
- get_custom_rule_s *rule = (get_custom_rule_s*)l->data;
-
- if (filter_rule_by_action(item->data->action, data->action)) {
- // append rule to the genlist
- it = elm_genlist_item_sorted_insert(
- data->rule_genlist,
- itc,
- item,
- NULL,
- ELM_GENLIST_ITEM_NONE,
- _compare_rule_list_menu_item_cb,
- _rule_list_menu_item_selected_cb,
- data);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
- ++rule_count;
-
- const int pattern_id = rule->pattern_id;
- const PgDlpAction action = rule->action;
- while (l != NULL && pattern_id == rule->pattern_id && action == rule->action) {
- l = l->next;
- if (l != NULL)
- rule = (get_custom_rule_s*)l->data;
- }
- } else
+ dlp_item_rule_s *item = g_slice_new0(dlp_item_rule_s);
+
+ // rule item data
+ item->data = (get_custom_rule_s*)l->data;
+ get_custom_rule_s *rule = (get_custom_rule_s*)l->data;
+
+ if (filter_rule_by_action(item->data->action, data->action)) {
+ // append rule to the genlist
+ it = elm_genlist_item_sorted_insert(
+ data->rule_genlist,
+ itc,
+ item,
+ NULL,
+ ELM_GENLIST_ITEM_NONE,
+ _compare_rule_list_menu_item_cb,
+ _rule_list_menu_item_selected_cb,
+ data);
+ log_if(it == NULL, 1, "Error in elm_genlist_item_append");
+ ++rule_count;
+
+ const int pattern_id = rule->pattern_id;
+ const PgDlpAction action = rule->action;
+ while (l != NULL && pattern_id == rule->pattern_id && action == rule->action) {
l = l->next;
+ if (l != NULL)
+ rule = (get_custom_rule_s*)l->data;
+ }
} else {
- LOGE("populate_genlist() failed to calloc dlp_item_rule_s");
+ l = l->next;
}
}
-
elm_genlist_item_class_free(itc);
}
return rule_count;
}
-void create_rule_genlist(dlp_rule_list_data_s *data)
+static void create_rule_genlist(dlp_rule_list_data_s *data)
{
data->rule_genlist = common_genlist_add(data->rule_box);
evas_object_size_hint_weight_set(data->rule_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(data->rule_box, data->rule_genlist);
}
-void create_rule_list_components(dlp_rule_list_data_s *data)
+static void create_rule_list_components(dlp_rule_list_data_s *data)
{
/* Create box container to hold view's components */
data->rule_box = elm_box_add(data->view_parent);
eext_object_event_callback_add(data->rule_box, EEXT_CALLBACK_MORE, _rule_list_view_menu_button_cb, data);
}
-void create_rule_list(const PgDlpProfile profile, GList **rule_list)
+static void create_rule_list(const PgDlpProfile profile, GList **rule_list)
{
delete_rule_list();
{
char *privacy_display = NULL;
char *privacy_name = data;
- int ret = privilege_info_get_privacy_display(privacy_name, &privacy_display);
+ privilege_info_get_privacy_display(privacy_name, &privacy_display);
lreturn_if(!strcmp(part, "elm.text"), , privacy_display, "privacy = %s", data);
return "FAIL";
itc->item_style = "default";
itc->func.text_get = gl_text_get_cb;
itc->func.del = gl_del_cb;
- Elm_Object_Item *it = NULL;
int i = 0;
for (i = 0; i < (int)g_list_length(ad->privacy_list); ++i) {
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(genlist, itc, (char *)g_list_nth_data(ad->privacy_list, i), NULL, ELM_GENLIST_ITEM_NONE, _privacy_selected_cb, ad);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
#define DEFAULT_ICON_PATH _TZ_SYS_RO_APP"/org.tizen.privacy-setting/res/icon/default.png"
#define SUCCESS 1
-#define FAIL 0
+#define FAIL 0
typedef struct pg_data_list_struct {
pg_data_s *pg_data;
pg_item_data_s *item = item_list[idx];
pg_data_s *data = l->pg_data;
char str_temp[256] = {'\0',};
- char str_time[32] = {'\0',};
struct tm timeinfo;
char *label = NULL;
char *icon = NULL;
if (data->time > 0) {
localtime_r(&data->time, &timeinfo);
char buf[32];
+ char str_time[32] = {'\0',};
LOGD("time: %s", asctime_r(&timeinfo, buf));
strftime(str_time, 32, "%d/%m/%Y %I:%M %p", &timeinfo);
char *str_count = dgettext("privacy-setting", "IDS_CLD_BODY_PD_TIMES");
snprintf(str_label, sizeof(str_label), "<font_size=27>%s <font color=#3DB9CCFF>%s</font></font_size>", str_time, str_temp);
item->description = strdup(str_label);
if (item->description == NULL) {
- LOGE("Failed to allocate memory");
elm_genlist_item_class_free(itc);
+ LOGE("Failed to allocate memory");
return;
}
} else {
{
char* privacy_display = NULL;
char* privacy_name = data;
- int ret = privilege_info_get_privacy_display(privacy_name, &privacy_display);
+ privilege_info_get_privacy_display(privacy_name, &privacy_display);
lreturn_if(!strcmp(part, "elm.text"), , privacy_display, "privacy = %s", data);
return "FAIL";
}
itc->item_style = "default";
itc->func.text_get = gl_text_get_cb;
itc->func.del = gl_del_cb;
- Elm_Object_Item *it = NULL;
int i = 0;
for (i = 0; i < (int)g_list_length(ad->privacy_list); ++i) {
+ Elm_Object_Item *it = NULL;
it = elm_genlist_item_append(genlist, itc, (char*)g_list_nth_data(ad->privacy_list, i), NULL, ELM_GENLIST_ITEM_NONE, privacy_selected_cb, ad);
log_if(it == NULL, 1, "Error in elm_genlist_item_append");
}
char* privilege_name = strdup((char*)user_data);
char *pkgid = NULL;
int ret = pkgmgrinfo_pkginfo_get_pkgid(filter_handle, &pkgid);
- return_if(ret != PMINFO_R_OK, free(pkgid); free(privilege_name), -1, "pkgmgrinfo_pkginfo_get_pkgname failed");
+ return_if(ret != PMINFO_R_OK, , -1, "pkgmgrinfo_pkginfo_get_pkgid failed");
char *pkgidd = strdup(pkgid);
GList* find = g_list_find_custom(pkg_list, pkgid, (GCompareFunc)strcmp);
if (find != NULL) {
/* Add app list to package data item */
pkgmgrinfo_pkginfo_h pkg_handle;
ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkg_handle);
- return_if(ret != PMINFO_R_OK, free(pkgidd); free(privilege_name), -1, "pkgmgrinfo_pkginfo_get_pkginfo failed");
+ return_if(ret != PMINFO_R_OK, free(privilege_name); free(pkgidd), -1, "pkgmgrinfo_pkginfo_get_pkginfo failed");
/* See if the package is user-settable */
int is_settable = privilege_info_is_user_settable(pkgid, privacy_name);