Package update to call privacy-guard-setting instead of -client + Code style fixes 02/176502/3 accepted/tizen/unified/20180426.145835 submit/tizen/20180424.100801
authorSaulo Moraes <s.moraes@samsung.com>
Thu, 19 Apr 2018 19:23:51 +0000 (16:23 -0300)
committerSaulo Aldighieri Moraes <s.moraes@samsung.com>
Fri, 20 Apr 2018 13:42:48 +0000 (10:42 -0300)
Change-Id: I723812d96c434251a25bac7d638b4edcf112f58a

29 files changed:
CONTRIBUTORS [new file with mode: 0644]
common/include/common_utils.h
common/src/common_ctxpopup.c
common/src/common_edit_field.c
common/src/common_popup.c
common/src/common_utils.c
packaging/org.tizen.privacy-setting.spec
ui/CMakeLists.txt
ui/src/privacy_dlp_choose_apps_view.c
ui/src/privacy_dlp_choose_rule_template_view.c
ui/src/privacy_dlp_log_detailed_view.c
ui/src/privacy_dlp_menu_view.c
ui/src/privacy_dlp_pattern_create_view.c
ui/src/privacy_dlp_pattern_delete_view.c
ui/src/privacy_dlp_pattern_detailed_view.c
ui/src/privacy_dlp_pattern_list_view.c
ui/src/privacy_dlp_reports_app_rank_view.c
ui/src/privacy_dlp_reports_data_stat_view.c
ui/src/privacy_dlp_reports_del_view.c
ui/src/privacy_dlp_reports_full_view.c
ui/src/privacy_dlp_reports_rules_and_patterns_view.c
ui/src/privacy_dlp_rule_delete_view.c
ui/src/privacy_dlp_rule_detailed_view.c
ui/src/privacy_dlp_rule_edit_view.c
ui/src/privacy_dlp_rule_list_view.c
ui/src/privacy_guard_list_view.c
ui/src/privacy_guard_package_list_view.c
ui/src/privacy_list_view.c
ui/src/privacy_package_list_view.c

diff --git a/CONTRIBUTORS b/CONTRIBUTORS
new file mode 100644 (file)
index 0000000..97d7c58
--- /dev/null
@@ -0,0 +1,17 @@
+# 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>
index 9412eee04543e6e4dbbad641ed64b7a22d8c052a..0746361d20af63972d1ba4e29aed734de3b083fa 100644 (file)
@@ -153,6 +153,15 @@ bool is_valid_pattern(const char *name, const char *description, PgDlpPatternTyp
  */
 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
index ee7412ac1addaf61f8d0dba4a68ff988530e76c0..9f47e7ef6cf0a488ff642b29d6db56350ba113a8 100644 (file)
@@ -29,10 +29,8 @@ static void _back_cb(void *data, Evas_Object *obj, void *event_info)
 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:
index ba202b375b1190f652e5a93caa838e01137c4b76..94f7e8890451c4edd983d1a154957093bad6e015 100644 (file)
@@ -19,9 +19,8 @@
  * @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;
@@ -80,16 +79,6 @@ Evas_Object *get_evas_edit_field(dlp_edit_field *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,
@@ -120,11 +109,7 @@ dlp_edit_field *create_edit_field(
                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;
@@ -151,9 +136,9 @@ dlp_edit_field *create_edit_field(
                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);
@@ -164,5 +149,5 @@ dlp_edit_field *create_edit_field(
 
 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);
 }
index ace61f936684686cd4a42a0211f8a35dbd2593de..870634604086d54c2c780f3ff899bc89df101a7d 100644 (file)
@@ -28,7 +28,7 @@ void destroy_popup(Evas_Object *popup)
        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");
index ff7ed1010a04e774e20e6fd17f09b776ef769377..ff92106d15cb7503e421a565dd379bc4cd6245ba 100644 (file)
@@ -21,7 +21,6 @@
  */
 
 #include <efl_extension.h>
-
 #include "common_utils.h"
 
 static void gl_language_changed_cb(void *data, Evas_Object *obj, void *event_info)
@@ -117,7 +116,7 @@ void show_toast_notification(const char *text, Evas_Object *obj)
  */
 void free_dlp_rule(void *rule)
 {
-       free((get_custom_rule_s *)rule);
+       g_slice_free(get_custom_rule_s, rule);
 }
 
 /**
@@ -126,7 +125,7 @@ void free_dlp_rule(void *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(
@@ -144,7 +143,7 @@ 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);
@@ -229,3 +228,8 @@ void left_trim(char *text, const size_t len_text)
                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];
+}
index 84bf8b455ed2db4a783a95aee9b37c4c14402667..14d89c8e3c1692d2f276a3caa82cdbfb20a4f5a6 100755 (executable)
@@ -3,7 +3,7 @@
 
 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
@@ -24,7 +24,7 @@ BuildRequires: pkgconfig(libtzplatform-config)
 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)
index 1c9ea65af97f5765501ddfbafe6f1d5f27b70732..9955d2c0ee3fa585d052ffb68e0c2a48d7839ffe 100755 (executable)
@@ -1,7 +1,7 @@
 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
index ba81703455e93c358e430a4e1ac7a13b5ca397a6..749f39c63a681184165bdb5c9248d4654274119c 100644 (file)
@@ -42,20 +42,20 @@ typedef struct {
        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)
 {
@@ -63,24 +63,20 @@ static bool _choose_apps_get_custom_rules_cb(int id, PgDlpAction action, int pat
        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;
 }
@@ -116,55 +112,54 @@ static char *make_default_app_name(const char *app_id)
 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;
 }
 
@@ -173,11 +168,6 @@ static gint _compare_apps_cb(gconstpointer lhs, gconstpointer rhs)
        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
@@ -233,6 +223,11 @@ static Evas_Object *_gl_choose_app_content_get_cb(void *data, Evas_Object *obj,
        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
@@ -242,10 +237,10 @@ static Evas_Object *_gl_choose_app_content_get_cb(void *data, Evas_Object *obj,
 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)
@@ -450,7 +445,7 @@ static void _choose_app_menu_item_selected_cb(void *data, Evas_Object *obj, void
                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;
@@ -468,22 +463,20 @@ size_t get_number_of_selected_apps(Evas_Object *genlist)
        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);
@@ -492,7 +485,7 @@ 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 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) {
@@ -542,7 +535,6 @@ void create_privacy_dlp_choose_apps_view(struct app_data_s *ad, Elm_Object_Item
 
        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;
@@ -580,11 +572,11 @@ void create_privacy_dlp_choose_apps_view(struct app_data_s *ad, Elm_Object_Item
        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");
        }
index 4a664bbb247c33d86ed1b06496422854b1af60cf..afa3a2bc34850d78995ec73133281690a2082075 100644 (file)
@@ -64,26 +64,25 @@ static bool _choose_rule_template_dlp_pattern_cb(
        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;
 }
 
@@ -96,7 +95,7 @@ static void _gl_rule_template_del_cb(void *data, Evas_Object *obj)
 {
        quick_rule_template_item_s *item = data;
        evas_object_del(item->radio);
-       free(item);
+       g_slice_free(quick_rule_template_item_s, item);
 }
 
 /**
@@ -257,7 +256,7 @@ static void _gl_rule_template_item_swipe(void *data, Evas_Object *obj, void *eve
  * @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);
@@ -273,7 +272,7 @@ Eina_Bool _rule_template_nf_pop_cb(void *data, Evas_Object* obj)
 */
 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;
 }
 
@@ -309,6 +308,7 @@ void create_privacy_dlp_choose_rule_template_view(struct app_data_s *ad, Elm_Obj
                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);
@@ -321,28 +321,23 @@ void create_privacy_dlp_choose_rule_template_view(struct app_data_s *ad, Elm_Obj
        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);
index 38aa9a8fe8f68b8367529b7f0f5df471085d7296..a856814bca09b8ff13d7bb7b57cfa9fea58d7d9a 100644 (file)
@@ -104,19 +104,21 @@ static void _log_details_menu_cb(void *data, Evas_Object *obj, void *event_info)
 {
        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)
@@ -137,23 +139,57 @@ static void _log_details_back_cb(void *data, Evas_Object *obj, void *event_info)
        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);
+       }
 }
 
 /**
@@ -178,88 +214,16 @@ void create_privacy_dlp_log_detailed_view(dlp_item_log_s *item, struct app_data_
        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);
 
index 2efc4346b4f5447d67d753dc481b80a85226d8ae..1db870e14332d866fcb34fae029c87c778e22821 100644 (file)
@@ -59,22 +59,16 @@ dlp_profile_s config;
  */
 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;
@@ -129,20 +123,13 @@ static char* _gl_profile_item_text_get_cb(void *data, Evas_Object *obj, const ch
                        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");
@@ -723,8 +710,7 @@ static void _selected_keepdays_cb(void *data, Evas_Object *obj, void *event_info
  */
 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);
 }
 
 /*
@@ -779,10 +765,11 @@ void create_privacy_dlp_menu_view(struct app_data_s *ad)
                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";
@@ -800,14 +787,12 @@ void create_privacy_dlp_menu_view(struct app_data_s *ad)
 
        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);
index ce1bf4ae4e1deabf643b6bb50afb5dabef829935..d28fe47d154dc8296b8da79e14a9751622ef4dfa 100644 (file)
@@ -53,13 +53,13 @@ static pattern_create_view_data_s pattern_create_view_data = {
 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)
@@ -149,7 +149,7 @@ static void _pattern_create_type_item_cb(void *data, Evas_Object *obj, void *eve
                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);
@@ -158,8 +158,8 @@ Evas_Object *add_category_hoversel_to_grid(Evas_Object *rule_grid, pattern_creat
        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);
@@ -173,7 +173,7 @@ Evas_Object *add_category_hoversel_to_grid(Evas_Object *rule_grid, pattern_creat
        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);
@@ -206,6 +206,7 @@ void create_privacy_dlp_pattern_create_view(struct app_data_s *ad, void *rule_ed
        /* 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);
index f906bb30812169cb3727f593b5fd830da2e3c71d..da7fe889c569cf6c4e3e09f96efcb3c0d634958d 100644 (file)
@@ -44,7 +44,7 @@ typedef struct {
 
 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)
 {
@@ -166,14 +166,11 @@ static void _pattern_delete_popup_ok_cb(void *data, Evas_Object *obj, void *even
        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);
        }
 }
 
@@ -182,23 +179,20 @@ static void _pattern_delete_done_cb(void *data, Evas_Object *obj, void *event_in
        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)
@@ -209,7 +203,7 @@ static void _pattern_delete_cancel_cb(void *data, Evas_Object *obj, void *event_
 
 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)
@@ -220,7 +214,7 @@ 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;
@@ -238,22 +232,20 @@ size_t get_number_of_selected_patterns(Evas_Object *genlist)
        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) {
@@ -262,14 +254,14 @@ void populate_pattern_item_list(pattern_delete_view_data_s *data, const GList *p
                        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)
@@ -295,10 +287,10 @@ void create_privacy_dlp_pattern_delete_view(struct app_data_s *ad, const GList *
        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");
 
index fcca6544ea170c9ab1f153e2ffcb931f0629605e..e0182716c04c66b4cc5045b18b7921764694cde7 100644 (file)
@@ -123,14 +123,13 @@ static char *_gl_pattern_leaks_count_text_get_cb(void *data, Evas_Object *obj, c
                        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;
 }
 
@@ -150,14 +149,11 @@ static void _pattern_detailed_view_delete_ok_cb(void *data, Evas_Object *obj, vo
        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);
        }
@@ -181,23 +177,21 @@ static void _pattern_detailed_view_delete_rule_cb(void *data, Evas_Object *obj,
        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)
@@ -207,17 +201,19 @@ static void _pattern_detailed_view_menu_button_cb(void *data, Evas_Object *obj,
                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)
@@ -230,7 +226,7 @@ static void _pattern_detailed_view_dismiss_menu_cb(void *data, Evas_Object *obj,
        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;
@@ -240,7 +236,7 @@ void add_pattern_item_to_genlist(Evas_Object *genlist, void* data, const char* i
        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);
@@ -256,7 +252,7 @@ void set_current_pattern(get_pattern_s *current_pattern, const get_pattern_s *pa
        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);
index d62fd88c536d92a32017effeedff524dbd5719d1..8fd1923d8d011b559c22eb28e5f28f44a7381510 100644 (file)
@@ -48,50 +48,49 @@ static dlp_pattern_list_data_s pattern_list_data = {
        .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)
@@ -145,7 +144,6 @@ static void _pattern_list_view_create_rule_cb(void *data, Evas_Object *obj, void
 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);
 }
@@ -157,19 +155,20 @@ static void _pattern_list_view_menu_button_cb(void *data, Evas_Object *obj, void
        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);
@@ -202,18 +201,11 @@ void delete_pattern_list()
        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];
@@ -223,12 +215,12 @@ void set_pattern_filter_text(Evas_Object *category_hoversel, dlp_pattern_list_da
        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;
 
@@ -243,7 +235,7 @@ int populate_pattern_genlist(dlp_pattern_list_data_s* data)
                /* 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;
 
@@ -257,7 +249,7 @@ int populate_pattern_genlist(dlp_pattern_list_data_s* data)
                                log_if(it == NULL, 1, "Error in elm_genlist_item_append");
                                ++pattern_count;
                        } else {
-                               free(item);
+                               g_slice_free(dlp_item_pattern_s, item);
                        }
                }
 
@@ -267,7 +259,7 @@ int populate_pattern_genlist(dlp_pattern_list_data_s* data)
        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);
@@ -275,8 +267,8 @@ void create_pattern_hoversel(dlp_pattern_list_data_s *data)
        // 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);
        }
@@ -287,7 +279,7 @@ void create_pattern_hoversel(dlp_pattern_list_data_s *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);
@@ -298,7 +290,7 @@ void create_pattern_genlist(dlp_pattern_list_data_s* data)
        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);
@@ -314,7 +306,7 @@ void create_pattern_list_components(dlp_pattern_list_data_s* data)
                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;
@@ -360,10 +352,12 @@ void create_privacy_dlp_patterns_list_view(struct app_data_s *ad, Evas_Object *p
 
        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);
 }
index 8fe9b7a5a3b0a9b3625453b235ae89359505737d..7d44e229b071f954e112ab9139f8017d556def05 100644 (file)
@@ -45,18 +45,18 @@ static dlp_statistics_cb_s stats_cb = {
 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;
 }
 
@@ -132,8 +132,7 @@ static void _menu_item_selected_cb(void *data, Evas_Object *obj, void *event_inf
  */
 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);
 }
 
 /**
@@ -150,6 +149,7 @@ void create_privacy_dlp_reports_app_rank_view(struct app_data_s *ad)
        /* 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
@@ -179,7 +179,6 @@ void create_privacy_dlp_reports_app_rank_view(struct app_data_s *ad)
                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 */
@@ -187,6 +186,7 @@ void create_privacy_dlp_reports_app_rank_view(struct app_data_s *ad)
                        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");
                }
@@ -215,6 +215,7 @@ void update_privacy_dlp_reports_app_rank_view(struct app_data_s *ad)
        /* 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
@@ -230,7 +231,6 @@ void update_privacy_dlp_reports_app_rank_view(struct app_data_s *ad)
                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 */
@@ -238,6 +238,7 @@ void update_privacy_dlp_reports_app_rank_view(struct app_data_s *ad)
                        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");
                }
index 9430b14adbdeaad874fd79dea07f442eb2ce75ea..111d204b4972398a5198de6f048dedac68235ef9 100644 (file)
@@ -42,17 +42,16 @@ static dlp_statistics_cb_s stats_cb = {
 
 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;
 }
 
@@ -119,8 +118,7 @@ static void _menu_item_selected_cb(void *data, Evas_Object *obj, void *event_inf
  */
 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);
 }
 
 /**
@@ -137,6 +135,7 @@ void create_privacy_dlp_reports_data_stat_view(struct app_data_s *ad)
        /* 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
@@ -166,7 +165,6 @@ void create_privacy_dlp_reports_data_stat_view(struct app_data_s *ad)
                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 */
@@ -174,6 +172,7 @@ void create_privacy_dlp_reports_data_stat_view(struct app_data_s *ad)
                        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");
                }
@@ -202,6 +201,7 @@ void update_privacy_dlp_reports_data_stat_view(struct app_data_s *ad)
        /* 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
@@ -217,7 +217,6 @@ void update_privacy_dlp_reports_data_stat_view(struct app_data_s *ad)
                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 */
@@ -225,6 +224,7 @@ void update_privacy_dlp_reports_data_stat_view(struct app_data_s *ad)
                        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");
                }
index 2ff1feca16d1c71d2a02d7fb187827d7e965e282..55103fcfc89a24fe85b9c41d5219544013bdb493 100644 (file)
@@ -30,6 +30,7 @@ typedef struct {
        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;
@@ -40,15 +41,16 @@ static reports_del_data_s reports_del_data = {
        .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)
 {
@@ -92,27 +94,24 @@ static void _reports_del_popup_ok_cb(void *data, Evas_Object *obj, void *event_i
        }
 
        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();
 }
 
@@ -135,27 +134,20 @@ static void _reports_del_delete_btn_cb(void *data, Evas_Object *obj, void *event
 {
        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)
@@ -202,6 +194,9 @@ static void _reports_del_select_all_selected_cb(void *data, Evas_Object *obj, vo
 
 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)
@@ -216,25 +211,12 @@ static char *_reports_del_gl_text_get_cb(void *data, Evas_Object *obj, const cha
                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;
@@ -242,6 +224,9 @@ static char *_reports_del_gl_text_get_cb(void *data, Evas_Object *obj, const cha
 
 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) {
@@ -269,8 +254,7 @@ static Evas_Object *_reports_del_gl_content_get_cb(void *data, Evas_Object *obj,
 
 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)
@@ -301,29 +285,26 @@ static void _reports_del_item_selected_cb(void *data, Evas_Object *obj, void *ev
        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;
@@ -340,7 +321,7 @@ size_t get_number_of_selected_logs(Evas_Object *genlist)
        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);
@@ -348,7 +329,7 @@ Evas_Object *create_check(Evas_Object *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);
@@ -359,26 +340,25 @@ Evas_Object *add_title_button_to_naviframe(Evas_Object *nf, Elm_Object_Item *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;
@@ -397,26 +377,24 @@ void populate_reports_del_genlist(reports_del_data_s *data)
 
        /* 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);
@@ -439,6 +417,7 @@ void create_privacy_dlp_reports_del_view(GList* log_list, int action, struct app
        }
        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);
 
index a229b82ae1a0ddb9460474d30e25ae70cb165201..c04e212868a8915789ea766e8e51c080a4f73410 100644 (file)
@@ -56,29 +56,46 @@ static reports_full_view_data_s reports_full_view_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;
@@ -95,25 +112,12 @@ static char* _gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
                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;
@@ -130,7 +134,6 @@ static Evas_Object *_gl_content_get_cb(void *data, Evas_Object *obj, const char
        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;
 
@@ -169,16 +172,8 @@ static void _menu_item_selected_cb(void *data, Evas_Object *obj, void *event_inf
 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)
@@ -192,22 +187,23 @@ static void _reports_full_menu_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);
@@ -219,25 +215,7 @@ static void _reports_full_dismiss_menu_cb(void *data, Evas_Object *obj, void *ev
        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;
 
@@ -254,19 +232,17 @@ int populate_reports_genlist(reports_full_view_data_s *data)
 
                /* 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;
                        }
                }
 
@@ -276,7 +252,7 @@ int populate_reports_genlist(reports_full_view_data_s *data)
        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);
@@ -312,20 +288,20 @@ static Evas_Object *full_view_back_btn_add(struct app_data_s *ad)
        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;
 
@@ -347,6 +323,7 @@ void create_privacy_dlp_reports_full_view(dlp_statistics_cb_s *scb, struct app_d
                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);
@@ -358,6 +335,9 @@ void create_privacy_dlp_reports_full_view(dlp_statistics_cb_s *scb, struct app_d
        /* 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);
 }
 
@@ -368,10 +348,7 @@ void update_privacy_dlp_reports_full_view()
                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();
 
@@ -383,6 +360,7 @@ void update_privacy_dlp_reports_full_view()
                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);
index 09f3594d99f57d9f4bae03d8a481d66867e23fee..779a85cc78ce6ad62ec85ef7674cbc4f1f391a21 100644 (file)
@@ -37,7 +37,7 @@ void delete_category_list();
 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();
@@ -57,7 +57,7 @@ static void _toolbar_pattern_item_cb(void *data, Evas_Object *obj, void *event_i
        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");
index b7c4edd351add4d4190854ecea652e96394f501d..5a0e86e09fd1737fb6f5fe9ff294986be4b77d47 100644 (file)
@@ -44,7 +44,7 @@ typedef struct {
 
 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)
@@ -155,7 +155,7 @@ static void _rule_delete_popup_ok_cb(void *data, Evas_Object *obj, void *event_i
 
 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)
@@ -212,7 +212,7 @@ static void set_rules_by_pattern_and_action(GList *rule_item_list, const rule_de
        }
 }
 
-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;
@@ -230,37 +230,35 @@ size_t get_number_of_selected_rules(Evas_Object *genlist)
        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)
@@ -301,11 +299,11 @@ void create_privacy_dlp_rule_delete_view(struct app_data_s *ad, const GList *rul
        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");
 
@@ -321,7 +319,9 @@ void create_privacy_dlp_rule_delete_view(struct app_data_s *ad, const GList *rul
                                rule = ((rule_delete_item_s *)(l->data))->rule;
                }
        }
+
        elm_genlist_item_class_free(itc);
+       
        evas_object_show(data.genlist);
 
        /* Add genlist to naviframe */
index a903bd7b6bff39f3d804fd76e54480bbd64e8dcc..b4710e05fc867f41ededa9a340cc875416a16df9 100644 (file)
@@ -47,7 +47,7 @@ static rule_detailed_view_data_s rule_detailed_view_data = {
        .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);
@@ -103,14 +103,14 @@ static char* _gl_rule_pattern_text_get_cb(void *data, Evas_Object *obj, const ch
        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;
 
@@ -124,7 +124,7 @@ void _rule_detailed_view_delete_ok_cb(void *data, Evas_Object *obj, void *event_
        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);
@@ -138,7 +138,7 @@ static void _rule_detailed_view_popup_dismissed_cb(void *data, Evas_Object *obj,
        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;
 
@@ -158,7 +158,7 @@ void _rule_detailed_view_delete_rule_cb(void *data, Evas_Object *obj, void *even
        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)
@@ -172,17 +172,19 @@ static void _rule_detailed_view_menu_button_cb(void *data, Evas_Object *obj, voi
        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)
@@ -234,29 +236,19 @@ static bool delete_rules_by_pattern_and_action(const get_custom_rule_s *current_
        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;
@@ -266,7 +258,7 @@ void add_rule_item_to_genlist(Evas_Object *genlist, void* data, const char* item
        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;
@@ -280,7 +272,7 @@ void set_current_rule(rule_detailed_view_data_s *data, const get_custom_rule_s *
        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);
index 598cf2b25ae556341a7320f474e00e7cbd806240..5944962c3b7a2b69f3de00793d406b9be70e725d 100644 (file)
@@ -84,7 +84,7 @@ static bool _rule_edit_get_patterns_cb(
 {
        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;
 }
@@ -136,7 +136,6 @@ static void _rule_edit_done_cb(void *data, Evas_Object *obj, void *event_info)
                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)
@@ -239,29 +238,27 @@ get_pattern_s *create_pattern(
        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;
 }
@@ -276,7 +273,7 @@ static void set_state_of_done_button(rule_edit_data_s *red)
        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);
@@ -295,7 +292,7 @@ Evas_Object *add_pattern_hoversel_to_grid(Evas_Object *rule_grid, rule_edit_data
                        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);
                                }
@@ -320,6 +317,7 @@ void update_privacy_dlp_rule_edit_view(void *rule_edit_data, const char *pattern
        }
 
        rule_edit_data_s *data = rule_edit_data;
+
        if (!elm_hoversel_expanded_get(data->pattern_hoversel))
                elm_hoversel_hover_end(data->pattern_hoversel);
 
@@ -333,18 +331,25 @@ void update_privacy_dlp_rule_edit_view(void *rule_edit_data, const char *pattern
        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);
 
@@ -395,7 +400,9 @@ void create_privacy_dlp_rule_edit_view(struct app_data_s *ad, Elm_Object_Item *p
        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);
index 2327543876d4a2b8d9b3c083d8dbc3bda15e310d..7ba50a3b237d0f6f2f333cf39bf0e7b2f7895b37 100644 (file)
@@ -52,33 +52,32 @@ static dlp_rule_list_data_s rule_list_data = {
        .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;
 }
 
@@ -104,8 +103,7 @@ static gint _compare_rules_pattern_id_action_cb(gconstpointer lhs, gconstpointer
 
 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)
@@ -159,10 +157,14 @@ static void _rule_list_view_menu_button_cb(void *data, Evas_Object *obj, void *e
        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)
@@ -175,9 +177,6 @@ static void _rule_list_view_menu_dismissed_cb(void *data, Evas_Object *obj, void
 {
        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);
 }
@@ -194,51 +193,11 @@ void delete_rule_list()
        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;
 
@@ -252,48 +211,44 @@ int populate_genlist(dlp_rule_list_data_s *data)
                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);
@@ -308,7 +263,7 @@ void create_rule_genlist(dlp_rule_list_data_s *data)
        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);
@@ -322,7 +277,7 @@ void create_rule_list_components(dlp_rule_list_data_s *data)
                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();
 
index 8d3ede5b842ff74f9f7bb657fa10c522d00cb2f6..57a14ee3ded3ad8e7d153534f3419e0ecff1b553 100644 (file)
@@ -30,7 +30,7 @@ static char* gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
 {
        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";
@@ -72,9 +72,9 @@ void create_privacy_guard_list_view(struct app_data_s *ad)
        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");
        }
index de2aab996f18d48c4810fba9f132e53e26f204f5..5f5f859d123d958580278cb18b44789b2812c36c 100644 (file)
@@ -32,7 +32,7 @@
 
 #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;
@@ -382,7 +382,6 @@ void create_privacy_guard_package_list_view(struct app_data_s *ad)
                        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;
@@ -425,6 +424,7 @@ void create_privacy_guard_package_list_view(struct app_data_s *ad)
                        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");
@@ -432,8 +432,8 @@ void create_privacy_guard_package_list_view(struct app_data_s *ad)
                                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 {
index caafff0e14f92495972c59c9fc7f6e2eff596cc9..d2023da6f36048a45d1736659ccb2d7d4c4ca403 100644 (file)
@@ -31,7 +31,7 @@ static char* gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
 {
        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";
 }
@@ -72,9 +72,9 @@ void create_privacy_list_view(struct app_data_s *ad)
        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");
        }
index 8252dda5c4c1a638ae6b424df684146cacbcabd7..950e38da64db32b902ea96f26d5e9ec66f6b0ae7 100644 (file)
@@ -353,7 +353,7 @@ static int pkg_list_cb(pkgmgrinfo_pkginfo_h filter_handle, void *user_data)
        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) {
@@ -377,7 +377,7 @@ static int pkg_list_cb(pkgmgrinfo_pkginfo_h filter_handle, void *user_data)
        /* 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);