*/
void show_toast_notification(const char *text, Evas_Object *obj);
-/**
- * @brief Frees a DLP rule structure
- * @param[in] rule pointer to a valid get_custom_rule_s structure
- */
-void free_dlp_rule(void *rule);
-
-/**
- * @brief Frees a DLP pattern structure
- * @param[in] pattern pointer to a valid pattern_s structure
- */
-void free_dlp_pattern(void *pattern);
-
-/**
- * @brief get the patterns that are currently in use by some custom rule
- * @param[out] patterns_not_in_use_list a list of ints containing the IDs of the patterns currently in use by some custom rule
- *
- * @return true if the function succeeds, false if otherwise
-*/
-bool get_pattern_ids_in_use_list(GList **patterns_not_in_use_list);
-
-/**
- * @brief check if parameters form a valid rule
- * @param[in] name the rule name
- * @param[in] description the rule description
- * @param[in] pattern the rule pattern
- *
- * @return true if the rule is valid, false if otherwise
-*/
-bool is_valid_rule(const char *name, const char *description, const get_pattern_s *pattern);
-
-/**
- * @brief check if parameters form a valid pattern
- * @param[in] name the pattern name
- * @param[in] description the pattern description
- * @param[in] type the pattern type
- * @param[in] search_term the pattern search term
- *
- * @return true if the pattern is valid, false if otherwise
-*/
-bool is_valid_pattern(const char *name, const char *description, PgDlpPatternType type, const char *search_term);
-
/**
* @brief remove leading spaces from a string. Note: string will be changed in-place
* @param[in,out] text the string to be left trimmed
evas_object_show(toast);
}
-/**
- * @brief Frees a DLP rule structure
- * @param[in] rule pointer to a valid get_custom_rule_s structure
- */
-void free_dlp_rule(void *rule)
-{
- g_slice_free(get_custom_rule_s, rule);
-}
-
-/**
- * @brief Frees a DLP pattern structure
- * @param[in] pattern pointer to a valid pattern_s structure
- */
-void free_dlp_pattern(void *pattern)
-{
- g_slice_free(get_pattern_s, pattern);
-}
-
-static bool _get_pattern_ids_in_use_cb(
- int id,
- PgDlpAction action,
- int pattern_id,
- const char *name,
- const char *description,
- const char *application_id,
- int leaks_count,
- void *user_data)
-{
- GList **pattern_ids_in_use_list = user_data;
- *pattern_ids_in_use_list = g_list_prepend(*pattern_ids_in_use_list, GINT_TO_POINTER(pattern_id));
- return true;
-}
-
static gint _compare_pattern_id_cb(gconstpointer lhs, gconstpointer rhs)
{
const int lhs_int = GPOINTER_TO_INT(lhs);
return 1;
}
-bool get_pattern_ids_in_use_list(GList **pattern_ids_in_use_list)
-{
- *pattern_ids_in_use_list = NULL;
-
- const int res = privacy_guard_client_foreach_dlp_rules(getuid(), PRIV_GUARD_DLP_PROFILE_CUSTOM,
- _get_pattern_ids_in_use_cb, pattern_ids_in_use_list);
- if (PRIV_GUARD_ERROR_SUCCESS != res) {
- LOGE("privacy_guard_client_foreach_dlp_rules() failed. [%d]", res);
- return false;
- }
-
- *pattern_ids_in_use_list = g_list_sort(*pattern_ids_in_use_list, _compare_pattern_id_cb);
-
- return true;
-}
-
// Gets position of first non-space character in a string
static size_t get_first_non_space_pos(const char *text, const size_t len_text)
{
return '\0' != text[pos];
}
-bool is_valid_rule(const char *name, const char *description, const get_pattern_s *pattern)
-{
- return is_valid_text_field(name, LEN_NAME)
- && is_valid_text_field(description, LEN_DESCRIPTION)
- && NULL != pattern;
-}
-
-bool is_valid_pattern(const char *name, const char *description, PgDlpPatternType type, const char *search_term)
-{
- if (!is_valid_text_field(name, LEN_NAME)
- || !is_valid_text_field(description, LEN_DESCRIPTION))
- return false;
-
- if (PRIV_GUARD_DLP_PATTERN_STRING == type)
- return is_valid_text_field(search_term, LEN_PATTERN);
- else
- return PRIV_GUARD_ERROR_SUCCESS == privacy_guard_client_validate_pattern(type, search_term);
-}
-
void left_trim(char *text, const size_t len_text)
{
if (NULL == text || 0 == len_text) {
BuildRequires: pkgconfig(security-privilege-manager)
BuildRequires: pkgconfig(security-manager)
BuildRequires: pkgconfig(pkgmgr-info)
-BuildRequires: pkgconfig(privacy-guard-setting)
BuildRequires: pkgconfig(capi-appfw-app-manager)
BuildRequires: pkgconfig(capi-appfw-application)
BuildRequires: pkgconfig(notification)
INCLUDE(FindPkgConfig)
SET(pkg_name "org.tizen.privacy-setting")
-pkg_check_modules(${pkg_name} REQUIRED glib-2.0 evas elementary edje eina efl-extension security-privilege-manager icu-i18n dlog security-manager pkgmgr-info privacy-guard-setting 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 capi-appfw-app-manager capi-appfw-application notification)
SET(SRCS
${CMAKE_SOURCE_DIR}/common/src/common_utils.c
src/privacy_menu_view.c
src/privacy_list_view.c
src/privacy_package_list_view.c
- src/privacy_guard_list_view.c
- src/privacy_guard_package_list_view.c
- src/privacy_dlp_menu_view.c
- src/privacy_dlp_reports_full_view.c
- src/privacy_dlp_reports_app_rank_view.c
- src/privacy_dlp_reports_data_stat_view.c
- src/privacy_dlp_log_detailed_view.c
- src/privacy_dlp_reports_rules_and_patterns_view.c
- src/privacy_dlp_rule_list_view.c
- src/privacy_dlp_rule_delete_view.c
- src/privacy_dlp_rule_detailed_view.c
- src/privacy_dlp_rule_edit_view.c
- src/privacy_dlp_pattern_list_view.c
- src/privacy_dlp_pattern_detailed_view.c
- src/privacy_dlp_reports_del_view.c
- src/privacy_dlp_choose_rule_template_view.c
- src/privacy_dlp_choose_apps_view.c
- src/privacy_dlp_rule_create_view.c
- src/privacy_dlp_pattern_create_view.c
- src/privacy_dlp_pattern_delete_view.c
- src/privacy_view.c
)
FOREACH(flag ${${pkg_name}_CFLAGS})
#include <Elementary.h>
#include <glib.h>
#include <app.h>
-#include <privacy_guard_client.h>
#define PRIVACY_MENU_SETTING "IDS_ST_HEADER_PRIVACY_SETTINGS_ABB"
#define PRIVACY_MENU_MONITOR "IDS_ST_HEADER_PRIVACY_MONITOR"
-#define PRIVACY_MENU_DLP "IDS_ST_HEADER_DATA_LEAK_MONITOR_SWA"
-#define PRIVACY_MENU_DLP_TITLE "IDS_ST_MBODY_DATA_LEAK_MONITOR_SWA"
-#define PRIVACY_MENU_DLP_DESCRIPTION "IDS_ST_SBODY_PREVENT_APPS_FROM_LEAKING_YOUR_SENSITIVE_DATA_WITHOUT_AUTHORISATION_SWA"
-#define PRIVACY_MENU_DLP_DESCRIPTION_NOTE "IDS_ST_SBODY_TO_ALLOW_THIS_FUNCTION_TO_MONITOR_YOUR_PERSONAL_INFORMATION_YOU_NEED_TO_SET_UP_YOUR_PROFILE_IN_CONTACTS_SWA"
-#define PRIVACY_MENU_DLP_PROFILE "IDS_ST_MBODY_PROTECTION_MODE_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_BASIC "IDS_ST_MBODY_BASIC_M_MODE_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_ADVANCED "IDS_ST_MBODY_ADVANCED_M_MODE_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_CUSTOM "IDS_ST_MBODY_CUSTOM_M_MODE_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_BASIC_DESCRIPTION "IDS_ST_SBODY_MONITOR_YOUR_MAIN_SENSITIVE_DATA_TO_PREVENT_IT_FROM_BEING_LEAKED_BY_MOST_APPS_THIS_MODE_IS_SUITABLE_FOR_REGULAR_USERS_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_ADVANCED_DESCRIPTION "IDS_ST_SBODY_SET_UP_STRICT_RULES_TO_PREVENT_DATA_LEAKAGE_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_ADVANCED_DESCRIPTION_NOTE "IDS_ST_SBODY_THIS_MODE_WILL_AFFECT_APP_PERFORMANCE_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_ADVANCED_ALERT "IDS_ST_POP_SOME_APPS_MAY_BE_BLOCKED_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_ADVANCED_MODE "IDS_ST_HEADER_TURN_ON_ADVANCED_PROTECTION_MODE_SWA"
-#define PRIVACY_MENU_DLP_PROFILE_CUSTOM_DESCRIPTION "IDS_ST_SBODY_CHANGE_DEFAULT_RULES_AND_PATTERNS_AND_CREATE_YOUR_OWN_TO_SET_UP_A_CUSTOMISED_PROTECTION_MODE_SWA"
-#define PRIVACY_MENU_DLP_REPORTS "IDS_ST_HEADER_REPORTS_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_FULL "IDS_ST_MBODY_FULL_REPORTS_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_APP_RANK "IDS_ST_MBODY_APP_RANKINGS_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_STATISTICS "IDS_ST_MBODY_DATA_STATISTICS_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_RULES_AND_PATTERNS "IDS_ST_MBODY_RULES_AND_PATTERNS_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_EMPTY "IDS_ST_NPBODY_NO_REPORTS_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_LOG_TITLE "IDS_ST_HEADER_REPORT_DETAILS_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_TOTAL_LEAKS "IDS_ST_SBODY_TOTAL_LEAKS_SWA"
-#define PRIVACY_MENU_DLP_SETTINGS "IDS_ST_HEADER_SETTINGS_SWA"
-#define PRIVACY_MENU_DLP_SETTINGS_LOGS_PERIOD "IDS_ST_MBODY_KEEP_LOGS_SWA"
-#define PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEANED "IDS_LOGS_CLEANED"
-#define PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEANED_FAILED "IDS_LOGS_CLEANED_FAILED"
-#define PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_DAY "IDS_ST_OPT_1_DAY_SWA"
-#define PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_WEEK "IDS_ST_OPT_1_WEEK_SWA"
-#define PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_MONTH "IDS_ST_OPT_1_MONTH_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_CATEGORY "IDS_ST_BODY_CATEGORY_C_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_APPLICATION "IDS_ST_BODY_APP_C_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_DESTINATION "IDS_ST_BODY_DESTINATION_C_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_PATTERN "IDS_ST_BODY_PATTERN_C_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION "IDS_ST_BODY_DLP_ACTION"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_LOG "IDS_ST_BODY_PACKET_C_SWA"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION_ALLOW "IDS_ST_BODY_DLP_ACTION_ALLOW"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION_DENY "IDS_ST_BODY_DLP_ACTION_DENY"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION_SANITIZE "IDS_ST_BODY_DLP_ACTION_SANITIZE"
-#define PRIVACY_MENU_DLP_REPORTS_DETAILS_ACTION_ALL_RULES "IDS_ST_BODY_DLP_ACTION_ALL_RULES"
-#define PRIVACY_MENU_DLP_CREATE_RULE_QUICK "IDS_ST_OPT_QUICK_M_PROTECTION_MODE_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULE_QUICK_DESCRIPTION "IDS_ST_SBODY_CREATE_RULES_QUICKLY_AND_EASILY_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULE_CUSTOM "IDS_ST_MBODY_CUSTOM_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULE_CUSTOM_DESCRIPTION "IDS_ST_SBODY_CREATE_RULES_FROM_SCRATCH_TO_GIVE_YOU_FULL_CONTROL_OF_YOUR_DATA_PROTECTION_USE_THIS_OPTION_TO_CREATE_NON_STANDARD_RULES_SWA"
-#define PRIVACY_MENU_DLP_RULES_N_PATTERNS_TITLE "IDS_ST_HEADER_CUSTOM_PROTECTION_MODE_SWA"
-#define PRIVACY_MENU_DLP_RULES_N_PATTERNS_TITLE_RULES "IDS_ST_TAB_RULES_SWA"
-#define PRIVACY_MENU_DLP_RULES_N_PATTERNS_TITLE_PATTERNS "IDS_ST_TAB_PATTERNS_SWA"
-#define PRIVACY_MENU_DLP_RULE_DETAIL_TITLE "IDS_ST_HEADER_RULE_DETAILS_SWA"
-#define PRIVACY_MENU_DLP_PATTERN_DETAIL_TITLE "IDS_ST_HEADER_PATTERN_DETAILS_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_CHOOSE_TEMPLATE "IDS_ST_HEADER_SELECT_TEMPLATE_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_CHOOSE_APPS "IDS_ST_HEADER_SELECT_APPS_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_CHOOSE_ACTION "IDS_ST_BODY_DLP_CREATE_RULES_CHOOSE_ACTION"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_NEXT "IDS_ST_ACBUTTON_NEXT_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL "IDS_ST_ACBUTTON_CANCEL_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DONE "IDS_ST_ACBUTTON_DONE_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_CUSTOM_RULE_CREATED_MESSAGE "IDS_ST_TPOP_RULE_CREATED_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE "IDS_ST_OPT_DELETE_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_MESSAGE "IDS_ST_TPOP_RULE_DELETED_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_POPUP_TITLE "IDS_ST_OPT_DELETE_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_MESSAGE_MESSAGE "IDS_ST_POP_THIS_RULE_WILL_BE_DELETED_ABB_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_TITLE "IDS_ST_HEADER_DELETE_PATTERNS_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_MESSAGE_MESSAGE "IDS_ST_POP_PD_PATTERNS_WILL_BE_DELETED_ABB_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_MESSAGE "IDS_ST_TPOP_PD_PATTERNS_DELETED_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_EDIT "IDS_ST_OPT_EDIT_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_SELECT_ALL "IDS_ST_MBODY_SELECT_ALL_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_CREATE "IDS_ST_OPT_CREATE_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_ALL_PATTERNS "IDS_ST_OPT_ALL_PATTERNS_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_NAME "IDS_ST_BODY_NAME_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_DESCRIPTION "IDS_ST_BODY_DESCRIPTION_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_CATEGORY "IDS_ST_BODY_CATEGORY_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_CATEGORY_NAME "IDS_ST_BODY_DLP_CREATE_RULES_MENU_CATEGORY_NAME"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_STRING_MATCH "IDS_ST_OPT_STRING_MATCH_SWA"
-#define PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_REGULAR_EXPRESSION "IDS_ST_OPT_REGULAR_EXPRESSION_SWA"
-#define PRIVACY_MENU_DLP_CREATE_PATTERN "IDS_ST_HEADER_CREATE_PATTERN_SWA"
-#define PRIVACY_MENU_DLP_LOG_ITEM_WILL_BE_DELETED "IDS_ST_POP_THIS_REPORT_WILL_BE_DELETED_ABB_SWA"
-#define PRIVACY_MENU_DLP_LOG_DELETE "IDS_ST_OPT_DELETE_SWA"
-#define PRIVACY_MENU_DLP_LOG_DELETE_LOG "IDS_ST_HEADER_DELETE_REPORT_SWA"
-#define PRIVACY_MENU_DLP_LOG_LOGS_WILL_BE_DELETED "IDS_ST_POP_PD_REPORTS_WILL_BE_DELETED_ABB_SWA"
-#define PRIVACY_MENU_DLP_LOG_DELETED "IDS_ST_TPOP_1_REPORT_DELETED_SWA"
-#define PRIVACY_MENU_DLP_LOG_SELECT_ALL "IDS_ST_MBODY_SELECT_ALL_SWA"
-#define PRIVACY_MENU_DLP_LOG_DELETE_BTN "IDS_ST_ACBUTTON_DELETE_SWA"
-#define PRIVACY_MENU_DLP_LOG_CANCEL_BTN "IDS_ST_ACBUTTON_CANCEL_SWA"
-#define PRIVACY_MENU_DLP_LOG_LOGS_DELETED "IDS_ST_TPOP_PD_REPORTS_DELETED_SWA"
-#define PRIVACY_MENU_DLP_LOG_DELETE_LOGS_TITLE "IDS_ST_HEADER_SELECT_ITEMS_SWA"
-#define PRIVACY_MENU_DLP_LOG_DELETE_LOGS_TITLE_SELECTED "IDS_ST_HEADER_PD_SELECTED_SWA"
-#define PRIVACY_MENU_DLP_BASIC_PROTECTION_MODE_APPLIED "IDS_ST_TPOP_BASIC_PROTECTION_MODE_TURNED_ON_SWA"
-#define PRIVACY_MENU_DLP_CUSTOM_PROTECTION_MODE_APPLIED "IDS_ST_TPOP_RULE_CREATED_SWA"
-#define PRIVACY_MENU_DLP_ADVANCED_PROTECTION_MODE_APPLIED "IDS_ST_TPOP_ADVANCED_PROTECTION_MODE_TURNED_ON_SWA"
-#define PRIVACY_MENU_DLP_DETAILS "IDS_ST_HEADER_DETAILS_SWA"
-#define PRIVACY_MENU_DLP_LEAKS_CAPTURED "IDS_ST_BODY_LEAKS_CAPTURED_SWA"
-#define PRIVACY_MENU_DLP_STRING_TYPE "IDS_ST_BODY_STRING_TYPE_SWA"
-#define PRIVACY_MENU_DLP_SEARCH_TERM "IDS_ST_BODY_SEARCH_TERM_SWA"
-#define PRIVACY_MENU_DLP_CATEGORY "IDS_ST_BODY_CATEGORY_SWA"
struct app_data_s {
Evas_Object *parent_layout;
#include "privacy_setting.h"
-#define KEEP_LOG_1_DAY 1
-#define KEEP_LOG_1_WEEK 7
-#define KEEP_LOG_1_MONTH 30
-
#define SELECT_ALL_APPS_ITEM_ID NULL
typedef struct {
bool status;
} pg_item_data_s;
-typedef struct {
- int log_id;
- char* app_name;
- char* app_icon;
- time_t time_stamp;
- PgDlpAction action;
- char* destination;
-} dlp_log_s;
-
-typedef struct {
- dlp_log_s* data;
- Evas_Object* check;
- bool is_checked;
-} dlp_item_log_s;
-
-typedef struct {
- char* app_name;
- char* app_icon;
- GList* logs_list;
-} dlp_item_report_s;
-
-typedef struct {
- get_custom_rule_s* data;
-} dlp_item_rule_s;
-
-typedef struct {
- get_pattern_s* data;
-} dlp_item_pattern_s;
-
-/**
- * @brief internal callback called when retrieving logs for the Application Ranking view
- * @param[in] user_id The user_id
- * @param[in] name The application name
- * @param[in] callback The actual callback function to use
- * @param[in] user_data User data to pass to the callback
- *
- * @return the result of operation (ERRORCODE : success, ....)
- *
- */
-typedef int (*dlp_foreach_leak_logs_cb) (const int, const char *, privacy_guard_client_leak_logs_cb, void *);
-
-/**
- * @brief callback called to update the Application Ranking view
- * @param[in] sd app_data structure whose naviframe should be used
- */
-typedef void (*dlp_update_stats_cb)(struct app_data_s *);
-
-typedef struct {
- const char* name;
- dlp_foreach_leak_logs_cb foreach_leak_logs;
- dlp_update_stats_cb update_stats;
-} dlp_statistics_cb_s;
-
-typedef struct {
- char *id;
- char *name;
- char *icon_path;
- bool is_checked;
- Evas_Object *check;
-} application_item_s;
-
-// Options used in rule action filters (dropdowns)
-typedef enum {
- ACTION_ALL = 0,
- ACTION_ALLOW,
- ACTION_DENY,
- ACTION_SANITIZE,
- ACTION_TOTAL ///< Defines the number of action options
-} rule_action_filter;
-
/* privacy_package_list_view */
void create_privacy_package_list_view(struct app_data_s *ad);
/* privacy_menu_view */
void create_privacy_menu_view(struct app_data_s *ad);
-/* privacy_guard_list_view */
-void create_privacy_guard_list_view(struct app_data_s *ad);
-
-/* privacy_guard_package_list_view */
-void create_privacy_guard_package_list_view(struct app_data_s *ad);
-
-/* privacy_dlp_menu_view */
-void create_privacy_dlp_menu_view(struct app_data_s *ad);
-
-/* privacy_dlp_reports_full_view */
-void create_privacy_dlp_reports_full_view(dlp_statistics_cb_s *scb, struct app_data_s *ad);
-
-void update_privacy_dlp_reports_full_view(void);
-
-/* privacy_dlp_reports_app_rank_view */
-void create_privacy_dlp_reports_app_rank_view(struct app_data_s *ad);
-
-/* privacy_dlp_reports_data_stat_view */
-void create_privacy_dlp_reports_data_stat_view(struct app_data_s *ad);
-
-/* privacy_dlp_log_detailed_view */
-void create_privacy_dlp_log_detailed_view(dlp_item_log_s *item, struct app_data_s *ad);
-
-/* privacy_dlp_reports_rules_and_patterns_view */
-void create_privacy_dlp_reports_rules_and_patterns_view(struct app_data_s *ad, const dlp_profile_s *config);
-
-/* privacy_dlp_rule_list_view */
-void update_privacy_dlp_rules_list_view(void *rule_list_data);
-
-void create_privacy_dlp_rules_list_view(struct app_data_s *ad, Evas_Object *parent, Elm_Object_Item *pop_to_nf_it, const dlp_profile_s *config);
-
-/* privacy_dlp_pattern_list_view */
-void update_privacy_dlp_patterns_list_view(void *pattern_list_data);
-
-void create_privacy_dlp_patterns_list_view(struct app_data_s *ad, Evas_Object *parent, const dlp_profile_s *config);
-
-/* privacy_dlp_rule_detailed_view */
-void update_privacy_dlp_rule_detailed_view(void *rule_detailed_view_data, const int pattern_id, const char *rule_name, const char *rule_description);
-
-void create_privacy_dlp_rule_detailed_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, get_custom_rule_s *current_rule, const dlp_profile_s *config, void *rule_list_data);
-
-/* privacy_dlp_rule_edit_view */
-void create_privacy_dlp_rule_edit_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, dlp_profile_s *config, const get_custom_rule_s *current_rule, const GList *app_list, void *rule_list_data, void *rule_detailed_view_data);
-
-/* privacy_dlp_rule_delete_view */
-void create_privacy_dlp_rule_delete_view(struct app_data_s *ad, const GList *rule_list, void *rule_list_data);
-
-/* privacy_dlp_rule_create_view */
-void deselect_create_rule_radio_group(void);
-
-/* privacy_dlp_rule_edit_view */
-void update_privacy_dlp_rule_edit_view(void *rule_edit_data, const char *pattern, const PgDlpPatternType pattern_type, bool undeletable);
-
-/* privacy_dlp_rule_create_view */
-void create_privacy_dlp_rule_create_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, dlp_profile_s *config, void *rule_list_data);
-
-/* privacy_dlp_pattern_detailed_view */
-void create_privacy_dlp_pattern_detailed_view(struct app_data_s *ad, const get_pattern_s *current_pattern, const dlp_profile_s *config, void *pattern_list_data);
-
-/* privacy_dlp_reports_del_view */
-void create_privacy_dlp_reports_del_view(GList* log_list, int action, struct app_data_s *ad);
-
-/* privacy_dlp_choose_rule_template_view */
-void clean_up_privacy_dlp_choose_rule_template_view(void);
-
-void create_privacy_dlp_choose_rule_template_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, dlp_profile_s *config, void *rule_list_view_data);
-
-/* privacy_dlp_choose_apps_view */
-void create_privacy_dlp_choose_apps_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, dlp_profile_s *config, const get_pattern_s *rule_template, void *rule_list_data, const get_custom_rule_s *editing_rule, const get_custom_rule_s *original_rule);
-
-bool filter_rule_by_action(int rule_action, rule_action_filter filter_action);
-
-/* privacy_dlp_pattern_create_view */
-void create_privacy_dlp_pattern_create_view(struct app_data_s *ad, void *rule_edit_view_data, void *pattern_list_view_data);
-
-/* privacy_dlp_pattern_delete_view */
-void create_privacy_dlp_pattern_delete_view(struct app_data_s *ad, const GList *pattern_list, void *pattern_list_data);
-
-// NOTE: code below is commented out because only allow actions will be
-// released to Tizen 4.0, so action icons become meaningless.
-//void overlay_action_image(Evas_Object *icon, PgDlpAction action);
-
#endif /* __UI_PRIVACY_SETTING_COMMON_UTILS_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_choose_apps_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-#include <app_manager.h>
-#include <string.h>
-
-#define DEFAULT_ICON_PATH _TZ_SYS_RO_APP"/org.tizen.privacy-setting/res/icon/default.png"
-
-typedef struct {
- struct app_data_s *ad;
- GList *app_list;
- dlp_profile_s *config;
- const get_pattern_s *rule_template;
- const get_custom_rule_s *editing_rule;
- const get_custom_rule_s *original_rule;
- GList *editing_rules_list;
- void *rule_list_data;
- Evas_Object *genlist;
- Evas_Object *done_button;
- Evas_Object *next_button;
- Elm_Object_Item *pop_to_nf_it;
-} choose_app_data_s;
-
-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);
- g_slice_free(application_item_s, item);
- }
-}
-
-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)
-{
- choose_app_data_s *data = user_data;
- const get_custom_rule_s *original_rule = data->original_rule;
- if (original_rule->action == action && original_rule->pattern_id == pattern_id) {
- // Note that rule will be freed in _choose_app_nf_pop_cb(), together with data->editing_rules_list
- get_custom_rule_s *rule = g_slice_new(get_custom_rule_s);
-
- rule->id = id;
- rule->action = action;
- rule->pattern_id = pattern_id;
- strncpy(rule->name, name, LEN_NAME);
- rule->name[LEN_NAME - 1] = '\0';
- strncpy(rule->description, description, LEN_DESCRIPTION);
- rule->description[LEN_DESCRIPTION - 1] = '\0';
- rule->leaks_count = leaks_count;
- strncpy(rule->application_id, application_id, LEN_APPLICATION_ID);
- rule->application_id[LEN_APPLICATION_ID - 1] = '\0';
-
- data->editing_rules_list = g_list_prepend(data->editing_rules_list, rule);
- }
- return true;
-}
-
-static gint _compare_rule_app_id_cb(gconstpointer lhs, gconstpointer rhs)
-{
- return strcmp(((const get_custom_rule_s *)lhs)->application_id, (const char *)rhs);
-}
-
-static gint _compare_selected_app_id_cb(gconstpointer lhs, gconstpointer rhs)
-{
- return strcmp((const char *)lhs, (const char *)rhs);
-}
-
-static char *make_default_app_name(const char *app_id)
-{
- // uses the last field of the app_id as default app name
- const char* def_app_name = strrchr(app_id, '.');
- if (NULL == def_app_name)
- def_app_name = app_id; // if a dot is not found then use the app_id as default app name
- else
- ++def_app_name; // skip the dot
-
- return strdup(def_app_name); // this must be freed by the caller
-}
-
-/**
- * @brief Internal callback function used to retrieve application information
- * @param[in] app_info appliation handle
- * @param[in] user_data the user data
- * @return this function always returns true
- */
-static bool _choose_app_app_info_cb(app_info_h app_info, void *user_data)
-{
- // Note that app will be freed in _choose_app_nf_pop_cb(), together with choose_app_data->app_list
- application_item_s *app = g_slice_new(application_item_s);
-
- 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 (is_empty(label)) {
- free(label);
- label = make_default_app_name(app->id);
- }
- app->name = label;
- }
-
- // 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_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;
-}
-
-static gint _compare_apps_cb(gconstpointer lhs, gconstpointer rhs)
-{
- return strcasecmp(((const application_item_s *)lhs)->name, ((const application_item_s *)rhs)->name);
-}
-
-/**
- * @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
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- * @return the text to be displayed
- */
-static char *_gl_choose_app_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- application_item_s *app_item = data;
-
- if (!strcmp(part, "elm.text"))
- return strdup(app_item->name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (SELECT_ALL_APPS_ITEM_ID != app_item->id)
- return strdup(app_item->id);
- }
-
- return NULL;
-}
-
-/**
- * @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
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- * @return the application icon to be displayed
- */
-static Evas_Object *_gl_choose_app_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- application_item_s *app_item = data;
-
- if (strcmp(part, "elm.swallow.icon") == 0) {
- if (SELECT_ALL_APPS_ITEM_ID != app_item->id) {
- Evas_Object *icon = elm_icon_add(obj);
- if (!elm_image_file_set(icon, app_item->icon_path, NULL))
- // Sometimes an app has a non-empty icon path, but still fails to set the icon image.
- // In these cases, we set the default icon to app
- elm_image_file_set(icon, DEFAULT_ICON_PATH, NULL);
- evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(50), ELM_SCALE_SIZE(50));
- return icon;
- }
- }
-
- if (strcmp(part, "elm.swallow.end") == 0) {
- Evas_Object *check = common_create_check(obj);
- elm_check_state_set(check, app_item->is_checked ? EINA_TRUE : EINA_FALSE);
- app_item->check = check;
- return check;
- }
-
- 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
- * @param[in] obj The object invoking this callback function
- * @return This function always returns EINA_TRUE
- */
-static Eina_Bool _choose_app_nf_pop_cb(void *data, Evas_Object* obj)
-{
- choose_app_data_s *choose_app_data = data;
- 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_dlp_rule);
- choose_app_data->editing_rules_list = NULL;
-
- if (NULL == choose_app_data->rule_template)
- // in the create custom rule flow, we return to the create
- // rule menu so we need to reset that radio group
- deselect_create_rule_radio_group();
-
- return EINA_TRUE;
-}
-
-/**
- * @brief Internal callback function when the cancel button is pressed
- * @param[in] data The user data passed to the callback function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _choose_app_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- choose_app_data_s *choose_app_data = data;
- elm_naviframe_item_pop(choose_app_data->ad->nf);
-}
-
-/**
- * @brief Internal callback function when the done button is pressed
- * @param[in] data The user data passed to the callback function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _choose_app_done_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const choose_app_data_s *choose_app_data = data;
- const get_pattern_s *template = choose_app_data->rule_template;
- const get_custom_rule_s *editing_rule = choose_app_data->editing_rule;
- bool custom_rule_created = false;
- GList *selected_apps_list = NULL;
- GList *l; // note that the 0th element is "select all"
- for (l = choose_app_data->app_list; l != NULL; l = l->next) {
- const application_item_s *app_item = l->data;
- if (NULL == app_item)
- continue;
- if (!app_item->is_checked)
- continue;
-
- const char *app_id = (SELECT_ALL_APPS_ITEM_ID == app_item->id) ? "" : app_item->id;
- if (NULL == editing_rule) {
- // Rule creation
- const int res = privacy_guard_client_add_dlp_custom_rule(
- getuid(),
- PRIV_GUARD_DLP_ACTION_ALLOW,
- template->id,
- template->name,
- template->description,
- app_id);
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- LOGI("Created custom rule (template id=%d, app id=%s)", template->id, app_item->id);
- custom_rule_created = true;
- } else {
- LOGE("Failed to create custom rule (template id=%d, app id=%s). Error=%d", template->id, app_item->id, res);
- }
- } else {
- // Rule editing
- const GList *found = g_list_find_custom(choose_app_data->editing_rules_list, app_id, _compare_rule_app_id_cb);
- if (NULL != found) {
- const get_custom_rule_s *found_rule = found->data;
- const int res = privacy_guard_client_update_dlp_custom_rule(
- found_rule->id,
- editing_rule->action,
- editing_rule->pattern_id,
- editing_rule->name,
- editing_rule->description,
- app_id);
- if (PRIV_GUARD_ERROR_SUCCESS == res)
- LOGI("Updated custom rule (id=%d)", found_rule->id);
- else
- LOGI("Failed to update custom rule (id=%d). Error=%d", editing_rule->id, res);
- } else {
- const int res = privacy_guard_client_add_dlp_custom_rule(
- getuid(),
- editing_rule->action,
- editing_rule->pattern_id,
- editing_rule->name,
- editing_rule->description,
- app_id);
- if (PRIV_GUARD_ERROR_SUCCESS == res)
- LOGI("Created custom rule (app id=%s)", app_id);
- else
- LOGE("Failed to create custom rule (app id=%s). Error=%d", app_id, res);
- }
- selected_apps_list = g_list_prepend(selected_apps_list, (SELECT_ALL_APPS_ITEM_ID == app_item->id) ? "" : app_item->id);
- }
-
- if (SELECT_ALL_APPS_ITEM_ID == app_item->id)
- break;
- }
-
- if (NULL != editing_rule) {
- // delete rules that were unchecked by the user
- delete_unchecked_apps_rules(choose_app_data->editing_rules_list, selected_apps_list);
- }
-
- g_list_free(selected_apps_list);
-
- if (custom_rule_created) {
- if (NULL == choose_app_data->rule_list_data) {
- show_toast_notification(
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CUSTOM_PROTECTION_MODE_APPLIED),
- choose_app_data->ad->win);
- } else {
- show_toast_notification(
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CUSTOM_RULE_CREATED_MESSAGE),
- choose_app_data->ad->win);
- }
- }
-
- // Update profile
- if (NULL != choose_app_data->config) {
- choose_app_data->config->profile = PRIV_GUARD_DLP_PROFILE_CUSTOM;
- privacy_guard_client_set_dlp_profile(getuid(), choose_app_data->config);
- }
- // Refresh main menu to update new profile value
- elm_genlist_realized_items_update(elm_object_item_part_content_get(choose_app_data->pop_to_nf_it, "default"));
-
- clean_up_privacy_dlp_choose_rule_template_view();
-
- elm_naviframe_item_pop_to(choose_app_data->pop_to_nf_it);
-
- if (NULL != choose_app_data->rule_list_data)
- // Update rules list view
- update_privacy_dlp_rules_list_view(choose_app_data->rule_list_data);
- else
- // Create rules list view
- create_privacy_dlp_reports_rules_and_patterns_view(choose_app_data->ad, choose_app_data->config);
-}
-
-static void _choose_app_next_cb(void *data, Evas_Object *obj, void *event_info)
-{
- choose_app_data_s *choose_app_data = data;
- create_privacy_dlp_rule_edit_view(
- choose_app_data->ad,
- choose_app_data->pop_to_nf_it,
- choose_app_data->config,
- NULL,
- choose_app_data->app_list,
- choose_app_data->rule_list_data,
- NULL);
-}
-
-/**
- * @brief Internal callback function when an application item is selected.
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _choose_app_menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- application_item_s *app_item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- app_item->is_checked = !app_item->is_checked;
-
- /* Set check box state, in case user tapped outside it */
- elm_check_state_set(app_item->check, app_item->is_checked ? EINA_TRUE : EINA_FALSE);
-
- choose_app_data_s *choose_app_data = data;
- if (SELECT_ALL_APPS_ITEM_ID != app_item->id) {
- Elm_Object_Item *select_all_item = elm_genlist_nth_item_get(choose_app_data->genlist, 0);
- if (!app_item->is_checked) {
- /* set "Select all" check off */
- set_app_item_check_state(select_all_item, false);
- } else {
- bool all_selected = true;
- GList *l;
- // check if all items are selected. Note that the 1st element of app_list
- // is the select button, so we start looping from the 2nd element
- for (l = g_list_nth(choose_app_data->app_list, 1); l != NULL; l = l->next) {
- if (!((application_item_s *)l->data)->is_checked) {
- all_selected = false;
- break;
- }
- }
- /* if all items are selected, set select all check on */
- if (all_selected)
- set_app_item_check_state(select_all_item, true);
- }
- } else {
- /* Select or deselect items */
- ei = elm_genlist_item_next_get(ei);
- while (NULL != ei) {
- set_app_item_check_state(ei, app_item->is_checked);
- ei = elm_genlist_item_next_get(ei);
- }
- }
-
- const Eina_Bool disable_next_button = get_number_of_selected_apps(choose_app_data->genlist) == 0 ? EINA_TRUE : EINA_FALSE;
- if (NULL != choose_app_data->done_button)
- elm_object_disabled_set(choose_app_data->done_button, disable_next_button);
- else if (NULL != choose_app_data->next_button)
- elm_object_disabled_set(choose_app_data->next_button, disable_next_button);
-}
-
-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;
- size_t i;
- // Count checked log ids
- for (i = 1; i <= total_apps; ++i) { // note that 0th item is "Select all", so we skip it
- Elm_Object_Item *item = elm_genlist_nth_item_get(genlist, i);
- if (NULL != item) {
- application_item_s *app_item = elm_object_item_data_get(item);
- if (NULL != app_item && app_item->is_checked)
- ++app_count;
- }
- }
-
- return app_count;
-}
-
-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 = 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);
-}
-
-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);
- app_item->is_checked = state;
- elm_check_state_set(app_item->check, state ? EINA_TRUE : EINA_FALSE);
- }
-}
-
-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) {
- const get_custom_rule_s *rule = l->data;
- if (NULL != g_list_find_custom(selected_apps_list, rule->application_id, _compare_selected_app_id_cb))
- continue;
-
- const int res = privacy_guard_client_delete_dlp_custom_rule(rule->id);
- if (PRIV_GUARD_ERROR_SUCCESS == res)
- LOGD("Rule %d deleted", rule->id);
- else
- LOGE("Failed to delete rule %d. Error=%d", rule->id, res);
- }
-}
-
-static void add_select_all_item_to_genlist(choose_app_data_s *data)
-{
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- itc->item_style = "singleline";
- 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 = elm_genlist_item_append(data->genlist, itc, data->app_list->data, NULL, ELM_GENLIST_ITEM_NONE, _choose_app_menu_item_selected_cb, data);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
-
- elm_genlist_item_class_free(itc);
-}
-
-
-/**
- * @brief Displays the Choose Applications view
- * @param[in] ad the appliation data
- * @param[in] pop_to_nf_it the view to return to after user press the done button
- * @param[in] config the user's configuration
- * @param[in] rule_template the pattern to be used as template for new rules
- * @param[in] rule_list_data pointer to a dlp_rule_list_data_s. May be NULL
- * @param[in] editing_rule rule being currently edited. May be NULL
- * @param[in] original_rule original rule (before editing). May be NULL if editing_rule is NULL
- */
-void create_privacy_dlp_choose_apps_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, dlp_profile_s *config, const get_pattern_s *rule_template, void *rule_list_data, const get_custom_rule_s *editing_rule, const get_custom_rule_s *original_rule)
-{
- if (NULL == ad || NULL == pop_to_nf_it || (NULL != editing_rule && NULL == original_rule)) {
- LOGE("Invalid parameter");
- return;
- }
-
- 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;
- data.app_list = NULL;
- data.config = config;
- data.rule_template = rule_template;
- data.editing_rule = editing_rule;
- data.original_rule = original_rule;
- data.editing_rules_list = NULL;
- data.rule_list_data = rule_list_data;
- data.pop_to_nf_it = pop_to_nf_it;
- data.done_button = NULL;
- data.next_button = NULL;
-
- if (NULL != data.editing_rule) {
- const int res = privacy_guard_client_foreach_dlp_rules(getuid(), PRIV_GUARD_DLP_PROFILE_CUSTOM, _choose_apps_get_custom_rules_cb, &data);
- if (PRIV_GUARD_ERROR_SUCCESS != res) {
- LOGE("privacy_guard_client_foreach_dlp_rules() failed. Error=%d", res);
- return;
- }
- }
-
- const int res = app_manager_foreach_app_info(_choose_app_app_info_cb, &data);
- if (res < 0) {
- LOGE("app_manager_foreach_app_info() failed. Error=%d", res);
- return;
- }
-
- data.app_list = g_list_sort(data.app_list, _compare_apps_cb);
- create_select_all_apps_item(&data);
-
- data.genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(data.genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(data.genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- add_select_all_item_to_genlist(&data);
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- 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 = _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");
- }
-
- elm_genlist_item_class_free(itc);
-
- evas_object_show(data.genlist);
-
- /* Add genlist to naviframe */
- Elm_Object_Item *nf_it = elm_naviframe_item_push(
- ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_CHOOSE_APPS),
- NULL,
- NULL,
- data.genlist,
- NULL);
-
- /* set callback to genlist item pop event */
- elm_naviframe_item_pop_cb_set(nf_it, _choose_app_nf_pop_cb, &data);
- /* add cancel button to naviframe title bar */
- common_naviframe_btn_add(ad->nf, nf_it, true, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _choose_app_cancel_cb, &data);
- if (NULL != rule_template || NULL != editing_rule)
- /* this is the quick rule creation flow or the rule edit flow, so add a done button to naviframe title bar */
- data.done_button = common_naviframe_btn_add(ad->nf, nf_it, false, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DONE),
- _choose_app_done_cb, &data);
- else
- /* this is the custom rule creation flow, add next button to naviframe title bar */
- data.next_button = common_naviframe_btn_add(ad->nf, nf_it, false, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_NEXT),
- _choose_app_next_cb, &data);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_choose_rule_template_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-#include <efl_extension.h>
-
-// Struct used to store rule template menu data
-typedef struct {
- struct app_data_s *ad;
- GList *patterns_in_use_list;
- GList *pattern_list;
- const get_pattern_s *current_pattern;
- dlp_profile_s *config;
- void *rule_list_view_data;
- Evas_Object *radio_group;
- Evas_Object *next_button;
- Elm_Object_Item *pop_to_nf_it;
-} quick_rule_template_data_s;
-
-static quick_rule_template_data_s quick_rule_template_data = {
- .ad = NULL,
- .patterns_in_use_list = NULL,
- .pattern_list = NULL,
- .current_pattern = NULL,
- .config = NULL,
- .radio_group = NULL,
- .next_button = NULL,
- .pop_to_nf_it = NULL };
-
-// Struct used to create rule template menu items
-typedef struct {
- get_pattern_s *pattern;
- Evas_Object *radio;
-} quick_rule_template_item_s;
-
-static bool _choose_rule_template_dlp_pattern_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)
-{
- 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;
-}
-
-/**
- * @brief Function that will be operated when rule template genlist is deleted.
- * @param[in] data The item data passed to the elm_genlist_item_append() function
- * @param[in] obj The Evas object handle to be passed to the callback function
- */
-static void _gl_rule_template_del_cb(void *data, Evas_Object *obj)
-{
- quick_rule_template_item_s *item = data;
- evas_object_del(item->radio);
- g_slice_free(quick_rule_template_item_s, item);
-}
-
-/**
- * @brief Internal callback function invoked when rule template genlist item displayed
- * @param[in] data The item data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static char *_gl_rule_template_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- get_pattern_s *dlp_pattern = ((quick_rule_template_item_s *)data)->pattern;
-
- if (!strcmp(part, "elm.text"))
- return strdup(dlp_pattern->name);
-
- else if (!strcmp(part, "elm.text.multiline"))
- return strdup(dlp_pattern->description);
-
- else
- return NULL;
-}
-
-/**
- * @brief Internal callback function invoked when rule template menu item displayed
- * @param[in] data The item data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static Evas_Object* _gl_rule_template_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.swallow.end") == 0) {
- quick_rule_template_item_s *item = data;
- item->radio = elm_radio_add(obj);
- elm_radio_state_value_set(item->radio, item->pattern->id);
- return item->radio;
- }
-
- return NULL;
-}
-
-/**
- * @brief Internal callback function when a rule template is selected.
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _rule_template_menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Elm_Object_Item *ei = event_info;
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- /* Set radio group state */
- quick_rule_template_item_s *item = elm_object_item_data_get(ei);
- quick_rule_template_data_s *template_menu_data = data;
- template_menu_data->current_pattern = item->pattern;
- elm_radio_value_set(template_menu_data->radio_group, item->pattern->id);
-}
-
-/**
- * @brief Internal callback function when a rule template item is realized.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _gl_rule_template_item_realized_cb(void *data, Evas_Object *obj, void *event_info)
-{
- quick_rule_template_item_s *item = elm_object_item_data_get(event_info);
- quick_rule_template_data_s *template_menu_data = data;
-
- if (NULL == template_menu_data->radio_group &&
- NULL == g_list_find(template_menu_data->patterns_in_use_list, GINT_TO_POINTER(item->pattern->id))) {
- // start of radio group
- template_menu_data->radio_group = item->radio;
- template_menu_data->current_pattern = item->pattern;
- elm_radio_value_set(template_menu_data->radio_group, item->pattern->id);
- elm_object_disabled_set(quick_rule_template_data.next_button, EINA_FALSE);
- } else {
- elm_radio_group_add(item->radio, template_menu_data->radio_group);
- }
-}
-
-/**
- * @brief Internal callback function when the cancel button is pressed
- * @param[in] data The user data passed to the callback function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _rule_template_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- quick_rule_template_data_s *rule_template_data = data;
- elm_naviframe_item_pop(rule_template_data->ad->nf);
-}
-
-/**
- * @brief Internal callback function when the next button is pressed
- * @param[in] data The user data passed to the callback function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _rule_template_next_cb(void *data, Evas_Object *obj, void *event_info)
-{
- quick_rule_template_data_s *rule_template_data = data;
- create_privacy_dlp_choose_apps_view(
- rule_template_data->ad,
- rule_template_data->pop_to_nf_it,
- rule_template_data->config,
- rule_template_data->current_pattern,
- rule_template_data->rule_list_view_data,
- NULL,
- NULL);
-}
-
-static void _gl_rule_template_item_swipe(void *data, Evas_Object *obj, void *event_info)
-{
- Eina_List* items = elm_genlist_realized_items_get(obj);
- if (NULL == items) {
- return;
- }
-
- void *first_item = eina_list_data_get(items);
- if (NULL == first_item) {
- items = eina_list_free(items);
- return;
- }
-
- quick_rule_template_item_s *item_data = elm_object_item_data_get(first_item);
- if (NULL == item_data) {
- items = eina_list_free(items);
- return;
- }
-
- // resets radio group head to the genlist's first realized item
- quick_rule_template_data_s *template_menu_data = data;
- template_menu_data->radio_group = item_data->radio;
-
- // add other realized items to radio group
- size_t i;
- for (i = 1; i < eina_list_count(items); ++i) {
- void* nth_item = eina_list_nth(items, i);
- if (NULL == nth_item) {
- return;
- }
-
- item_data = elm_object_item_data_get(nth_item);
- elm_radio_group_add(item_data->radio, template_menu_data->radio_group);
- }
-
- if (NULL != template_menu_data->current_pattern)
- elm_radio_value_set(template_menu_data->radio_group, template_menu_data->current_pattern->id);
-
- items = eina_list_free(items);
-}
-
-/**
- * @brief Internal callback function when the choose template menu is popped from naviframe
- * @param[in] data The user data passed to the callback function
- * @param[in] obj The object invoking this callback function
- */
-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);
- rule_template_data->pattern_list = NULL;
- g_list_free(rule_template_data->patterns_in_use_list);
- rule_template_data->patterns_in_use_list = NULL;
- deselect_create_rule_radio_group();
- return EINA_TRUE;
-}
-
-/**
- * @brief clean up the Choose Rule Template view's data
-*/
-void clean_up_privacy_dlp_choose_rule_template_view()
-{
- g_list_free_full(quick_rule_template_data.pattern_list, free_dlp_pattern);
- quick_rule_template_data.pattern_list = NULL;
-}
-
-/**
- * @brief Displays the quick rule creation view
- * @param[in] ad the appliation data
- * @param[in] pop_to_nf_it the view to pop to after user creates a new rule
- * @param[in] config the user's configuration
- * @param[in] rule_list_view_data pointer to a dlp_rule_list_data_s. May be NULL
- */
-void create_privacy_dlp_choose_rule_template_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, dlp_profile_s *config, void *rule_list_view_data)
-{
- if (NULL == ad) {
- LOGE("Invalid parameter");
- return;
- }
-
- quick_rule_template_data.ad = ad;
- g_list_free(quick_rule_template_data.patterns_in_use_list);
- g_list_free_full(quick_rule_template_data.pattern_list, free_dlp_pattern);
- quick_rule_template_data.pattern_list = NULL;
- quick_rule_template_data.current_pattern = NULL;
- quick_rule_template_data.config = config;
- quick_rule_template_data.rule_list_view_data = rule_list_view_data;
- quick_rule_template_data.radio_group = NULL;
- quick_rule_template_data.pop_to_nf_it = pop_to_nf_it;
-
- const bool got_patterns = get_pattern_ids_in_use_list(&(quick_rule_template_data.patterns_in_use_list));
- log_if(!got_patterns, 1, "get_pattern_ids_in_use_list() failed");
-
- const int res = privacy_guard_client_foreach_dlp_patterns(_choose_rule_template_dlp_pattern_cb, &quick_rule_template_data);
- if (PRIV_GUARD_ERROR_SUCCESS != res) {
- 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);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _gl_rule_template_text_get_cb;
- itc->func.content_get = _gl_rule_template_get_cb;
- itc->func.del = _gl_rule_template_del_cb;
-
- GList* l;
- for (l = quick_rule_template_data.pattern_list; l != NULL; l = l->next) {
- quick_rule_template_item_s *item = g_slice_new0(quick_rule_template_item_s);
-
- // item data
- item->pattern = l->data;
- item->radio = NULL;
-
- // 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);
-
- evas_object_smart_callback_add(genlist, "realized", _gl_rule_template_item_realized_cb, &quick_rule_template_data);
- }
-
- elm_genlist_item_class_free(itc);
-
- evas_object_smart_callback_add(genlist, "swipe", _gl_rule_template_item_swipe, &quick_rule_template_data);
-
- evas_object_show(genlist);
-
- /* Add genlist to naviframe */
- Elm_Object_Item *nf_it = elm_naviframe_item_push(
- ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_CHOOSE_TEMPLATE),
- NULL,
- NULL,
- genlist,
- NULL);
-
- /* set callback to genlist item pop event */
- elm_naviframe_item_pop_cb_set(nf_it, _rule_template_nf_pop_cb, &quick_rule_template_data);
- /* add cancel button to naviframe title bar */
- common_naviframe_btn_add(ad->nf, nf_it, true, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _rule_template_cancel_cb, &quick_rule_template_data);
- /* add next button to naviframe title bar */
- quick_rule_template_data.next_button = common_naviframe_btn_add(ad->nf, nf_it, false,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_NEXT), _rule_template_next_cb, &quick_rule_template_data);
- elm_object_disabled_set(quick_rule_template_data.next_button, EINA_TRUE);
-}
+++ /dev/null
-/**
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_log_detailed_view.c
- * @version 1.0
- * @brief
- */
-
-#include <efl_extension.h>
-#include <glib.h>
-#include <time.h>
-#include <tzplatform_config.h>
-#include <privacy_guard_client.h>
-#include "common_ctxpopup.h"
-#include "common_popup.h"
-#include "common_utils.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-#include "privilege_info.h"
-
-typedef struct {
- struct app_data_s *ad;
- Evas_Object *entry;
- Evas_Object *ctxpopup;
- Evas_Object *confirm_popup;
- dlp_item_log_s *item;
-} log_details_data_s;
-
-static log_details_data_s log_details_data = {
- .ad = NULL,
- .entry = NULL,
- .ctxpopup = NULL,
- .confirm_popup = NULL,
- .item = NULL
-};
-
-static void _log_details_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info);
-static void _log_details_menu_cb(void *data, Evas_Object *obj, void *event_info);
-static void _log_details_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
-
-static void _log_details_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
-{
- log_details_data_s *ldd = data;
- const dlp_log_s *leak_log = ldd->item->data;
- const int log_id = leak_log->log_id;
-
- const int res = privacy_guard_client_purge_leak_logs_by_logid(&log_id, 1);
- if (PRIV_GUARD_ERROR_SUCCESS == res)
- show_toast_notification(dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETED), ldd->entry);
- else
- LOGE("Failed to delete logs. Error=%d", res);
-
- elm_popup_dismiss(ldd->confirm_popup);
- elm_naviframe_item_pop(ldd->ad->nf);
- update_privacy_dlp_reports_full_view();
-}
-
-static void _log_details_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- log_details_data_s *ldd = data;
- elm_popup_dismiss(ldd->confirm_popup);
-}
-
-static void _log_details_popup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- log_details_data_s *ldd = data;
- destroy_popup(ldd->confirm_popup);
- ldd->confirm_popup = NULL;
- eext_object_event_callback_add(ldd->entry, EEXT_CALLBACK_MORE, _log_details_menu_cb, ldd);
-}
-
-static void _log_details_delete_menu_cb(void *data, Evas_Object *obj, void *event_info)
-{
- log_details_data_s *ldd = data;
- elm_ctxpopup_dismiss(ldd->ctxpopup);
-
- ldd->confirm_popup = create_two_buttons_popup(
- ldd->entry,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_LOG),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_ITEM_WILL_BE_DELETED),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
- _log_details_popup_ok_cb,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _log_details_popup_cancel_cb,
- _log_details_popup_cancel_cb, ldd);
-
- evas_object_smart_callback_add(ldd->confirm_popup, "dismissed", _log_details_popup_dismissed_cb, ldd);
-}
-
-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);
-}
-
-static void _log_details_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- log_details_data_s *ldd = data;
-
- eext_object_event_callback_del(ldd->entry, EEXT_CALLBACK_MORE, _log_details_dismiss_menu_cb);
- if (NULL == ldd->confirm_popup)
- eext_object_event_callback_add(ldd->entry, EEXT_CALLBACK_MORE, _log_details_menu_cb, ldd);
-}
-
-static void _log_details_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info)
-{
- log_details_data_s *ldd = data;
- elm_ctxpopup_dismiss(ldd->ctxpopup);
-}
-
-static void _log_details_back_cb(void *data, Evas_Object *obj, void *event_info)
-{
- log_details_data_s *ldd = data;
- destroy_popup(ldd->confirm_popup);
- ldd->confirm_popup = NULL;
- elm_naviframe_item_pop(ldd->ad->nf);
-}
-
-static bool is_undisplayable_char(const unsigned char value)
-{
- return (value != 0xa && value != 0xd && (value < ' ' || value > '~'));
-}
-
-static void add_log_info_to_entry(Evas_Object *entry, const char *format, ...)
-{
- 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);
- }
-}
-
-/**
- * @brief Displays leak log details on the screen
- * @param[in] item The log item to be displayed
- * @param[in] ad The application data
- */
-void create_privacy_dlp_log_detailed_view(dlp_item_log_s *item, struct app_data_s *ad)
-{
- // Create a message entry
- Evas_Object *entry = elm_entry_add(ad->nf);
- elm_entry_editable_set(entry, EINA_FALSE);
- elm_entry_scrollable_set(entry, EINA_TRUE);
- elm_entry_line_wrap_set(entry, ELM_WRAP_CHAR);
- elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
- evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
- uid_t user_id = getuid();
-
- leak_log_get_detail_data_s detailed_log;
- 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);
-
- 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.
- //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);
-
- log_details_data.ad = ad;
- log_details_data.item = item;
- log_details_data.entry = entry;
-
- if (NULL == log_details_data.confirm_popup) {
- destroy_popup(log_details_data.confirm_popup);
- log_details_data.confirm_popup = NULL;
- }
-
- log_details_data.ctxpopup = NULL;
-
- Evas_Object *back_btn = elm_button_add(ad->nf);
- elm_object_style_set(back_btn, "naviframe/back_btn/default");
- evas_object_smart_callback_add(back_btn, "clicked", _log_details_back_cb, &log_details_data);
-
- // 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_LOG_TITLE), back_btn, NULL, entry, NULL);
-
- /* Register the Back and Menu event callback */
- eext_object_event_callback_add(entry, EEXT_CALLBACK_MORE, _log_details_menu_cb, &log_details_data);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_menu_view.c
- * @version 1.0
- * @brief
- */
-
-#include <efl_extension.h>
-#include <glib.h>
-#include <tzplatform_config.h>
-#include "common_popup.h"
-#include "common_utils.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-#include "privilege_info.h"
-
-// Struct used to store profile items
-typedef struct {
- PgDlpProfile profile;
- Evas_Object *radio;
-} profile_radio_s;
-
-// Struct used to store keep days radio items
-typedef struct {
- int id; // radio id
- Evas_Object *radio; // radio component
-} keep_days_radio_s;
-
-// List used as reference to the Report options in DLP menu
-GList *menu_reports_list;
-
-Elm_Object_Item *profile_item;
-Elm_Object_Item *keepdays_item;
-Elm_Object_Item *main_menu_nf_it;
-Evas_Object *profile_radio_group;
-Evas_Object *paranoid_popup;
-Evas_Object *keep_days_radio_group;
-dlp_profile_s config;
-
-/**
- * @brief Internal callback function invoked when dlp on/off genlist item displayed
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static char* _gl_enabled_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (!strcmp(part, "elm.text")) {
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_TITLE));
-
- } 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;
-}
-
-/**
- * @brief Internal callback function invoked when Protection Mode genlist item displayed
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static char* _gl_profile_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (!strcmp(part, "elm.text"))
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE));
-
- else if (!strcmp(part, "elm.text.multiline")) {
- switch (config.profile) {
- case PRIV_GUARD_DLP_PROFILE_BASIC: return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_BASIC));
- case PRIV_GUARD_DLP_PROFILE_ADVANCED: return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_ADVANCED));
- case PRIV_GUARD_DLP_PROFILE_CUSTOM: return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_CUSTOM));
- default: LOGE("Invalid dlp profile configuration"); break;
- }
- }
-
- return NULL;
-}
-
-static char* _gl_profile_item_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- profile_radio_s *profile_item = data;
-
- if (!strcmp(part, "elm.text")) {
- switch (profile_item->profile) {
- case PRIV_GUARD_DLP_PROFILE_BASIC:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_BASIC));
- case PRIV_GUARD_DLP_PROFILE_CUSTOM:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_CUSTOM));
- case PRIV_GUARD_DLP_PROFILE_ADVANCED:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_ADVANCED));
- default:
- LOGE("Invalid dlp profile configuration");
- break;
- }
- }
-
- else if (!strcmp(part, "elm.text.multiline")) {
- switch (profile_item->profile) {
- case PRIV_GUARD_DLP_PROFILE_BASIC:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_BASIC_DESCRIPTION));
- case PRIV_GUARD_DLP_PROFILE_CUSTOM:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_CUSTOM_DESCRIPTION));
- case PRIV_GUARD_DLP_PROFILE_ADVANCED:
- {
- 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 *advanced_description = strdup(string_buf->str);
- g_string_free(string_buf, TRUE);
- return advanced_description;
- }
- default:
- LOGE("Invalid dlp profile configuration");
- break;
- }
- }
-
- return NULL;
-}
-
-static Evas_Object* _gl_profile_item_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.swallow.end") == 0) {
- profile_radio_s *profile_item = data;
- profile_item->radio = elm_radio_add(obj);
- return profile_item->radio;
- }
-
- return NULL;
-}
-
-static void _gl_profile_item_realized_cb(void *data, Evas_Object *obj, void *event_info)
-{
- profile_radio_s *profile_item = elm_object_item_data_get(event_info);
-
- elm_radio_state_value_set(profile_item->radio, profile_item->profile);
- if (PRIV_GUARD_DLP_PROFILE_BASIC == profile_item->profile) {
- // start of radio group
- profile_radio_group = profile_item->radio;
- } else {
- elm_radio_group_add(profile_item->radio, profile_radio_group);
- if (PRIV_GUARD_DLP_PROFILE_ADVANCED == profile_item->profile) {
- // set state of radio group
- switch (config.profile) {
- case PRIV_GUARD_DLP_PROFILE_BASIC:
- elm_radio_value_set(profile_radio_group, PRIV_GUARD_DLP_PROFILE_BASIC);
- break;
- case PRIV_GUARD_DLP_PROFILE_CUSTOM:
- elm_radio_value_set(profile_radio_group, PRIV_GUARD_DLP_PROFILE_CUSTOM);
- break;
- case PRIV_GUARD_DLP_PROFILE_ADVANCED:
- elm_radio_value_set(profile_radio_group, PRIV_GUARD_DLP_PROFILE_ADVANCED);
- break;
- default:
- break;
- }
- }
- }
-}
-
-
-/**
- * @brief Internal callback function invoked when Reports group genlist item displayed
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static char* _gl_group_reports_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (!strcmp(part, "elm.text"))
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS));
-
- return NULL;
-}
-
-/**
- * @brief Internal callback function invoked when a Report genlist item is displayed
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static char* _gl_reports_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- item_data_s *id = data;
- lreturn_if(!strcmp(part, "elm.text"), , strdup(id->title), "selected menu = %s", id->title);
- return "FAIL";
-}
-
-/**
- * @brief Internal callback function invoked when Settings group genlist item is displayed
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static char* _gl_group_settings_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (!strcmp(part, "elm.text"))
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SETTINGS));
-
- return NULL;
-}
-
-/**
- * @brief Internal callback function invoked when text of keepdays item is displayed
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static char* _gl_keepdays_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (!strcmp(part, "elm.text"))
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SETTINGS_LOGS_PERIOD));
-
- else if (!strcmp(part, "elm.text.multiline")) {
- switch (config.keep_log_days) {
- case KEEP_LOG_1_DAY: return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_DAY));
- case KEEP_LOG_1_WEEK: return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_WEEK));
- case KEEP_LOG_1_MONTH: return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_MONTH));
- default: break;
- }
- }
-
- return strdup("");
-}
-
-static char* _gl_keepdays_item_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- const keep_days_radio_s *keep_days_item = data;
- switch (keep_days_item->id) {
- case KEEP_LOG_1_DAY:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_DAY));
- case KEEP_LOG_1_WEEK:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_WEEK));
- case KEEP_LOG_1_MONTH:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SETTINGS_LOGS_CLEAN_PERIOD_1_MONTH));
- default:
- LOGE("Invalid keep logs configuration");
- break;
- }
-
- return NULL;
-}
-
-static Evas_Object* _gl_keepdays_item_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.swallow.end") == 0) {
- keep_days_radio_s *keep_days_item = data;
- keep_days_item->radio = elm_radio_add(obj);
- return keep_days_item->radio;
- }
-
- return NULL;
-}
-
-static void _gl_keepdays_item_realized_cb(void *data, Evas_Object *obj, void *event_info)
-{
- keep_days_radio_s *keep_days_item = elm_object_item_data_get(event_info);
-
- elm_radio_state_value_set(keep_days_item->radio, keep_days_item->id);
- if (KEEP_LOG_1_DAY == keep_days_item->id) {
- // start of radio group
- keep_days_radio_group = keep_days_item->radio;
- } else {
- elm_radio_group_add(keep_days_item->radio, keep_days_radio_group);
- if (KEEP_LOG_1_MONTH == keep_days_item->id) {
- // set state of radio group
- switch (config.keep_log_days) {
- case KEEP_LOG_1_DAY:
- elm_radio_value_set(keep_days_radio_group, KEEP_LOG_1_DAY);
- break;
- case KEEP_LOG_1_WEEK:
- elm_radio_value_set(keep_days_radio_group, KEEP_LOG_1_WEEK);
- break;
- case KEEP_LOG_1_MONTH:
- elm_radio_value_set(keep_days_radio_group, KEEP_LOG_1_MONTH);
- break;
- default:
- break;
- }
- }
- }
-}
-
-/**
- * @brief Internal callback function invoked when dlp on/off button state change.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _check_enabled_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- uid_t user_id = getuid();
-
- int res = privacy_guard_client_set_dlp_profile(user_id, &config);
- log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_set_dlp_profile() is failed. [%d]", res);
-}
-
-/**
- * @brief Internal callback function invoked when DLP on/off genlist item displayed.
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static Evas_Object *_gl_enabled_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (!strcmp(part, "elm.swallow.end")) {
- Evas_Object *check = elm_check_add(obj);
-
- evas_object_smart_callback_add(check, "changed", _check_enabled_changed_cb, NULL);
- evas_object_propagate_events_set(check, EINA_FALSE);
-
- evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- elm_object_style_set(check, "on&off");
- elm_check_state_set(check, false);
- elm_check_state_pointer_set(check, (Eina_Bool *)(&(config.enabled)));
-
- return check;
- }
-
- return NULL;
-}
-
-/**
- * @brief Internal callback function when log cleanup period change to monthly.
- * @param[in] config The configuration with new period value
- * @param[in] obj The object invoking this callback function
- */
-static void update_config_value(void *data, Elm_Object_Item* item)
-{
- struct app_data_s *ad = data;
-
- privacy_guard_client_set_dlp_profile(getuid(), &config);
-
- elm_naviframe_item_pop(ad->nf);
- elm_genlist_item_update(item);
-}
-
-/**
- * @brief Internal callback function called when DLP on/off item is selected
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _gl_enabled_item_select_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(event_info, EINA_FALSE);
-
- /* get check object */
- Evas_Object *check = elm_object_item_part_content_get(event_info, "elm.swallow.end");
-
- /* flip dlp enabled state */
- config.enabled = elm_check_state_get(check) ? 0 : 1;
-
- const int res = privacy_guard_client_set_dlp_profile(getuid(), &config);
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- elm_check_state_set(check, config.enabled ? EINA_TRUE : EINA_FALSE);
- } else {
- LOGE("privacy_guard_client_set_dlp_profile() is failed. [%d]", res);
- }
-}
-
-/**
- * @brief Internal callback function when default profile is selected.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _change_profile_item_select_default_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Elm_Object_Item *ei = event_info;
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- if (PRIV_GUARD_DLP_PROFILE_BASIC == config.profile) {
- /* Profile is already set to default, so nothing to do */
- return;
- }
-
- config.profile = PRIV_GUARD_DLP_PROFILE_BASIC;
- update_config_value(data, profile_item);
-
- show_toast_notification(
- dgettext("privacy-setting", PRIVACY_MENU_DLP_BASIC_PROTECTION_MODE_APPLIED),
- ((struct app_data_s *)data)->win);
-}
-
-static bool _dlp_custom_rule_cb(int id, PgDlpAction action, int pattern_id, const char *name, const char *description, const char *application_id, int leaks_count, void *user_data)
-{
- int *number_of_rules = user_data;
- ++(*number_of_rules);
- return true;
-}
-
-/**
- * @brief Internal callback function when custom profile is selected.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _change_profile_item_select_custom_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Elm_Object_Item *ei = event_info;
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- if (PRIV_GUARD_DLP_PROFILE_CUSTOM == config.profile) {
- /* Profile is already set to default, so nothing to do */
- return;
- }
-
- int number_of_rules = 0;
- int res = privacy_guard_client_foreach_dlp_rules(getuid(), PRIV_GUARD_DLP_PROFILE_CUSTOM, _dlp_custom_rule_cb, &number_of_rules);
- if (PRIV_GUARD_ERROR_SUCCESS != res) {
- LOGE("privacy_guard_client_foreach_dlp_rules() failed. Error=%d", res);
- return;
- }
-
- if (0 == number_of_rules) {
- //show_create_rule_menu(data);
- create_privacy_dlp_rule_create_view(data, main_menu_nf_it, &config, NULL);
- } else {
- config.profile = PRIV_GUARD_DLP_PROFILE_CUSTOM;
- update_config_value(data, profile_item);
- // display rules and patterns list
- create_privacy_dlp_reports_rules_and_patterns_view(data, &config);
- }
-}
-
-static void _paranoid_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
-{
- config.profile = PRIV_GUARD_DLP_PROFILE_ADVANCED;
- update_config_value(data, profile_item);
- show_toast_notification(
- dgettext("privacy-setting", PRIVACY_MENU_DLP_ADVANCED_PROTECTION_MODE_APPLIED),
- ((struct app_data_s *)data)->win);
- destroy_popup(paranoid_popup);
-}
-
-static void _paranoid_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- elm_radio_value_set(profile_radio_group, config.profile);
- destroy_popup(paranoid_popup);
-}
-
-/**
- * @brief Internal callback function when paranoid profile is selected.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _change_profile_item_select_paranoid_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Elm_Object_Item *ei = event_info;
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- elm_radio_value_set(profile_radio_group, PRIV_GUARD_DLP_PROFILE_ADVANCED);
-
- if (PRIV_GUARD_DLP_PROFILE_ADVANCED == config.profile) {
- /* Profile is already set to paranoid, so nothing to do */
- return;
- }
-
- paranoid_popup = create_two_buttons_popup(
- ((struct app_data_s *)data)->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_ADVANCED_MODE),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_PROFILE_ADVANCED_ALERT),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DONE),
- _paranoid_popup_ok_cb,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _paranoid_popup_cancel_cb,
- _paranoid_popup_cancel_cb,
- data);
-}
-
-/**
- * @brief Internal callback function to dismiss ctxpopup.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _dismissed_profile_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Evas_Object *ctxpopup = data;
-
- evas_object_smart_callback_del(ctxpopup, "dismissed", _dismissed_profile_cb);
- evas_object_del(ctxpopup);
-}
-
-/**
- * @brief Internal callback function invoked when profile menu is clicked.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _selected_profile_cb(void *data, Evas_Object *obj, void *event_info)
-{
- struct app_data_s *ad = data;
-
- /* Get selected privacy */
- Elm_Object_Item *ei = event_info;
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- Evas_Object *genlist = NULL;
- genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-
- elm_object_style_set(genlist, "effect");
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _gl_profile_item_text_get_cb;
- itc->func.content_get = _gl_profile_item_content_get_cb;
- itc->func.del = NULL;
-
- static profile_radio_s profile_item_default = { .profile = PRIV_GUARD_DLP_PROFILE_BASIC, .radio = NULL };
- elm_genlist_item_append(genlist, itc, &profile_item_default, NULL, ELM_GENLIST_ITEM_NONE, _change_profile_item_select_default_cb, ad);
-
- static profile_radio_s profile_item_custom = { .profile = PRIV_GUARD_DLP_PROFILE_CUSTOM, .radio = NULL };
- elm_genlist_item_append(genlist, itc, &profile_item_custom, NULL, ELM_GENLIST_ITEM_NONE, _change_profile_item_select_custom_cb, ad);
-
- static profile_radio_s profile_item_paranoid = { .profile = PRIV_GUARD_DLP_PROFILE_ADVANCED, .radio = NULL };
- elm_genlist_item_append(genlist, itc, &profile_item_paranoid, NULL, ELM_GENLIST_ITEM_NONE, _change_profile_item_select_paranoid_cb, ad);
-
- evas_object_smart_callback_add(genlist, "realized", _gl_profile_item_realized_cb, NULL);
- elm_genlist_item_class_free(itc);
- evas_object_show(genlist);
-
- /* 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_PROFILE), common_back_btn_add(ad), NULL, genlist, NULL);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
-
-/**
- * @brief Internal callback function invoked when a report menu is clicked.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _selected_report_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected privacy */
- Elm_Object_Item *ei = event_info;
- item_data_s *selected_id = elm_object_item_data_get(ei);
- LOGD("%s is selected, index = %d", selected_id->menu, selected_id->index);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- struct app_data_s *ad = (struct app_data_s *)data;
-
- int ret = privilege_info_get_privacy_list(&(ad->privacy_list));
- log_if(ret != PRVMGR_ERR_NONE, 1, "Failed to get privacy_list");
-
- if (strstr(selected_id->menu, PRIVACY_MENU_DLP_REPORTS_FULL) != NULL)
- create_privacy_dlp_reports_full_view(NULL, ad);
-
- else if (strstr(selected_id->menu, PRIVACY_MENU_DLP_REPORTS_APP_RANK) != NULL)
- create_privacy_dlp_reports_app_rank_view(ad);
-
- else if (strstr(selected_id->menu, PRIVACY_MENU_DLP_REPORTS_STATISTICS) != NULL)
- create_privacy_dlp_reports_data_stat_view(ad);
-
- else if (strstr(selected_id->menu, PRIVACY_MENU_DLP_REPORTS_RULES_AND_PATTERNS) != NULL)
- create_privacy_dlp_reports_rules_and_patterns_view(ad, &config);
-}
-
-/**
- * @brief Internal callback function when log cleanup period change to 1 week.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _change_period_week_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
-{
- config.keep_log_days = KEEP_LOG_1_WEEK;
- update_config_value(data, keepdays_item);
-}
-
-/**
- * @brief Internal callback function when log cleanup period change to 1 day.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _change_period_day_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
-{
- config.keep_log_days = KEEP_LOG_1_DAY;
- update_config_value(data, keepdays_item);
-}
-
-/**
- * @brief Internal callback function when log cleanup period change to monthly.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _change_period_month_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
-{
- config.keep_log_days = KEEP_LOG_1_MONTH;
- update_config_value(data, keepdays_item);
-}
-
-/**
- * @brief Internal callback function to dismiss period ctxpopup.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _dismissed_period_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Evas_Object *ctxpopup = data;
-
- evas_object_smart_callback_del(ctxpopup, "dismissed", _dismissed_period_ctxpopup_cb);
- evas_object_del(ctxpopup);
-}
-
-/**
- * @brief Internal callback function invoked when a logs keep day config option in menu is clicked.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _selected_keepdays_cb(void *data, Evas_Object *obj, void *event_info)
-{
- struct app_data_s *ad = data;
-
- /* Get selected privacy */
- Elm_Object_Item *ei = event_info;
-
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- Evas_Object *genlist = NULL;
- genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-
- elm_object_style_set(genlist, "effect");
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "default";
- itc->func.text_get = _gl_keepdays_item_text_get_cb;
- itc->func.content_get = _gl_keepdays_item_content_get_cb;
- itc->func.del = NULL;
-
-
- static keep_days_radio_s keep_days_radio_item_1_day = { .id = KEEP_LOG_1_DAY, .radio = NULL };
- elm_genlist_item_append(genlist, itc, &keep_days_radio_item_1_day, NULL, ELM_GENLIST_ITEM_NONE, _change_period_day_ctxpopup_cb, ad);
-
- static keep_days_radio_s keep_days_radio_item_1_week = { .id = KEEP_LOG_1_WEEK, .radio = NULL };
- elm_genlist_item_append(genlist, itc, &keep_days_radio_item_1_week, NULL, ELM_GENLIST_ITEM_NONE, _change_period_week_ctxpopup_cb, ad);
-
- static keep_days_radio_s keep_days_radio_item_1_month = { .id = KEEP_LOG_1_MONTH, .radio = NULL };
- elm_genlist_item_append(genlist, itc, &keep_days_radio_item_1_month, NULL, ELM_GENLIST_ITEM_NONE, _change_period_month_ctxpopup_cb, ad);
-
- elm_genlist_item_class_free(itc);
-
- evas_object_smart_callback_add(genlist, "realized", _gl_keepdays_item_realized_cb, NULL);
-
- evas_object_show(genlist);
-
- /* 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_SETTINGS_LOGS_PERIOD), common_back_btn_add(ad), NULL, genlist, NULL);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
-
-/*
- * @brief Function will be operated when genlist is deleted.
- * @param[in] data The data to be passed to the callback function
- * @param[in] obj The Evas object handle to be passed to the callback function
- */
-static void _gl_del_item_cb(void *data, Evas_Object *obj)
-{
- g_slice_free(item_data_s, data);
-}
-
-/*
- * @brief Function will be operated when genlist is deleted.
- * @param[in] data The data to be passed to the callback function
- * @param[in] obj The Evas object handle to be passed to the callback function
- */
-static void _gl_del_config_cb(void *data, Evas_Object *obj)
-{
-}
-
-/**
- * @brief Creates essential objects for the screen.
- */
-void create_privacy_dlp_menu_view(struct app_data_s *ad)
-{
- Evas_Object *genlist = common_genlist_add(ad->nf);
-
- uid_t user_id = getuid();
-
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-
- // get DLP configuration
- int res = privacy_guard_client_get_dlp_profile(user_id, &config);
- log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_get_dlp_profile() is failed. [%d]", res);
-
- // Option to Enable/Disable DLP
- Elm_Genlist_Item_Class *itc_enabled = elm_genlist_item_class_new();
-
- itc_enabled->item_style = "multiline";
- itc_enabled->func.text_get = _gl_enabled_text_get_cb;
- itc_enabled->func.content_get = _gl_enabled_content_get_cb;
- itc_enabled->func.del = _gl_del_config_cb;
-
- elm_genlist_item_append(genlist, itc_enabled, NULL, NULL, ELM_GENLIST_ITEM_NONE, _gl_enabled_item_select_cb, NULL);
- elm_genlist_item_class_free(itc_enabled);
-
- // Option to Select Protection Mode
- Elm_Genlist_Item_Class *itc_profile = elm_genlist_item_class_new();
-
- itc_profile->item_style = "multiline";
- itc_profile->func.text_get = _gl_profile_text_get_cb;
-
- profile_item = elm_genlist_item_append(genlist, itc_profile, NULL, NULL, ELM_GENLIST_ITEM_NONE, _selected_profile_cb, ad);
- elm_genlist_item_class_free(itc_profile);
-
- // Options of DLP Reports
- if (menu_reports_list != NULL) {
- g_list_free(menu_reports_list);
- menu_reports_list = NULL;
- }
-
- 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";
- gtc_reports->func.text_get = _gl_group_reports_text_get_cb;
-
- Elm_Object_Item *it_reports = elm_genlist_item_append(genlist, gtc_reports, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
- log_if(it_reports == NULL, 1, "Error in elm_genlist_item_append");
-
- Elm_Genlist_Item_Class *itc_reports = elm_genlist_item_class_new();
- itc_reports->item_style = "default";
- itc_reports->func.text_get = _gl_reports_text_get_cb;
- itc_reports->func.del = _gl_del_item_cb;
-
- elm_genlist_item_select_mode_set(it_reports, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-
- int i = 0;
- for (i = 0; i < (int)g_list_length(menu_reports_list); ++i) {
- 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);
- elm_genlist_item_class_free(gtc_reports);
-
- // Settings Group Options
- Elm_Genlist_Item_Class *gtc_settings = elm_genlist_item_class_new();
- gtc_settings->item_style = "group_index";
- gtc_settings->func.text_get = _gl_group_settings_text_get_cb;
-
- elm_genlist_item_append(genlist, gtc_settings, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
- elm_genlist_item_class_free(gtc_settings);
-
- // Option to select Logs Keep days
- Elm_Genlist_Item_Class *itc_keepdays = elm_genlist_item_class_new();
-
- itc_keepdays->item_style = "multiline";
- itc_keepdays->func.text_get = _gl_keepdays_text_get_cb;
-
- keepdays_item = elm_genlist_item_append(genlist, itc_keepdays, NULL, NULL, ELM_GENLIST_ITEM_NONE, _selected_keepdays_cb, ad);
- elm_genlist_item_class_free(itc_keepdays);
-
- // Show
- evas_object_show(genlist);
-
- main_menu_nf_it = elm_naviframe_item_push(ad->nf, dgettext("privacy-setting", PRIVACY_MENU_DLP), common_back_btn_add(ad), NULL, genlist, NULL);
-
- elm_object_item_domain_text_translatable_set(main_menu_nf_it, PACKAGE, EINA_TRUE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_pattern_create_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_edit_field.h"
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-
-typedef struct {
- struct app_data_s *ad;
- GList *category_list;
- const char *current_category;
- PgDlpPatternType current_type;
- void *rule_edit_view_data;
- void *pattern_list_view_data;
- Evas_Object *name_edit_field;
- Evas_Object *description_edit_field;
- Evas_Object *category_hoversel;
- Evas_Object *type_hoversel;
- Evas_Object *search_string_edit_field;
- Evas_Object *done_button;
-} pattern_create_view_data_s;
-
-static pattern_create_view_data_s pattern_create_view_data = {
- .ad = NULL,
- .category_list = NULL,
- .current_category = NULL,
- .pattern_list_view_data = NULL,
- .name_edit_field = NULL,
- .description_edit_field = NULL,
- .category_hoversel = NULL,
- .done_button = NULL
-};
-
-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_prepend(pcvd->category_list, strdup(category));
- return true;
-}
-
-static void _pattern_create_view_free_category_cb(void *category)
-{
- free(category);
-}
-
-static void _pattern_create_field_changed_cb(void *data, Evas_Object *obj, void* event_info)
-{
- pattern_create_view_data_s *pcvd = data;
- if (is_valid_pattern(
- get_text_from_edit_field(pcvd->name_edit_field),
- get_text_from_edit_field(pcvd->description_edit_field),
- pcvd->current_type,
- get_text_from_edit_field(pcvd->search_string_edit_field)))
- elm_object_disabled_set(pcvd->done_button, EINA_FALSE);
- else
- elm_object_disabled_set(pcvd->done_button, EINA_TRUE);
-}
-
-static void _pattern_create_cancel_cb(void *data, Evas_Object *obj, void* event_info)
-{
- pattern_create_view_data_s *pcvd = data;
- elm_naviframe_item_pop(pcvd->ad->nf);
-}
-
-static void _pattern_create_done_cb(void *data, Evas_Object *obj, void* event_info)
-{
- pattern_create_view_data_s *pcvd = data;
-
- char name[LEN_NAME];
- strncpy(name, get_text_from_edit_field(pcvd->name_edit_field), LEN_NAME);
- left_trim(name, LEN_NAME);
- name[LEN_NAME - 1] = '\0';
-
- char description[LEN_DESCRIPTION];
- strncpy(description, get_text_from_edit_field(pcvd->description_edit_field), LEN_DESCRIPTION);
- left_trim(description, LEN_DESCRIPTION);
- description[LEN_DESCRIPTION - 1] = '\0';
-
- const int res = privacy_guard_client_add_dlp_pattern(
- name,
- description,
- elm_object_text_get(pcvd->category_hoversel),
- get_text_from_edit_field(pcvd->search_string_edit_field),
- pcvd->current_type);
-
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- LOGI("Pattern created (name=%s)", get_text_from_edit_field(pcvd->name_edit_field));
- if (pcvd->pattern_list_view_data)
- update_privacy_dlp_patterns_list_view(pcvd->pattern_list_view_data);
- else if (pcvd->rule_edit_view_data)
- update_privacy_dlp_rule_edit_view(
- pcvd->rule_edit_view_data,
- get_text_from_edit_field(pcvd->search_string_edit_field),
- pcvd->current_type,
- false);
- } else {
- LOGI("privacy_guard_client_add_dlp_pattern() failed. Error=%d", res);
- }
-
- elm_naviframe_item_pop(pcvd->ad->nf);
-}
-
-static Eina_Bool _pattern_create_nf_pop_cb(void *data, Evas_Object* obj)
-{
- pattern_create_view_data_s *pcvd = data;
-
- g_list_free_full(pcvd->category_list, _pattern_create_view_free_category_cb);
- pcvd->category_list = NULL;
- free_edit_field(pcvd->name_edit_field);
- free_edit_field(pcvd->description_edit_field);
- free_edit_field(pcvd->search_string_edit_field);
-
- return EINA_TRUE;
-}
-
-static void _pattern_create_category_item_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *category = data;
- pattern_create_view_data.current_category = category;
- elm_object_text_set(obj, category);
-}
-
-static void _pattern_create_type_item_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const PgDlpPatternType type = (PgDlpPatternType)data;
- pattern_create_view_data.current_type = type;
- if (type == PRIV_GUARD_DLP_PATTERN_STRING)
- elm_object_text_set(obj, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_STRING_MATCH));
- else
- elm_object_text_set(obj, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_REGULAR_EXPRESSION));
-}
-
-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);
- elm_hoversel_hover_parent_set(hoversel, rule_grid);
-
- GList* l;
- /* Append patterns to hoversel */
- for (l = data->category_list; l != NULL; l = l->next) {
- 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);
- data->current_category = first_category;
- elm_object_text_set(hoversel, first_category);
- }
-
- elm_grid_pack(rule_grid, hoversel, col, row, col_span, row_span);
- evas_object_show(hoversel);
-
- return hoversel;
-}
-
-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);
- elm_hoversel_hover_parent_set(hoversel, rule_grid);
-
- elm_hoversel_item_add(hoversel, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_STRING_MATCH), NULL, ELM_ICON_NONE, _pattern_create_type_item_cb, (void *)PRIV_GUARD_DLP_PATTERN_STRING);
- elm_hoversel_item_add(hoversel, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_REGULAR_EXPRESSION), NULL, ELM_ICON_NONE, _pattern_create_type_item_cb, (void *)PRIV_GUARD_DLP_PATTERN_REGEX);
- elm_object_text_set(hoversel, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_STRING_MATCH));
- data->current_type = PRIV_GUARD_DLP_PATTERN_STRING;
-
- elm_grid_pack(rule_grid, hoversel, col, row, col_span, row_span);
- evas_object_show(hoversel);
-
- return hoversel;
-}
-
-void create_privacy_dlp_pattern_create_view(struct app_data_s *ad, void *rule_edit_view_data, void *pattern_list_view_data)
-{
- if (NULL == ad) {
- LOGE("Invalid parameter");
- return;
- }
-
- pattern_create_view_data.ad = ad;
- g_list_free_full(pattern_create_view_data.category_list, _pattern_create_view_free_category_cb);
- pattern_create_view_data.category_list = NULL;
- pattern_create_view_data.rule_edit_view_data = rule_edit_view_data;
- pattern_create_view_data.pattern_list_view_data = pattern_list_view_data;
-
- /* 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);
-
- Evas_Object *rule_grid = elm_grid_add(ad->nf);
- elm_grid_size_set(rule_grid, 100, 10);
-
- elm_object_content_set(bg, rule_grid);
-
- const int col1 = 5;
- const int col2 = 35;
- const int col_span1 = 34;
- const int col_span2 = 65;
- int row = 0;
- const int row_span = 1;
-
- static dlp_edit_field_changed_cb_s edit_field_changed_cb_data;
- edit_field_changed_cb_data.changed_cb = _pattern_create_field_changed_cb;
- edit_field_changed_cb_data.data = &pattern_create_view_data;
-
- /* add pattern name fields to grid */
- static const Elm_Entry_Filter_Limit_Size name_limit_size = { .max_char_count = 0, .max_byte_count = LEN_NAME - 1 };
- add_edit_field_to_grid(rule_grid, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_NAME), false, NULL, col1, row, col_span1, row_span, NULL);
- pattern_create_view_data.name_edit_field = add_edit_field_to_grid(rule_grid, "", true, &name_limit_size, col2, row++, col_span2, row_span, &edit_field_changed_cb_data);
-
- /* add rule description fields to grid */
- static const Elm_Entry_Filter_Limit_Size description_limit_size = { .max_char_count = 0, .max_byte_count = LEN_DESCRIPTION - 1 };
- add_edit_field_to_grid(rule_grid, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DESCRIPTION), false, NULL, col1, row, col_span1, row_span, NULL);
- pattern_create_view_data.description_edit_field = add_edit_field_to_grid(rule_grid, "", true, &description_limit_size, col2, row++, col_span2, row_span, &edit_field_changed_cb_data);
-
- /* add rule pattern fields to grid */
- add_edit_field_to_grid(rule_grid, dgettext("privacy-setting", PRIVACY_MENU_DLP_CATEGORY), false, NULL, col1, row, col_span1, row_span, NULL);
- pattern_create_view_data.category_hoversel = add_category_hoversel_to_grid(rule_grid, &pattern_create_view_data, col2 + 4, row++, col_span2 - 8, row_span);
-
- /* add search fields to grid */
- add_edit_field_to_grid(rule_grid, dgettext("privacy-setting", PRIVACY_MENU_DLP_STRING_TYPE), false, NULL, col1, row, col_span1, row_span, NULL);
- pattern_create_view_data.type_hoversel = add_type_hoversel_to_grid(rule_grid, &pattern_create_view_data, col2 + 4, row++, col_span2 - 8, row_span);
-
- /* add string search fields to grid */
- static const Elm_Entry_Filter_Limit_Size search_string_limit_size = { .max_char_count = 0, .max_byte_count = LEN_PATTERN - 1 };
- add_edit_field_to_grid(rule_grid, dgettext("privacy-setting", PRIVACY_MENU_DLP_SEARCH_TERM), false, NULL, col1, row, col_span1, row_span, NULL);
- pattern_create_view_data.search_string_edit_field = add_edit_field_to_grid(rule_grid, "", true, &search_string_limit_size, col2, row, col_span2, row_span, &edit_field_changed_cb_data);
-
- evas_object_show(rule_grid);
-
- Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->nf, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_PATTERN), NULL, NULL, bg, NULL);
-
- /* set callback to genlist item pop event */
- elm_naviframe_item_pop_cb_set(nf_it, _pattern_create_nf_pop_cb, &pattern_create_view_data);
- /* add a cancel button to naviframe title bar */
- common_naviframe_btn_add(ad->nf, nf_it, true, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL), _pattern_create_cancel_cb, &pattern_create_view_data);
- /* add a done button to naviframe title bar */
- pattern_create_view_data.done_button = common_naviframe_btn_add(ad->nf, nf_it, false, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DONE), _pattern_create_done_cb, &pattern_create_view_data);
-
- elm_object_disabled_set(pattern_create_view_data.done_button, EINA_TRUE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_pattern_delete_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_popup.h"
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-#include <app_manager.h>
-
-typedef struct {
- const get_pattern_s *pattern;
- bool is_checked;
- Evas_Object *check;
-} pattern_delete_item_s;
-
-typedef struct {
- struct app_data_s *ad;
- GList *pattern_item_list;
- void *pattern_list_data;
- Evas_Object *genlist;
- Evas_Object *confirm_popup;
- Evas_Object *delete_button;
-} pattern_delete_view_data_s;
-
-#define SELECT_ALL_PATTERNS_ITEM -1
-
-static get_pattern_s pattern_delete_select_all_pattern = { .id = SELECT_ALL_PATTERNS_ITEM };
-
-static size_t get_number_of_selected_patterns(Evas_Object *genlist);
-
-void set_pattern_item_check_state(Elm_Object_Item *item, const bool state)
-{
- if (NULL != item) {
- pattern_delete_item_s *pattern_item = elm_object_item_data_get(item);
- if (!pattern_item->pattern->undeletable) {
- pattern_item->is_checked = state;
- elm_check_state_set(pattern_item->check, state ? EINA_TRUE : EINA_FALSE);
- }
- }
-}
-
-static char * _gl_pattern_delete_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- pattern_delete_item_s *pattern_item = (pattern_delete_item_s *)data;
- if (strcmp(part, "elm.text") == 0)
- return strdup(pattern_item->pattern->name);
-
- return NULL;
-}
-
-static Evas_Object *_gl_pattern_delete_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- pattern_delete_item_s *pattern_item = data;
-
- if (strcmp(part, "elm.swallow.end") == 0) {
- Evas_Object *check = common_create_check(obj);
- elm_check_state_set(check, pattern_item->is_checked ? EINA_TRUE : EINA_FALSE);
- if (pattern_item->pattern->undeletable)
- elm_object_disabled_set(check, EINA_TRUE);
- pattern_item->check = check;
- return check;
- }
-
- return NULL;
-}
-
-static void _pattern_delete_menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- pattern_delete_item_s *pattern_item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- if (pattern_item->pattern->undeletable)
- return;
-
- pattern_item->is_checked = !pattern_item->is_checked;
-
- /* Set check box state, in case user tapped outside it */
- elm_check_state_set(pattern_item->check, pattern_item->is_checked ? EINA_TRUE : EINA_FALSE);
-
- pattern_delete_view_data_s *pdvd = data;
- if (SELECT_ALL_PATTERNS_ITEM != pattern_item->pattern->id) {
- Elm_Object_Item *select_all_item = elm_genlist_nth_item_get(pdvd->genlist, 0);
- if (!pattern_item->is_checked) {
- /* set "Select all" check off */
- set_pattern_item_check_state(select_all_item, false);
- } else {
- bool all_selected = true;
- GList *l;
- // check if all items are selected. Note that the 1st element of app_list
- // is the select button, so we start looping from the 2nd element
- for (l = g_list_nth(pdvd->pattern_item_list, 1); l != NULL; l = l->next) {
- if (!((pattern_delete_item_s *)l->data)->is_checked) {
- all_selected = false;
- break;
- }
- }
- /* if all items are selected, set select all check on */
- if (all_selected)
- set_pattern_item_check_state(select_all_item, true);
- }
- } else {
- /* Select or deselect items */
- ei = elm_genlist_item_next_get(ei);
- while (NULL != ei) {
- set_pattern_item_check_state(ei, pattern_item->is_checked);
- ei = elm_genlist_item_next_get(ei);
- }
- }
-
- elm_object_disabled_set(pdvd->delete_button, get_number_of_selected_patterns(pdvd->genlist) == 0 ? EINA_TRUE : EINA_FALSE);
-}
-
-static void _pattern_delete_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- pattern_delete_view_data_s *pdvd = data;
- destroy_popup(pdvd->confirm_popup);
-}
-
-static void _pattern_delete_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const pattern_delete_view_data_s *pdvd = data;
- destroy_popup(pdvd->confirm_popup);
-
- size_t total_patterns_deleted = 0;
- GList *l; // note that the 0th element is "select all"
- for (l = g_list_nth(pdvd->pattern_item_list, 1); l != NULL; l = l->next) {
- const pattern_delete_item_s *pattern_item = l->data;
- if (NULL == pattern_item)
- continue;
- if (!pattern_item->is_checked)
- continue;
-
- const int res = privacy_guard_client_delete_dlp_pattern(pattern_item->pattern->id);
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- LOGI("Pattern %d deleted", pattern_item->pattern->id);
- ++total_patterns_deleted;
- } else
- LOGE("Failed to delete pattern (id=%d). Error=%d", pattern_item->pattern->id, res);
- }
-
- if (NULL != pdvd->pattern_list_data)
- update_privacy_dlp_patterns_list_view(pdvd->pattern_list_data);
-
- 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);
- g_string_printf(string_buf, format, total_patterns_deleted);
- show_toast_notification(string_buf->str, pdvd->ad->win);
- g_string_free(string_buf, TRUE);
- }
-}
-
-static void _pattern_delete_done_cb(void *data, Evas_Object *obj, void *event_info)
-{
- 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);
- 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)
-{
- pattern_delete_view_data_s *pdvd = data;
- elm_naviframe_item_pop(pdvd->ad->nf);
-}
-
-static void _free_pattern_delete_item_cb(void *item)
-{
- g_slice_free(pattern_delete_item_s, item);
-}
-
-static Eina_Bool _pattern_delete_nf_pop_cb(void *data, Evas_Object* obj)
-{
- pattern_delete_view_data_s *pdvd = data;
- g_list_free_full(pdvd->pattern_item_list, _free_pattern_delete_item_cb);
- pdvd->pattern_item_list = NULL;
- return EINA_TRUE;
-}
-
-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;
- size_t i;
- // Count checked log ids
- for (i = 1; i <= total_rules; ++i) { // note that 0th item is "Select all", so we skip it
- Elm_Object_Item *item = elm_genlist_nth_item_get(genlist, i);
- if (NULL != item) {
- pattern_delete_item_s *pattern_item = elm_object_item_data_get(item);
- if (NULL != pattern_item && pattern_item->is_checked)
- ++pattern_count;
- }
- }
-
- return pattern_count;
-}
-
-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 = 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);
-}
-
-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) {
- const get_pattern_s *pattern = l->data;
- if (pattern->undeletable)
- continue;
-
- // note that item is freed together with pattern_item_list in _pattern_delete_nf_pop_cb
- 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)
-{
- if (NULL == ad || NULL == pattern_list || NULL == pattern_list_data) {
- LOGE("Invalid parameter");
- return;
- }
-
- static pattern_delete_view_data_s data;
- data.ad = ad;
- populate_pattern_item_list(&data, pattern_list);
- data.pattern_list_data = pattern_list_data;
-
- create_select_all_patterns_item(&data);
-
- data.genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(data.genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(data.genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- itc->item_style = "default";
- itc->func.text_get = _gl_pattern_delete_text_get_cb;
- itc->func.content_get = _gl_pattern_delete_content_get_cb;
- itc->func.del = 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");
-
- pattern_delete_item_s *pattern_item = l->data;
- if (pattern_item->pattern->undeletable)
- elm_object_disabled_set(it, EINA_TRUE);
- }
-
- elm_genlist_item_class_free(itc);
-
- evas_object_show(data.genlist);
-
- /* Add genlist to naviframe */
- Elm_Object_Item *nf_it = elm_naviframe_item_push(
- ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_LOGS_TITLE),
- NULL,
- NULL,
- data.genlist,
- NULL);
-
- /* set callback to genlist item pop event */
- elm_naviframe_item_pop_cb_set(nf_it, _pattern_delete_nf_pop_cb, &data);
- /* add cancel button to naviframe title bar */
- common_naviframe_btn_add(ad->nf, nf_it, true, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL), _pattern_delete_cancel_cb, &data);
- /* add delete button to naviframe title bar */
- data.delete_button = common_naviframe_btn_add(ad->nf, nf_it, false, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN), _pattern_delete_done_cb, &data);
- elm_object_disabled_set(data.delete_button, get_number_of_selected_patterns(data.genlist) == 0 ? EINA_TRUE : EINA_FALSE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_pattern_detailed_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_ctxpopup.h"
-#include "common_popup.h"
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <efl_extension.h>
-
-typedef struct {
- struct app_data_s *ad;
- get_pattern_s current_pattern;
- void *pattern_list_data;
- Evas_Object *ctxpopup;
- Evas_Object *genlist;
- Evas_Object *delete_popup;
-} pattern_detailed_view_data_s;
-
-static pattern_detailed_view_data_s pattern_detailed_view_data = { .ad = NULL };
-
-static void _pattern_detailed_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info);
-static void _pattern_detailed_view_menu_button_cb(void *data, Evas_Object *obj, void *event_info);
-static void _pattern_detailed_view_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
-
-static char *_gl_pattern_header_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- get_pattern_s *pattern = data;
- if (strcmp(part, "elm.text") == 0)
- return strdup(pattern->name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (pattern == NULL)
- return strdup("");
-
- return strdup(pattern->description);
- }
-
- return NULL;
-}
-
-static char *_gl_group_pattern_details_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (!strcmp(part, "elm.text"))
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_DETAILS));
-
- return NULL;
-}
-
-static char *_gl_pattern_category_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.text") == 0)
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CATEGORY));
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (data == NULL)
- return strdup("");
- return strdup(((get_pattern_s *)data)->category.text);
- }
-
- return NULL;
-}
-
-static char *_gl_pattern_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.text") == 0)
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_SEARCH_TERM));
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (data == NULL)
- return strdup("");
-
- return strdup(((get_pattern_s *)data)->pattern);
- }
- return NULL;
-}
-
-static char *_gl_pattern_type_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.text") == 0)
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_STRING_TYPE));
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (data == NULL)
- return strdup("");
-
- const get_pattern_s *pattern = data;
- if (PRIV_GUARD_DLP_PATTERN_STRING == pattern->type)
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_STRING_MATCH));
- else if (PRIV_GUARD_DLP_PATTERN_REGEX == pattern->type)
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_SEARCH_TYPE_REGULAR_EXPRESSION));
- else
- return strdup("");
- }
-
- return NULL;
-}
-
-static char *_gl_pattern_leaks_count_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.text") == 0)
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_LEAKS_CAPTURED));
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (data == NULL)
- return strdup("");
-
- const get_pattern_s *pattern = data;
- 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;
-}
-
-static void _pattern_detailed_view_delete_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- pattern_detailed_view_data_s *pdvd = data;
- elm_popup_dismiss(pdvd->delete_popup);
-}
-
-static void _pattern_detailed_view_delete_ok_cb(void *data, Evas_Object *obj, void *event_info)
-{
- pattern_detailed_view_data_s *pdvd = data;
-
- elm_popup_dismiss(pdvd->delete_popup);
-
- const int res = privacy_guard_client_delete_dlp_pattern(pdvd->current_pattern.id);
- 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);
- 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);
- }
-
- if (pdvd->pattern_list_data)
- update_privacy_dlp_patterns_list_view(pdvd->pattern_list_data);
- elm_naviframe_item_pop(pdvd->ad->nf);
-}
-
-static void _pattern_detailed_view_popup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- pattern_detailed_view_data_s *pdvd = data;
- destroy_popup(pdvd->delete_popup);
- pdvd->delete_popup = NULL;
- eext_object_event_callback_add(pdvd->genlist, EEXT_CALLBACK_MORE, _pattern_detailed_view_menu_button_cb, pdvd);
-}
-
-static void _pattern_detailed_view_delete_rule_cb(void *data, Evas_Object *obj, void *event_info)
-{
- pattern_detailed_view_data_s *pdvd = data;
- elm_ctxpopup_dismiss(pdvd->ctxpopup);
-
- const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_PATTERN_POPUP_MESSAGE_MESSAGE);
- 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)
-{
- pattern_detailed_view_data_s *pdvd = data;
- if (!pdvd->current_pattern.undeletable) {
- 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);
-
- 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;
-
- eext_object_event_callback_del(pdvd->genlist, EEXT_CALLBACK_MORE, _pattern_detailed_view_dismiss_menu_cb);
- if (NULL == pdvd->delete_popup)
- eext_object_event_callback_add(pdvd->genlist, EEXT_CALLBACK_MORE, _pattern_detailed_view_menu_button_cb, pdvd);
-}
-
-static void _pattern_detailed_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info)
-{
- pattern_detailed_view_data_s *pdvd = data;
- elm_ctxpopup_dismiss(pdvd->ctxpopup);
-}
-
-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;
- itc->func.text_get = func_text_get;
- Elm_Object_Item *it = elm_genlist_item_append(genlist, itc, data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
- elm_genlist_item_class_free(itc);
-}
-
-static void set_current_pattern(get_pattern_s *current_pattern, const get_pattern_s *pattern)
-{
- current_pattern->id = pattern->id;
- strncpy(current_pattern->pattern, pattern->pattern, LEN_PATTERN);
- current_pattern->pattern[LEN_PATTERN - 1] = '\0';
- strncpy(current_pattern->name, pattern->name, LEN_NAME);
- current_pattern->name[LEN_NAME - 1] = '\0';
- strncpy(current_pattern->description, pattern->description, LEN_DESCRIPTION);
- current_pattern->name[LEN_DESCRIPTION - 1] = '\0';
- current_pattern->type = pattern->type;
- strncpy(current_pattern->category.text, pattern->category.text, LEN_CATEGORY);
- current_pattern->name[LEN_CATEGORY - 1] = '\0';
- current_pattern->undeletable = pattern->undeletable;
- current_pattern->leaks_count = pattern->leaks_count;
-}
-
-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);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
- elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_NONE);
- elm_object_style_set(genlist, "default");
- /* add header (pattern name and description) to genlist */
- add_pattern_item_to_genlist(genlist, &(data->current_pattern), "multiline", _gl_pattern_header_text_get_cb);
- /* add details separator to genlist */
- add_pattern_item_to_genlist(genlist, NULL, "group_index", _gl_group_pattern_details_text_get_cb);
- /* add pattern category to genlist */
- add_pattern_item_to_genlist(genlist, &(data->current_pattern), "multiline", _gl_pattern_category_text_get_cb);
- /* add pattern type to genlist */
- add_pattern_item_to_genlist(genlist, &(data->current_pattern), "multiline", _gl_pattern_type_get_cb);
- /* add pattern pattern to genlist */
- add_pattern_item_to_genlist(genlist, &(data->current_pattern), "multiline", _gl_pattern_text_get_cb);
- /* add pattern leaks count to genlist */
- add_pattern_item_to_genlist(genlist, &(data->current_pattern), "multiline", _gl_pattern_leaks_count_text_get_cb);
- return genlist;
-}
-
-void create_privacy_dlp_pattern_detailed_view(struct app_data_s *ad, const get_pattern_s *pattern, const dlp_profile_s *config, void *pattern_list_data)
-{
- if (NULL == ad || NULL == pattern) {
- LOGE("Invalid parameter");
- return;
- }
-
- pattern_detailed_view_data.ad = ad;
- pattern_detailed_view_data.pattern_list_data = pattern_list_data;
-
- set_current_pattern(&(pattern_detailed_view_data.current_pattern), pattern);
-
- Evas_Object *genlist = create_pattern_detail_genlist(&pattern_detailed_view_data);
- evas_object_show(genlist);
- pattern_detailed_view_data.genlist = genlist;
-
- Elm_Object_Item *nf_it = elm_naviframe_item_push(
- ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_PATTERN_DETAIL_TITLE),
- common_back_btn_add(ad),
- NULL,
- genlist,
- NULL);
-
- if (PRIV_GUARD_DLP_PROFILE_CUSTOM == config->profile)
- /* Register the Menu key event callback */
- eext_object_event_callback_add(genlist, EEXT_CALLBACK_MORE, _pattern_detailed_view_menu_button_cb, &pattern_detailed_view_data);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_pattern_list_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_ctxpopup.h"
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-#include <efl_extension.h>
-
-typedef struct {
- struct app_data_s *ad;
- GList *pattern_list;
- GList *category_list;
- const char *current_category;
- const dlp_profile_s *config;
- Evas_Object *view_parent;
- Evas_Object *pattern_box;
- Evas_Object *pattern_genlist;
- Evas_Object *pattern_ctxpopup;
-} dlp_pattern_list_data_s;
-
-static const char const *ALL_PATTERNS = "All patterns";
-
-static dlp_pattern_list_data_s pattern_list_data = {
- .ad = NULL,
- .pattern_list = NULL,
- .current_category = NULL,
- .view_parent = NULL,
- .pattern_box = NULL,
- .pattern_genlist = NULL
-};
-
-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);
-
-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_prepend(data->category_list, strdup(category));
- return true;
-}
-
-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 = 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)
-{
- g_slice_free(dlp_item_pattern_s, data);
-}
-
-static void _pattern_filter_cb(void *data, Evas_Object *obj, void *event_info)
-{
- dlp_pattern_list_data_s *dpld = data;
- dpld->current_category = elm_object_item_part_text_get(event_info, "default");
- set_pattern_filter_text(obj, dpld);
- elm_box_unpack(dpld->pattern_box, dpld->pattern_genlist);
- evas_object_del(dpld->pattern_genlist);
- create_pattern_genlist(dpld);
-}
-
-static char *_pattern_genlist_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- dlp_item_pattern_s *pattern = (dlp_item_pattern_s *)data;
-
- if (strcmp(part, "elm.text") == 0)
- return strdup(pattern->data->name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (pattern == NULL)
- return "";
-
- return strdup(pattern->data->description);
- }
-
- return NULL;
-}
-
-static void _pattern_genlist_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- dlp_item_pattern_s *item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- dlp_pattern_list_data_s *dpld = (dlp_pattern_list_data_s *)data;
- create_privacy_dlp_pattern_detailed_view(dpld->ad, item->data, dpld->config, dpld);
-}
-
-static void _pattern_list_view_create_rule_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_create_view(dpld->ad, NULL, dpld);
-}
-
-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);
-}
-
-static void _pattern_list_view_menu_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
- dlp_pattern_list_data_s *dpld = data;
-
- 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);
-
- 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;
-
- 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);
-}
-
-static void _pattern_list_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info)
-{
- dlp_pattern_list_data_s *dpld = data;
- elm_ctxpopup_dismiss(dpld->pattern_ctxpopup);
-}
-
-void delete_category_list()
-{
- if (NULL == pattern_list_data.category_list)
- return;
-
- /* Delete all the categories */
- GList *l;
- for (l = pattern_list_data.category_list; l != NULL; l = l->next) {
- char *category = l->data;
- free(category);
- }
- /* Delete category list */
- g_list_free(pattern_list_data.category_list);
- pattern_list_data.category_list = NULL;
-}
-
-void delete_pattern_list()
-{
- if (NULL == pattern_list_data.pattern_list)
- return;
-
- g_list_free_full(pattern_list_data.pattern_list, free_dlp_pattern);
- pattern_list_data.pattern_list = NULL;
-}
-
-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];
- const size_t text_len = sizeof text;
- snprintf(text, text_len, format, data->current_category);
- text[text_len - 1] = '\0';
- elm_object_text_set(category_hoversel, text);
-}
-
-static void set_empty_pattern_genlist(Evas_Object *pattern_genlist)
-{
- elm_layout_theme_set(pattern_genlist, "layout", "nocontents", "default");
-}
-
-static int populate_pattern_genlist(dlp_pattern_list_data_s* data)
-{
- int pattern_count = 0;
-
- if (NULL != data->pattern_list) {
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- itc->item_style = "multiline";
- itc->func.text_get = _pattern_genlist_text_get_cb;
- itc->func.del = _pattern_genlist_del_cb;
-
- Elm_Object_Item *it = NULL;
- GList* l;
- /* 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 = g_slice_new0(dlp_item_pattern_s);
- if (NULL == item)
- continue;
-
- // pattern item data
- item->data = (get_pattern_s*)l->data;
-
- // append pattern to the genlist
- if (strcmp(data->current_category, ALL_PATTERNS) == 0
- || strcmp(data->current_category, item->data->category.text) == 0) {
- it = elm_genlist_item_append(data->pattern_genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _pattern_genlist_item_selected_cb, data);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
- ++pattern_count;
- } else {
- g_slice_free(dlp_item_pattern_s, item);
- }
- }
-
- elm_genlist_item_class_free(itc);
- }
-
- return pattern_count;
-}
-
-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);
- elm_hoversel_hover_parent_set(pattern_hoversel, data->pattern_box);
- // Populate hoversel
- elm_hoversel_item_add(pattern_hoversel, ALL_PATTERNS, NULL, ELM_ICON_NONE, _pattern_filter_cb, data);
- GList* l;
- 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);
- }
- set_pattern_filter_text(pattern_hoversel, data);
- evas_object_size_hint_weight_set(pattern_hoversel, EVAS_HINT_EXPAND, 0.0);
- evas_object_size_hint_align_set(pattern_hoversel, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(pattern_hoversel);
- elm_box_pack_end(data->pattern_box, pattern_hoversel);
-}
-
-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);
- evas_object_size_hint_align_set(data->pattern_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- if (populate_pattern_genlist(data) == 0)
- set_empty_pattern_genlist(data->pattern_genlist);
- evas_object_show(data->pattern_genlist);
- elm_box_pack_end(data->pattern_box, data->pattern_genlist);
-}
-
-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);
- evas_object_show(data->pattern_box);
-
- create_pattern_hoversel(data);
- create_pattern_genlist(data);
-
- elm_object_part_content_set(data->view_parent, "elm.swallow.content", data->pattern_box);
-
- if (PRIV_GUARD_DLP_PROFILE_CUSTOM == data->config->profile)
- /* Register the Menu key event callback */
- eext_object_event_callback_add(data->pattern_box, EEXT_CALLBACK_MORE, _pattern_list_view_menu_button_cb, data);
-}
-
-static bool has_deletable_pattern(const GList *pattern_list)
-{
- bool has_deletable = false;
- GList* l;
- for (l = pattern_list_data.pattern_list; l != NULL; l = l->next) {
- get_pattern_s* pattern = (get_pattern_s*)(l->data);
- if (!pattern->undeletable) {
- has_deletable = true;
- break;
- }
- }
- return has_deletable;
-}
-
-void update_privacy_dlp_patterns_list_view(void *pattern_list_data)
-{
- if (NULL == pattern_list_data) {
- LOGE("Invalid parameter");
- return;
- }
-
- dlp_pattern_list_data_s *dpld = pattern_list_data;
-
- delete_pattern_list();
-
- /* Get dlp leak logs from privacy guard */
- const int res = privacy_guard_client_foreach_dlp_patterns(_pg_dlp_patterns_cb, dpld);
- log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_dlp_custom_rules() is failed. [%d]", res);
-
- elm_box_unpack(dpld->pattern_box, dpld->pattern_genlist);
- evas_object_del(dpld->pattern_genlist);
- create_pattern_list_components(dpld);
-}
-
-void create_privacy_dlp_patterns_list_view(struct app_data_s *ad, Evas_Object *parent, const dlp_profile_s *config)
-{
- delete_category_list();
- delete_pattern_list();
-
- pattern_list_data.ad = ad;
- pattern_list_data.view_parent = parent;
- pattern_list_data.current_category = ALL_PATTERNS;
- pattern_list_data.config = config;
-
- 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);
-}
+++ /dev/null
-/**
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_reports_app_rank_view.c
- * @version 1.0
- * @brief
- */
-
-#include <efl_extension.h>
-#include <glib.h>
-#include <time.h>
-#include <tzplatform_config.h>
-#include <privacy_guard_client.h>
-#include "common_utils.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-#include "privilege_info.h"
-
-#define REPORT_TOTAL_LEAKS_LEN 100
-
-static GList* dlp_leak_log_list = NULL;
-static Evas_Object *genlist = NULL;
-
-void update_privacy_dlp_reports_app_rank_view(struct app_data_s *ad);
-
-static dlp_statistics_cb_s stats_cb = {
- NULL,
- privacy_guard_client_foreach_leak_logs_by_app_name,
- update_privacy_dlp_reports_app_rank_view
-};
-
-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 = g_slice_new(leak_log_get_app_count_s);
-
- strncpy(data->application_name, app_name, LEN_APPLICATION_NAME);
- data->application_name[LEN_APPLICATION_NAME - 1] = '\0';
- data->first_time_stamp = first_time_stamp;
- data->last_time_stamp = last_time_stamp;
- strncpy(data->application_icon, app_icon, LEN_APPLICATION_ICON);
- data->application_icon[LEN_APPLICATION_ICON - 1] = '\0';
- data->leak_count = leak_count;
-
- dlp_leak_log_list = g_list_prepend(dlp_leak_log_list, data);
-
- return true;
-}
-
-static char* _gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- leak_log_get_app_count_s *item = (leak_log_get_app_count_s *)data;
-
- if (strcmp(part, "elm.text") == 0)
- return strdup(item->application_name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (item == NULL)
- return "";
- char string_buf[REPORT_TOTAL_LEAKS_LEN];
-
- int size = snprintf(string_buf, REPORT_TOTAL_LEAKS_LEN, "%s: %d<br>From: ",
- dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_TOTAL_LEAKS), item->leak_count);
-
- struct tm timestamp;
- gmtime_r(&item->first_time_stamp, ×tamp);
- size += strftime(string_buf + size, 100 - size, "%b %d, %Y - To: ", ×tamp);
-
- gmtime_r(&item->last_time_stamp, ×tamp);
- size += strftime(string_buf + size, 100 - size, "%b %d, %Y", ×tamp);
-
- char *multiline = strdup(string_buf);
-
- return multiline;
- }
-
- return NULL;
-}
-
-/**
- * @brief Internal callback function invoked when genlist item displayed.
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static Evas_Object *_gl_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- leak_log_get_app_count_s *item = (leak_log_get_app_count_s *)data;
-
- if (strcmp(part, "elm.swallow.icon") == 0) {
- Evas_Object *icon = elm_icon_add(obj);
- elm_image_file_set(icon, item->application_icon, NULL);
- evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(50), ELM_SCALE_SIZE(50));
- return icon;
- }
-
- return NULL;
-}
-
-static void _menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- leak_log_get_app_count_s *item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- struct app_data_s *ad = (struct app_data_s *)data;
-
- stats_cb.name = item->application_name;
- create_privacy_dlp_reports_full_view(&stats_cb, ad);
-}
-
-/*
- * @brief Function will be operated when genlist is deleted.
- * @param[in] data The data to be passed to the callback function
- * @param[in] obj The Evas object handle to be passed to the callback function
- */
-static void _gl_del_cb(void *data, Evas_Object *obj)
-{
- g_slice_free(leak_log_get_app_count_s, data);
-}
-
-/**
- * @brief Creates essential objects for the screen.
- */
-void create_privacy_dlp_reports_app_rank_view(struct app_data_s *ad)
-{
- uid_t user_id = getuid();
- if (dlp_leak_log_list) {
- g_list_free(dlp_leak_log_list);
- dlp_leak_log_list = NULL;
- }
-
- /* 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
-
- /* Create elm_layout and set its style as nocontents/text */
- genlist = elm_layout_add(ad->nf);
- elm_layout_theme_set(genlist, "layout", "nocontents", "default");
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- elm_object_part_text_set(genlist, "elm.text", dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_EMPTY));
-
- elm_layout_signal_emit(genlist, "align.center", "elm");
-
- } else {
- genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-
- elm_object_style_set(genlist, "effect");
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _gl_text_get_cb;
- itc->func.content_get = _gl_content_get_cb;
- itc->func.del = _gl_del_cb;
-
- GList *elem;
-
- /* Append privacy related package as genlist item */
- for (elem = dlp_leak_log_list; elem; elem = elem->next) {
- 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");
- }
-
- elm_genlist_item_class_free(itc);
- }
-
- evas_object_show(genlist);
-
- /* 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_APP_RANK), common_back_btn_add(ad), NULL, genlist, NULL);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
-
-void update_privacy_dlp_reports_app_rank_view(struct app_data_s *ad)
-{
- elm_genlist_clear(genlist);
-
- uid_t user_id = getuid();
- if (dlp_leak_log_list) {
- g_list_free(dlp_leak_log_list);
- dlp_leak_log_list = NULL;
- }
-
- /* 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
- elm_layout_theme_set(genlist, "layout", "nocontents", "default");
- elm_object_part_text_set(genlist, "elm.text", dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_EMPTY));
- elm_layout_signal_emit(genlist, "align.center", "elm");
-
- } else {
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _gl_text_get_cb;
- itc->func.content_get = _gl_content_get_cb;
- itc->func.del = _gl_del_cb;
-
- GList *elem;
-
- /* Append privacy related package as genlist item */
- for (elem = dlp_leak_log_list; elem; elem = elem->next) {
- 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");
- }
-
- elm_genlist_item_class_free(itc);
- }
-}
+++ /dev/null
-/**
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_reports_data_stat_view.c
- * @version 1.0
- * @brief
- */
-
-#include <efl_extension.h>
-#include <glib.h>
-#include <time.h>
-#include <tzplatform_config.h>
-#include <privacy_guard_client.h>
-#include "common_utils.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-#include "privilege_info.h"
-
-static GList* dlp_leak_log_list = NULL;
-static Evas_Object *genlist = NULL;
-
-void update_privacy_dlp_reports_data_stat_view(struct app_data_s *ad);
-
-static dlp_statistics_cb_s stats_cb = {
- NULL,
- privacy_guard_client_foreach_leak_logs_by_category,
- update_privacy_dlp_reports_data_stat_view
-};
-
-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 = g_slice_new(leak_log_get_category_count_s);
-
- 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);
-
- return true;
-}
-
-static char* _gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- leak_log_get_category_count_s *item = (leak_log_get_category_count_s *)data;
-
- if (strcmp(part, "elm.text") == 0)
- return strdup(item->category.text);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (item == NULL)
- return "";
- char string_buf[100];
-
- int size = snprintf(string_buf, 100, "%s: %d<br>From: ", dgettext("privacy-setting",
- PRIVACY_MENU_DLP_REPORTS_TOTAL_LEAKS), item->leak_count);
-
- struct tm timestamp;
- gmtime_r(&item->first_time_stamp, ×tamp);
- size += strftime(string_buf + size, 100 - size, "%b %d, %Y - To: ", ×tamp);
-
- gmtime_r(&item->last_time_stamp, ×tamp);
- size += strftime(string_buf + size, 100 - size, "%b %d, %Y", ×tamp);
-
- char *multiline = strdup(string_buf);
-
- return multiline;
- }
-
- return NULL;
-}
-
-/**
- * @brief Internal callback function invoked when genlist item displayed.
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static Evas_Object *_gl_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- return NULL;
-}
-
-static void _menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- leak_log_get_category_count_s *item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- struct app_data_s *ad = (struct app_data_s *)data;
-
- stats_cb.name = item->category.text;
- create_privacy_dlp_reports_full_view(&stats_cb, ad);
-}
-
-/*
- * @brief Function will be operated when genlist is deleted.
- * @param[in] data The data to be passed to the callback function
- * @param[in] obj The Evas object handle to be passed to the callback function
- */
-static void _gl_del_cb(void *data, Evas_Object *obj)
-{
- g_slice_free(leak_log_get_category_count_s, data);
-}
-
-/**
- * @brief Creates essential objects for the screen.
- */
-void create_privacy_dlp_reports_data_stat_view(struct app_data_s *ad)
-{
- uid_t user_id = getuid();
- if (dlp_leak_log_list) {
- g_list_free(dlp_leak_log_list);
- dlp_leak_log_list = NULL;
- }
-
- /* 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
-
- /* Create elm_layout and set its style as nocontents/text */
- genlist = elm_layout_add(ad->nf);
- elm_layout_theme_set(genlist, "layout", "nocontents", "default");
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- elm_object_part_text_set(genlist, "elm.text", dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_EMPTY));
-
- elm_layout_signal_emit(genlist, "align.center", "elm");
-
- } else {
- genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-
- elm_object_style_set(genlist, "effect");
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _gl_text_get_cb;
- itc->func.content_get = _gl_content_get_cb;
- itc->func.del = _gl_del_cb;
-
- GList *elem;
-
- /* Append privacy related package as genlist item */
- for (elem = dlp_leak_log_list; elem; elem = elem->next) {
- 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");
- }
-
- elm_genlist_item_class_free(itc);
- }
-
- evas_object_show(genlist);
-
- /* 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_STATISTICS), common_back_btn_add(ad), NULL, genlist, NULL);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
-
-void update_privacy_dlp_reports_data_stat_view(struct app_data_s *ad)
-{
- elm_genlist_clear(genlist);
-
- uid_t user_id = getuid();
- if (dlp_leak_log_list) {
- g_list_free(dlp_leak_log_list);
- dlp_leak_log_list = NULL;
- }
-
- /* 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
- elm_layout_theme_set(genlist, "layout", "nocontents", "default");
- elm_object_part_text_set(genlist, "elm.text", dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_EMPTY));
- elm_layout_signal_emit(genlist, "align.center", "elm");
-
- } else {
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _gl_text_get_cb;
- itc->func.content_get = _gl_content_get_cb;
- itc->func.del = _gl_del_cb;
-
- GList *elem;
-
- /* Append privacy related package as genlist item */
- for (elem = dlp_leak_log_list; elem; elem = elem->next) {
- 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");
- }
-
- elm_genlist_item_class_free(itc);
- }
-}
+++ /dev/null
-/**
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_reports_del_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_utils.h"
-#include "common_popup.h"
-#include "privacy_view.h"
-#include <efl_extension.h>
-
-#define MAX_DELETE_LOG 100
-
-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;
- Elm_Object_Item *naviframe_title;
-} reports_del_data_s;
-
-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
-};
-
-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)
-{
- reports_del_data_s *rdd = data;
- const size_t total_logs = elm_genlist_items_count(rdd->genlist);
-
- int log_id[MAX_DELETE_LOG];
- int res = PRIV_GUARD_ERROR_SUCCESS;
- size_t total_deleted_logs = 0;
- size_t i = 1;
-
- // Select checked log ids and delete them
- while (i <= total_logs) {
- int log_count = 0;
-
- // Select at most MAX_DELETE_LOGs to avoid potential memory problems
- // and large number of variables in SQL query
- while (i <= total_logs && log_count < MAX_DELETE_LOG) {
- Elm_Object_Item *item = elm_genlist_nth_item_get(rdd->genlist, i);
-
- if (NULL != item) {
- const dlp_item_log_s *leak_log_item = elm_object_item_data_get(item);
-
- if (NULL != leak_log_item && leak_log_item->is_checked)
- log_id[log_count++] = leak_log_item->data->log_id;
- }
-
- ++i;
- }
-
- if (log_count > 0) {
- // Delete selected logs
- res = privacy_guard_client_purge_leak_logs_by_logid(log_id, log_count);
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- LOGI("Deleted %d logs.", log_count);
- total_deleted_logs += log_count;
- } else {
- LOGE("Failed to delete logs. Error=%d", res);
- }
- }
- }
-
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- GString *toast_msg = g_string_new(NULL);
- if (total_deleted_logs > 1) {
- const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_LOGS_DELETED);
- g_string_printf(toast_msg, format, total_deleted_logs);
- } else {
- g_string_assign(toast_msg, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETED));
- }
-
- show_toast_notification(toast_msg->str, rdd->ad->win);
-
- 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();
-}
-
-static void _reports_del_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- reports_del_data_s *rdd = data;
- destroy_popup(rdd->confirm_delete_popup);
- rdd->confirm_delete_popup = NULL;
-}
-
-static void _reports_del_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info)
-{
- reports_del_data_s *rdd = data;
- destroy_popup(rdd->confirm_delete_popup);
- rdd->confirm_delete_popup = NULL;
- elm_naviframe_item_pop(rdd->ad->nf);
-}
-
-static void _reports_del_delete_btn_cb(void *data, Evas_Object *obj, void *event_info)
-{
- reports_del_data_s *rdd = data;
-
- GString *confirm_del_msg = g_string_new(NULL);
- const char *format = dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_LOGS_WILL_BE_DELETED);
- 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)
-{
- if (strcmp(part, "elm.text") == 0)
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_SELECT_ALL));
- return NULL;
-}
-
-static Evas_Object *_reports_del_select_all_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.swallow.end") == 0) {
- dlp_item_log_s *item = (dlp_item_log_s *)data;
- Evas_Object *check = create_check(obj);
- elm_check_state_set(check, item->is_checked ? EINA_TRUE : EINA_FALSE);
- item->check = check;
- return check;
- }
- return NULL;
-}
-
-static void _reports_del_select_all_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected ("Select all") item */
- Elm_Object_Item *ei = event_info;
- dlp_item_log_s *item = elm_object_item_data_get(ei);
- item->is_checked = !item->is_checked;
- const bool is_checked = item->is_checked;
- const Eina_Bool check_checkbox = is_checked ? EINA_TRUE : EINA_FALSE;
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- while (NULL != ei) {
- item = elm_object_item_data_get(ei);
- elm_check_state_set(item->check, check_checkbox);
- item->is_checked = is_checked;
- ei = elm_genlist_item_next_get(ei);
- }
-
- reports_del_data_s *rdd = data;
- set_view_title_bar(rdd);
-}
-
-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)
- return strdup(item->data->app_name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (item->data == NULL)
- return "";
-
- char time_str[64] = {0,};
- struct tm timeinfo;
- localtime_r(&item->data->time_stamp, &timeinfo);
- strftime(time_str, sizeof(time_str), "%a, %x %X", &timeinfo);
-
- 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 NULL;
-}
-
-static Evas_Object *_reports_del_gl_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (reports_del_data.logs_deleted)
- return NULL;
-
- dlp_item_log_s *item = (dlp_item_log_s *)data;
-
- if (strcmp(part, "elm.swallow.end") == 0) {
- Evas_Object *check = create_check(obj);
- elm_check_state_set(check, item->is_checked ? EINA_TRUE : EINA_FALSE);
- item->check = check;
- return check;
- }
-
- if (strcmp(part, "elm.swallow.icon") == 0) {
- if (item->data == NULL)
- return NULL;
-
- Evas_Object *icon = elm_icon_add(obj);
- elm_image_file_set(icon, item->data->app_icon, NULL);
- evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(50), ELM_SCALE_SIZE(50));
- // NOTE: code below is commented out because only allow actions will be
- // released to Tizen 4.0, so action icons become meaningless.
- //overlay_action_image(icon, item->data->action);
- return icon;
- }
-
- return NULL;
-}
-
-static void _reports_del_gl_del_cb(void *data, Evas_Object *obj)
-{
- g_slice_free(dlp_item_log_s, data);
-}
-
-static void _reports_del_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- dlp_item_log_s *item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- item->is_checked = !item->is_checked;
-
- /* Set check box state, in case user tapped outside it */
- elm_check_state_set(item->check, item->is_checked ? EINA_TRUE : EINA_FALSE);
-
- if (!item->is_checked) {
- // deselect "Select all" check
- Elm_Object_Item *item = elm_genlist_nth_item_get(((reports_del_data_s *)data)->genlist, 0);
- if (NULL != item) {
- dlp_item_log_s *item_log = elm_object_item_data_get(item);
- item_log->is_checked = false;
- elm_check_state_set(item_log->check, EINA_FALSE);
- }
- }
-
- reports_del_data_s *rdd = data;
- set_view_title_bar(rdd);
-}
-
-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);
- g_string_printf(string_buffer, format, number_of_selected_logs);
-
- 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));
- }
-}
-
-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;
- size_t i = 0;
- // Count checked log ids
- for (i = 1; i <= total_logs; ++i) { // note that 0th item is "Select all", so we skip it
- Elm_Object_Item *item = elm_genlist_nth_item_get(genlist, i);
- if (NULL != item) {
- dlp_item_log_s *leak_log_item = elm_object_item_data_get(item);
- if (NULL != leak_log_item && leak_log_item->is_checked)
- ++log_count;
- }
- }
- return log_count;
-}
-
-static Evas_Object *create_check(Evas_Object *parent)
-{
- Evas_Object *check;
- check = elm_check_add(parent);
- elm_check_state_set(check, EINA_FALSE);
- return check;
-}
-
-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);
- elm_object_style_set(btn, left_side ? "naviframe/title_left" : "naviframe/title_right");
- elm_object_item_part_content_set(nf_it, left_side ? "title_left_btn" : "title_right_btn", btn);
- elm_object_text_set(btn, text);
- evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, data);
- return btn;
-}
-
-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 = g_slice_new0(dlp_item_log_s);
-
- 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);
-}
-
-static void populate_reports_del_genlist(reports_del_data_s *data)
-{
- if (NULL == data->log_list)
- return;
-
- create_select_all_item(data);
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _reports_del_gl_text_get_cb;
- itc->func.content_get = _reports_del_gl_content_get_cb;
- itc->func.del = _reports_del_gl_del_cb;
-
- Elm_Object_Item *it = NULL;
- GList* l;
-
- /* Append privacy related package as genlist item */
- for (l = data->log_list; l != NULL; l = l->next) {
- 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);
-}
-
-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);
- evas_object_size_hint_align_set(data->genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- populate_reports_del_genlist(data);
- evas_object_show(data->genlist);
-}
-
-void create_privacy_dlp_reports_del_view(GList* log_list, int action, struct app_data_s *ad)
-{
- if (NULL == log_list || action > 2 || NULL == ad) {
- LOGE("Invalid parameter");
- return;
- }
-
- reports_del_data.ad = ad;
- if (NULL == reports_del_data.confirm_delete_popup) {
- destroy_popup(reports_del_data.confirm_delete_popup);
- reports_del_data.confirm_delete_popup = NULL;
- }
- 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);
-
- Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->nf, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_LOGS_TITLE), NULL, NULL, reports_del_data.genlist, NULL);
-
- reports_del_data.naviframe_title = nf_it;
-
- /* add cancel and delete buttons to title bar */
- add_title_button_to_naviframe(ad->nf, nf_it, true, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_CANCEL_BTN), _reports_del_cancel_btn_cb, &reports_del_data);
- reports_del_data.delete_button = add_title_button_to_naviframe(ad->nf, nf_it, false, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN), _reports_del_delete_btn_cb, &reports_del_data);
- elm_object_disabled_set(reports_del_data.delete_button, EINA_TRUE);
-
- /* Register the Back key event callback */
- eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_BACK, _reports_del_cancel_btn_cb, &reports_del_data);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_reports_full_view.c
- * @version 1.0
- * @brief
- */
-
-#include <math.h>
-#include <efl_extension.h>
-#include <glib.h>
-#include <time.h>
-#include <tzplatform_config.h>
-#include <privacy_guard_client.h>
-#include "common_utils.h"
-#include "common_ctxpopup.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-#include "privilege_info.h"
-
-#define ACTION_TEXT_LEN 128
-
-// Rule action filter labels
-static const char *ACTION_TEXT[ACTION_TOTAL];
-static dlp_statistics_cb_s *stats_cb = NULL;
-
-typedef struct {
- struct app_data_s *ad;
- GList* dlp_leak_log_list; // List with each leak in privacy-guard
- rule_action_filter current_action; // Stores current action filter
- int leaks_count; // Number of leaks currently displayed
- Evas_Object *box; // Box to hold UI components
- Evas_Object *genlist; // Genlist to display each leak
- Evas_Object *ctxpopup; // Popup menu
-} reports_full_view_data_s;
-
-static reports_full_view_data_s reports_full_view_data = {
- .dlp_leak_log_list = NULL,
- .current_action = ACTION_ALL,
- .box = NULL,
- .genlist = NULL,
- .ctxpopup = NULL
-};
-
-// forward declarations
-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 = g_slice_new(dlp_log_s);
-
- 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_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;
-
- if (strcmp(part, "elm.text") == 0)
- return strdup(item->data->app_name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (item->data == NULL)
- return "";
-
- char time_str[64] = {0,};
- struct tm timeinfo;
- localtime_r(&item->data->time_stamp, &timeinfo);
- strftime(time_str, sizeof(time_str), "%a, %x %X", &timeinfo);
-
- 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 NULL;
-}
-
-/**
- * @brief Internal callback function invoked when genlist item displayed.
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static Evas_Object *_gl_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- dlp_item_log_s *item = (dlp_item_log_s *)data;
-
- if (strcmp(part, "elm.swallow.icon") == 0) {
- if (item->data == NULL)
- return NULL;
-
- Evas_Object *icon = elm_icon_add(obj);
- elm_image_file_set(icon, item->data->app_icon, NULL);
- evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(50), ELM_SCALE_SIZE(50));
- // NOTE: code below is commented out because only allow actions will be
- // released to Tizen 4.0, so action icons become meaningless.
- //overlay_action_image(icon, item->data->action);
- return icon;
- }
-
- return NULL;
-}
-
-static void _menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- dlp_item_log_s *item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- struct app_data_s *ad = (struct app_data_s *)data;
-
- create_privacy_dlp_log_detailed_view(item, ad);
-
-}
-
-/*
- * @brief Function will be operated when genlist is deleted.
- * @param[in] data The data to be passed to the callback function
- * @param[in] obj The Evas object handle to be passed to the callback function
- */
-static void _gl_del_cb(void *data, Evas_Object *obj)
-{
- dlp_item_log_s *item = data;
- free_dlp_log_s(item->data);
- g_slice_free(dlp_item_log_s, data);
-}
-
-static void _reports_full_delete_cb(void *data, Evas_Object *obj, void *event_info)
-{
- reports_full_view_data_s *rfvd = data;
- elm_ctxpopup_dismiss(rfvd->ctxpopup);
- create_privacy_dlp_reports_del_view(rfvd->dlp_leak_log_list, rfvd->current_action, rfvd->ad);
-}
-
-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) {
- 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);
- }
-}
-
-static void _reports_full_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- reports_full_view_data_s *rfvd = data;
-
- 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);
-}
-
-static void _reports_full_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info)
-{
- reports_full_view_data_s *rfvd = data;
- elm_ctxpopup_dismiss(rfvd->ctxpopup);
-}
-
-static int populate_reports_genlist(reports_full_view_data_s *data)
-{
- int leaks_count = 0;
-
- if (NULL != data->dlp_leak_log_list) {
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _gl_text_get_cb;
- itc->func.content_get = _gl_content_get_cb;
- itc->func.del = _gl_del_cb;
-
- Elm_Object_Item *it = NULL;
- GList* l;
-
- /* Append privacy related package as genlist item */
- for (l = data->dlp_leak_log_list; l != NULL; l = l->next) {
- 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;
- }
- }
-
- elm_genlist_item_class_free(itc);
- }
-
- return leaks_count;
-}
-
-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);
- evas_object_size_hint_align_set(data->genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- data->leaks_count = populate_reports_genlist(data);
- if (0 == data->leaks_count) {
- /* leaks list is empty */
- elm_layout_theme_set(data->genlist, "layout", "nocontents", "default");
- elm_object_part_text_set(data->genlist, "elm.text", dgettext("privacy-setting", PRIVACY_MENU_DLP_REPORTS_EMPTY));
- elm_layout_signal_emit(data->genlist, "align.center", "elm");
- }
- evas_object_show(data->genlist);
- elm_box_pack_end(data->box, data->genlist);
- /* Register the Menu event callback */
- eext_object_event_callback_add(data->genlist, EEXT_CALLBACK_MORE, _reports_full_menu_cb, data);
-}
-
-static void full_view_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
- struct app_data_s *ad = (struct app_data_s *)data;
- return_if(!ad, , , "ad is null");
- elm_naviframe_item_pop(ad->nf);
- if (stats_cb)
- stats_cb->update_stats(ad);
-}
-
-static Evas_Object *full_view_back_btn_add(struct app_data_s *ad)
-{
- Evas_Object *btn = elm_button_add(ad->nf);
- elm_object_style_set(btn, "naviframe/back_btn/default");
- evas_object_smart_callback_add(btn, "clicked", full_view_back_btn_clicked_cb, 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)
-{
- stats_cb = scb;
-
- reports_full_view_data.dlp_leak_log_list = NULL;
- reports_full_view_data.ad = ad;
- reports_full_view_data.leaks_count = 0;
-
- /* Initialize labels of action's dropdown */
- ACTION_TEXT[ACTION_ALL] = "All actions";
- ACTION_TEXT[ACTION_ALLOW] = "Allow";
- ACTION_TEXT[ACTION_DENY] = "Deny";
- ACTION_TEXT[ACTION_SANITIZE] = "Sanitize";
- reports_full_view_data.current_action = ACTION_ALL;
-
- /* Get privacy guard data (time_stamp, action, pkg, dest, descrip, category, log) list by a privacy */
- uid_t user_id = getuid();
-
- /* Get dlp leak logs from privacy guard */
- if (stats_cb) {
- int res = stats_cb->foreach_leak_logs(user_id, stats_cb->name, _pg_dlp_leak_logs_cb, NULL);
- log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "stats_cb->foreach_leak_logs() is failed. [%d]", res);
- } else {
- 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);
- evas_object_show(box);
- reports_full_view_data.box = box;
-
- create_reports_genlist(&reports_full_view_data);
-
- /* 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);
-}
-
-void update_privacy_dlp_reports_full_view()
-{
- if (NULL == reports_full_view_data.genlist) {
- LOGE("genlist is null");
- return;
- }
-
- free_dlp_leak_log_list(&reports_full_view_data);
-
- uid_t user_id = getuid();
-
- /* Get dlp leak logs from privacy guard */
- if (stats_cb) {
- int res = stats_cb->foreach_leak_logs(user_id, stats_cb->name, _pg_dlp_leak_logs_cb, NULL);
- log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "stats_cb->foreach_leak_logs() is failed. [%d]", res);
- } else {
- 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);
- create_reports_genlist(&reports_full_view_data);
-}
+++ /dev/null
-/**
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_reports_rules_and_patterns_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_utils.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-#include <efl_extension.h>
-
-typedef struct {
- struct app_data_s *ad;
- const dlp_profile_s *config;
- Elm_Object_Item *nf_it;
- Evas_Object *content;
-} rules_patterns_view_data_s;
-
-static rules_patterns_view_data_s rules_patterns_view_data = {.ad = NULL, .content = NULL};
-
-void delete_category_list();
-void delete_pattern_list();
-void delete_rule_list();
-
-static Eina_Bool _rules_patterns_nf_pop_cb(void *data, Evas_Object* obj)
-{
- delete_category_list();
- delete_pattern_list();
- delete_rule_list();
- return EINA_TRUE;
-}
-
-static void _toolbar_rule_item_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rules_patterns_view_data_s *rpvd = data;
- create_privacy_dlp_rules_list_view(rpvd->ad, rpvd->content, rpvd->nf_it, rpvd->config);
-}
-
-static void _toolbar_pattern_item_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rules_patterns_view_data_s *rpvd = data;
- create_privacy_dlp_patterns_list_view(rpvd->ad, rpvd->content, rpvd->config);
-}
-
-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");
- elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
- elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
- Elm_Object_Item *rule_item = elm_toolbar_item_append(
- toolbar,
- NULL,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_RULES_N_PATTERNS_TITLE_RULES),
- _toolbar_rule_item_cb,
- data);
- elm_toolbar_item_append(
- toolbar,
- NULL,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_RULES_N_PATTERNS_TITLE_PATTERNS),
- _toolbar_pattern_item_cb,
- data);
- elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
- elm_toolbar_item_selected_set(rule_item, EINA_TRUE);
- return toolbar;
-}
-
-void create_privacy_dlp_reports_rules_and_patterns_view(struct app_data_s *ad, const dlp_profile_s *config)
-{
- if (NULL == ad || NULL == config) {
- LOGD("Invalid parameter");
- return;
- }
- rules_patterns_view_data.ad = ad;
- rules_patterns_view_data.config = config;
- rules_patterns_view_data.content = elm_layout_add(ad->nf);
- elm_layout_theme_set(rules_patterns_view_data.content, "layout", "application", "default");
-
- rules_patterns_view_data.nf_it = elm_naviframe_item_push(
- ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_RULES_N_PATTERNS_TITLE),
- common_back_btn_add(ad),
- NULL,
- rules_patterns_view_data.content,
- "tabbar");
-
- elm_naviframe_item_pop_cb_set(rules_patterns_view_data.nf_it, _rules_patterns_nf_pop_cb, ad);
-
- // Create and set a toolbar into the tabbar part
- Evas_Object *rules_patterns_tabbar = create_rules_and_patterns_tabbar(&rules_patterns_view_data);
- elm_object_item_part_content_set(rules_patterns_view_data.nf_it, "tabbar", rules_patterns_tabbar);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_rule_create_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-#include <efl_extension.h>
-
-// Struct used to store create rule menu options
-typedef struct {
- int item;
- Evas_Object *radio;
-// struct app_data_s *ad;
-} create_rule_radio_s;
-
-// Enumeration that defines the options of the create rule menu
-enum {
- CREATE_RULE_ITEM_QUICK = 0,
- CREATE_RULE_ITEM_CUSTOM,
- CREATE_RULE_ITEM_END
-};
-
-typedef struct {
- struct app_data_s *ad;
- dlp_profile_s *config;
- void *rule_list_data;
- Elm_Object_Item *pop_to_nf_it;
- Evas_Object *radio_group;
-} rule_create_view_data_s;
-
-static rule_create_view_data_s rule_create_view_data = { .ad = NULL, .config = NULL, .pop_to_nf_it = NULL, .radio_group = NULL};
-
-/**
- * @brief Internal callback function invoked when a Create Rule genlist item is displayed
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static char* _gl_rule_item_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- create_rule_radio_s* radio_item = data;
- if (!strcmp(part, "elm.text"))
- switch (radio_item->item) {
- case CREATE_RULE_ITEM_QUICK:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULE_QUICK));
- case CREATE_RULE_ITEM_CUSTOM:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULE_CUSTOM));
- default:
- LOGE("Invalid create rule menu item");
- }
-
- else if (!strcmp(part, "elm.text.multiline")) {
- switch (radio_item->item) {
- case CREATE_RULE_ITEM_QUICK:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULE_QUICK_DESCRIPTION));
- case CREATE_RULE_ITEM_CUSTOM:
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULE_CUSTOM_DESCRIPTION));
- default:
- LOGE("Invalid create rule menu item");
- }
- }
-
- return NULL;
-}
-
-/**
- * @brief Internal callback function invoked when a Create Rule genlist item is displayed
- * @param[in] data The user data passed to the elm_genlist_item_append() function
- * @param[in] obj The object invoking this callback function
- * @param[in] part The name of the item's part being rendered
- */
-static Evas_Object* _gl_rule_item_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.swallow.end") == 0) {
- create_rule_radio_s *item = data;
- item->radio = elm_radio_add(obj);
- return item->radio;
- }
-
- return NULL;
-}
-
-static void _gl_create_rule_item_realized_cb(void *data, Evas_Object *obj, void *event_info)
-{
- create_rule_radio_s *rule_item = elm_object_item_data_get(event_info);
- rule_create_view_data_s *rcvd = data;
-
- elm_radio_state_value_set(rule_item->radio, rule_item->item);
- if (CREATE_RULE_ITEM_QUICK == rule_item->item) {
- // start of radio group
- rcvd->radio_group = rule_item->radio;
- } else {
- elm_radio_group_add(rule_item->radio, rcvd->radio_group);
- deselect_create_rule_radio_group();
- }
-}
-
-/**
- * @brief Internal callback function when quick rule create is selected.
- * @param[in] data The user data passed to the evas_object_smart_callback_add() function
- * @param[in] obj The object invoking this callback function
- * @param[in] event_info The structure containing the information on this event
- */
-static void _create_rule_item_select_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Elm_Object_Item *ei = event_info;
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- //const create_rule_radio_s *rule_item = data;
- const create_rule_radio_s *rule_item = elm_object_item_data_get(ei);
- rule_create_view_data_s *rcvd = data;
-
- elm_radio_value_set(rcvd->radio_group, rule_item->item);
-
- switch (rule_item->item) {
- case CREATE_RULE_ITEM_QUICK:
- create_privacy_dlp_choose_rule_template_view(rcvd->ad, rcvd->pop_to_nf_it, rcvd->config, rcvd->rule_list_data);
- break;
- case CREATE_RULE_ITEM_CUSTOM:
- create_privacy_dlp_choose_apps_view(rcvd->ad, rcvd->pop_to_nf_it, rcvd->config, NULL, rcvd->rule_list_data, NULL, NULL);
- break;
- default:
- LOGE("Invalid create rule item");
- }
-}
-
-/**
- * @brief Deselects create rule menu radio group
- */
-void deselect_create_rule_radio_group()
-{
- elm_radio_value_set(rule_create_view_data.radio_group, CREATE_RULE_ITEM_END);
-}
-
-void create_privacy_dlp_rule_create_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, dlp_profile_s *config, void *rule_list_data)
-{
- if (NULL == ad) {
- LOGE("Invalid parameter");
- return;
- }
-
- rule_create_view_data.ad = ad;
- rule_create_view_data.config = config;
- rule_create_view_data.rule_list_data = rule_list_data;
- rule_create_view_data.pop_to_nf_it = pop_to_nf_it;
- rule_create_view_data.radio_group = NULL;
-
- Evas_Object *genlist = NULL;
- genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-
- elm_object_style_set(genlist, "effect");
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "multiline";
- itc->func.text_get = _gl_rule_item_text_get_cb;
- itc->func.content_get = _gl_rule_item_content_get_cb;
- itc->func.del = NULL;
-
- static create_rule_radio_s create_rule_item_quick = { .item = CREATE_RULE_ITEM_QUICK, .radio = NULL };
- //create_rule_item_quick.ad = ad;
- elm_genlist_item_append(genlist, itc, &create_rule_item_quick, NULL, ELM_GENLIST_ITEM_NONE, _create_rule_item_select_cb, &rule_create_view_data);
-
- static create_rule_radio_s create_rule_item_custom = { .item = CREATE_RULE_ITEM_CUSTOM, .radio = NULL };
- //create_rule_item_custom.ad = ad;
- elm_genlist_item_append(genlist, itc, &create_rule_item_custom, NULL, ELM_GENLIST_ITEM_NONE, _create_rule_item_select_cb, &rule_create_view_data);
-
- evas_object_smart_callback_add(genlist, "realized", _gl_create_rule_item_realized_cb, &rule_create_view_data);
- elm_genlist_item_class_free(itc);
- evas_object_show(genlist);
-
- /* 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_CREATE_RULES_MENU_CREATE), common_back_btn_add(ad), NULL, genlist, NULL);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_rule_delete_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_popup.h"
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-#include <app_manager.h>
-
-typedef struct {
- const get_custom_rule_s *rule;
- bool is_checked;
- Evas_Object *check;
-} rule_delete_item_s;
-
-typedef struct {
- struct app_data_s *ad;
- GList *rule_item_list;
- void *rule_list_data;
- Evas_Object *genlist;
- Evas_Object *delete_button;
- Evas_Object *confirm_popup;
-} rule_delete_view_data_s;
-
-#define SELECT_ALL_RULES_ITEM -1
-
-static get_custom_rule_s rule_delete_select_all_rule = { .id = SELECT_ALL_RULES_ITEM };
-
-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)
-{
- rule_delete_item_s *rule_item = (rule_delete_item_s *)data;
- if (strcmp(part, "elm.text") == 0)
- return strdup(rule_item->rule->name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- // Note that the string allocated by stdup below is freed internally
- // by Enlightment, when the genlist item is undisplayed
- if (rule_item != NULL)
- return (SELECT_ALL_RULES_ITEM != rule_item->rule->id) ? strdup(rule_item->rule->description) : strdup("");
- }
-
- return NULL;
-}
-
-static Evas_Object *_gl_rule_delete_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- rule_delete_item_s *rule_item = data;
-
- if (strcmp(part, "elm.swallow.end") == 0) {
- Evas_Object *check = common_create_check(obj);
- elm_check_state_set(check, rule_item->is_checked ? EINA_TRUE : EINA_FALSE);
- rule_item->check = check;
- return check;
- }
-
- return NULL;
-}
-
-static void _rule_delete_menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- rule_delete_item_s *rule_item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- rule_item->is_checked = !rule_item->is_checked;
-
- rule_delete_view_data_s *rdvd = data;
- if (SELECT_ALL_RULES_ITEM != rule_item->rule->id) {
- /* check rules with the same pattern and action of the current rule */
- set_rules_by_pattern_and_action(rdvd->rule_item_list, rule_item);
-
- rule_delete_item_s *select_all_item = rdvd->rule_item_list->data;
- if (!rule_item->is_checked) {
- /* set "Select all" check off */
- select_all_item->is_checked = false;
- } else {
- bool all_selected = true;
- GList *l;
- // check if all items are selected. Note that the 1st element of app_list
- // is the select button, so we start looping from the 2nd element
- for (l = g_list_nth(rdvd->rule_item_list, 1); l != NULL; l = l->next)
- if (!((rule_delete_item_s *)l->data)->is_checked) {
- all_selected = false;
- break;
- }
-
- /* if all items are selected, set select all check on */
- if (all_selected)
- select_all_item->is_checked = true;
- }
- } else {
- /* Select or deselect items */
- GList *l;
- for (l = g_list_nth(rdvd->rule_item_list, 1); l != NULL; l = l->next)
- ((rule_delete_item_s *)l->data)->is_checked = rule_item->is_checked;
- }
-
- elm_object_disabled_set(rdvd->delete_button, get_number_of_selected_rules(rdvd->genlist) == 0 ? EINA_TRUE : EINA_FALSE);
- elm_genlist_realized_items_update(rdvd->genlist);
-}
-
-static void _rule_delete_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const rule_delete_view_data_s *rdvd = data;
- destroy_popup(rdvd->confirm_popup);
-
- bool rule_deleted = false;
- GList *l; // note that the 0th element is "select all"
- for (l = g_list_nth(rdvd->rule_item_list, 1); l != NULL; l = l->next) {
- const rule_delete_item_s *rule_item = l->data;
- if (!rule_item->is_checked)
- continue;
-
- const int res = privacy_guard_client_delete_dlp_custom_rule(rule_item->rule->id);
-
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- LOGD("Rule %d deleted", rule_item->rule->id);
- rule_deleted = true;
- } else
- LOGE("Failed to delete rule (id=%d). Error=%d", rule_item->rule->id, res);
- }
-
- if (NULL != rdvd->rule_list_data)
- update_privacy_dlp_rules_list_view(rdvd->rule_list_data);
-
- elm_naviframe_item_pop(rdvd->ad->nf);
-
- if (rule_deleted)
- show_toast_notification(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_MESSAGE), rdvd->ad->win);
-}
-
-static void _free_rule_delete_item_cb(void *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)
-{
- rule_delete_view_data_s *rdvd = data;
- g_list_free_full(rdvd->rule_item_list, _free_rule_delete_item_cb);
- rdvd->rule_item_list = NULL;
- return EINA_TRUE;
-}
-
-static void _rule_delete_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_delete_view_data_s *rdvd = data;
- destroy_popup(rdvd->confirm_popup);
-}
-
-static void _rule_delete_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_delete_view_data_s *rdvd = data;
- elm_naviframe_item_pop(rdvd->ad->nf);
-}
-
-static void _rule_delete_done_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_delete_view_data_s *rdvd = data;
- rdvd->confirm_popup = create_two_buttons_popup(
- rdvd->genlist,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_POPUP_TITLE),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_MESSAGE_MESSAGE),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
- _rule_delete_popup_ok_cb,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _rule_delete_popup_cancel_cb,
- _rule_delete_popup_cancel_cb,
- rdvd);
-}
-
-static void set_rules_by_pattern_and_action(GList *rule_item_list, const rule_delete_item_s *current_rule_item)
-{
- const GList *l = g_list_find(rule_item_list, current_rule_item);
- if (NULL == l || NULL == l->next)
- return;
-
- const int pattern_id = current_rule_item->rule->pattern_id;
- const PgDlpAction action = current_rule_item->rule->action;
- l = l->next;
- const get_custom_rule_s *rule = ((rule_delete_item_s *)(l->data))->rule;
-
- while (NULL != l && pattern_id == rule->pattern_id && action == rule->action) {
- ((rule_delete_item_s *)(l->data))->is_checked = current_rule_item->is_checked;
- l = l->next;
- if (NULL != l)
- rule = ((const rule_delete_item_s *)(l->data))->rule;
- }
-}
-
-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;
- size_t i;
- // Count checked log ids
- for (i = 1; i <= total_rules; ++i) { // note that 0th item is "Select all", so we skip it
- Elm_Object_Item *item = elm_genlist_nth_item_get(genlist, i);
- if (NULL != item) {
- rule_delete_item_s *rule_item = elm_object_item_data_get(item);
- if (NULL != rule_item && rule_item->is_checked)
- ++rule_count;
- }
- }
-
- return rule_count;
-}
-
-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 = g_slice_new(rule_delete_item_s);
-
- item->rule = l->data;
- item->is_checked = false;
- item->check = NULL;
-
- data->rule_item_list = g_list_prepend(data->rule_item_list, item);
- }
- data->rule_item_list = g_list_reverse(data->rule_item_list);
-}
-
-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 = g_slice_new(rule_delete_item_s);
-
- 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)
-{
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- itc->item_style = "singleline";
- 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 = elm_genlist_item_append(data->genlist, itc, data->rule_item_list->data, NULL, ELM_GENLIST_ITEM_NONE, _rule_delete_menu_item_selected_cb, data);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
-
- elm_genlist_item_class_free(itc);
-}
-
-void create_privacy_dlp_rule_delete_view(struct app_data_s *ad, const GList *rule_list, void *rule_list_data)
-{
- if (NULL == ad || NULL == rule_list || NULL == rule_list_data) {
- LOGE("Invalid parameter");
- return;
- }
-
- static rule_delete_view_data_s data;
- data.ad = ad;
- populate_rule_item_list(&data, rule_list);
- data.rule_list_data = rule_list_data;
-
- create_select_all_rules_item(&data);
-
- data.genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(data.genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(data.genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- add_select_all_item_to_genlist(&data);
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- itc->item_style = "multiline";
- itc->func.text_get = _gl_rule_delete_text_get_cb;
- itc->func.content_get = _gl_rule_delete_content_get_cb;
- itc->func.del = 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");
-
- const get_custom_rule_s *rule = ((rule_delete_item_s *)(l->data))->rule;
-
- // Skip rules that have the same pattern and action as the current rule
- const int pattern_id = rule->pattern_id;
- const PgDlpAction action = rule->action;
- rule = ((rule_delete_item_s *)(l->data))->rule;
- while (l != NULL && pattern_id == rule->pattern_id && action == rule->action) {
- l = l->next;
- if (l != NULL)
- rule = ((rule_delete_item_s *)(l->data))->rule;
- }
- }
-
- elm_genlist_item_class_free(itc);
-
- evas_object_show(data.genlist);
-
- /* Add genlist to naviframe */
- Elm_Object_Item *nf_it = elm_naviframe_item_push(
- ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_LOGS_TITLE),
- NULL,
- NULL,
- data.genlist,
- NULL);
-
- /* set callback to genlist item pop event */
- elm_naviframe_item_pop_cb_set(nf_it, _rule_delete_nf_pop_cb, &data);
- /* add cancel button to naviframe title bar */
- common_naviframe_btn_add(ad->nf, nf_it, true, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL), _rule_delete_cancel_cb, &data);
- /* add delete button to naviframe title bar */
- data.delete_button = common_naviframe_btn_add(ad->nf, nf_it, false, dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN), _rule_delete_done_cb, &data);
- elm_object_disabled_set(data.delete_button, get_number_of_selected_rules(data.genlist) == 0 ? EINA_TRUE : EINA_FALSE);
-}
+++ /dev/null
-/**
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_rule_detailed_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_ctxpopup.h"
-#include "common_popup.h"
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <app_manager.h>
-#include <efl_extension.h>
-
-typedef struct {
- struct app_data_s *ad;
- get_custom_rule_s current_rule;
- void *rule_list_data;
- Elm_Object_Item *pop_to_nf_it;
- Evas_Object *rule_details_genlist;
- Evas_Object *ctxpopup;
- Evas_Object *delete_popup;
- char pattern_name[LEN_PATTERN];
-} rule_detailed_view_data_s;
-
-typedef struct {
- int pattern_id;
- PgDlpAction action;
- GList *rule_id_list;
-} patttern_action_rules_s;
-
-static rule_detailed_view_data_s rule_detailed_view_data = {
- .ad = NULL,
- .rule_details_genlist = NULL };
-
-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);
-static void _rule_detailed_view_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
-
-static bool _pg_dlp_rule_pattern_name_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)
-{
- rule_detailed_view_data_s *rdvd = user_data;
- if (id == rdvd->current_rule.pattern_id) {
- strncpy(rdvd->pattern_name, name, LEN_PATTERN);
- rdvd->pattern_name[LEN_PATTERN - 1] = 0;
- }
- return true;
-}
-
-static char* _gl_rule_header_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- get_custom_rule_s *rule = data;
-
- if (strcmp(part, "elm.text") == 0)
- return strdup(rule->name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (rule == NULL)
- return strdup("");
-
- return strdup(rule->description);
- }
-
- return NULL;
-}
-
-static char* _gl_group_rule_details_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (!strcmp(part, "elm.text"))
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_DETAILS));
-
- return NULL;
-}
-
-static char* _gl_rule_pattern_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- if (strcmp(part, "elm.text") == 0)
- return strdup(dgettext("privacy-setting", PRIVACY_MENU_DLP_RULES_N_PATTERNS_TITLE_PATTERNS));
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (data == NULL)
- return strdup("");
-
- return strdup(((rule_detailed_view_data_s *)data)->pattern_name);
- }
-
- return NULL;
-}
-
-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);
-}
-
-static void _rule_detailed_view_delete_ok_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_detailed_view_data_s *rdvd = data;
-
- if (delete_rules_by_pattern_and_action(&(rdvd->current_rule)))
- show_toast_notification(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_MESSAGE), rdvd->ad->win);
-
- elm_popup_dismiss(rdvd->delete_popup);
-
- if (NULL != rdvd->rule_list_data)
- update_privacy_dlp_rules_list_view(rdvd->rule_list_data);
- elm_naviframe_item_pop(rdvd->ad->nf);
-}
-
-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);
-}
-
-static void _rule_detailed_view_popup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_detailed_view_data_s *rdvd = data;
- destroy_popup(rdvd->delete_popup);
- rdvd->delete_popup = NULL;
- eext_object_event_callback_add(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_menu_button_cb, rdvd);
-}
-
-static void _rule_detailed_view_delete_rule_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_detailed_view_data_s *rdvd = data;
-
- elm_ctxpopup_dismiss(rdvd->ctxpopup);
-
- rdvd->delete_popup = create_two_buttons_popup(
- rdvd->ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_POPUP_TITLE),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE_RULE_MESSAGE_MESSAGE),
- dgettext("privacy-setting", PRIVACY_MENU_DLP_LOG_DELETE_BTN),
- _rule_detailed_view_delete_ok_cb,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL),
- _rule_detailed_view_delete_cancel_cb,
- _rule_detailed_view_delete_cancel_cb,
- rdvd);
-
- evas_object_smart_callback_add(rdvd->delete_popup, "dismissed", _rule_detailed_view_popup_dismissed_cb, rdvd);
-}
-
-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)
- update_privacy_dlp_rules_list_view(rdvd->rule_list_data);
- return TRUE;
-}
-
-static void _rule_detailed_view_menu_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_detailed_view_data_s *rdvd = data;
- eext_object_event_callback_del(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_menu_button_cb);
- eext_object_event_callback_add(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_dismiss_menu_cb, rdvd);
-
- 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;
-
- eext_object_event_callback_del(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_dismiss_menu_cb);
- if (NULL == rdvd->delete_popup)
- eext_object_event_callback_add(rdvd->rule_details_genlist, EEXT_CALLBACK_MORE, _rule_detailed_view_menu_button_cb, rdvd);
-}
-
-static void _rule_detailed_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_detailed_view_data_s *rdvd = data;
- elm_ctxpopup_dismiss(rdvd->ctxpopup);
-}
-
-static bool _get_rules_by_pattern_action_cb(int id, PgDlpAction action, int pattern_id, const char *name,
- const char *description, const char *application_id, int leaks_count, void *user_data)
-{
- patttern_action_rules_s *pattern_action_rules = user_data;
- if (pattern_id == pattern_action_rules->pattern_id && action == pattern_action_rules->action) {
- pattern_action_rules->rule_id_list = g_list_prepend(pattern_action_rules->rule_id_list, GINT_TO_POINTER(id));
- }
- return true;
-}
-
-static bool delete_rules_by_pattern_and_action(const get_custom_rule_s *current_rule)
-{
- patttern_action_rules_s pattern_action_rules;
- pattern_action_rules.pattern_id = current_rule->pattern_id;
- pattern_action_rules.action = current_rule->action;
- pattern_action_rules.rule_id_list = NULL;
-
- const int res = privacy_guard_client_foreach_dlp_rules(getuid(), PRIV_GUARD_DLP_PROFILE_CUSTOM,
- _get_rules_by_pattern_action_cb, &pattern_action_rules);
- if (PRIV_GUARD_ERROR_SUCCESS != res) {
- LOGE("privacy_guard_client_foreach_dlp_rules() failed. Error=%d", res);
- return false;
- }
-
- bool deleted = false;
- const GList *l;
- for (l = pattern_action_rules.rule_id_list; l != NULL; l = l->next) {
- const int rule_id = GPOINTER_TO_INT(l->data);
- const int res = privacy_guard_client_delete_dlp_custom_rule(rule_id);
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- LOGD("Rule %d deleted", rule_id);
- deleted = true;
- } else
- LOGE("Failed to delete rule %d. Error=%d", rule_id, res);
- }
-
- return deleted;
-}
-
-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 (is_empty(data->pattern_name)) {
- LOGE("Pattern %d not found in database", data->current_rule.pattern_id);
- strncpy(data->pattern_name, "(null)", LEN_PATTERN);
- }
-}
-
-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;
- itc->func.text_get = func_text_get;
- Elm_Object_Item *it = elm_genlist_item_append(genlist, itc, data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
- elm_genlist_item_class_free(itc);
-}
-
-static void set_current_rule(rule_detailed_view_data_s *data, const get_custom_rule_s *rule)
-{
- data->current_rule.id = rule->id;
- data->current_rule.action = rule->action;
- data->current_rule.pattern_id = rule->pattern_id;
- strncpy(data->current_rule.name, rule->name, LEN_NAME);
- data->current_rule.name[LEN_NAME - 1] = '\0';
- strncpy(data->current_rule.description, rule->description, LEN_DESCRIPTION);
- data->current_rule.description[LEN_DESCRIPTION - 1] = '\0';
- data->current_rule.leaks_count = rule->leaks_count;
- strncpy(data->current_rule.application_id, rule->application_id, LEN_APPLICATION_ID);
- data->current_rule.application_id[LEN_APPLICATION_ID - 1] = '\0';
-}
-
-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);
- evas_object_size_hint_align_set(rule_details_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_genlist_mode_set(rule_details_genlist, ELM_LIST_COMPRESS);
- elm_genlist_select_mode_set(rule_details_genlist, ELM_OBJECT_SELECT_MODE_NONE);
- elm_object_style_set(rule_details_genlist, "default");
- rule_detailed_view_data.rule_details_genlist = rule_details_genlist;
- /* add header (rule name and description) to genlist */
- add_rule_item_to_genlist(rule_details_genlist, &(rule_detailed_view_data.current_rule), "multiline", _gl_rule_header_text_get_cb);
- /* add details separator to genlist */
- add_rule_item_to_genlist(rule_details_genlist, NULL, "group_index", _gl_group_rule_details_text_get_cb);
- /* add rule pattern to genlist */
- add_rule_item_to_genlist(rule_details_genlist, &rule_detailed_view_data, "multiline", _gl_rule_pattern_text_get_cb);
-
- evas_object_show(rule_details_genlist);
-}
-
-void update_privacy_dlp_rule_detailed_view(void *rule_detailed_view_data, const int pattern_id, const char *rule_name, const char *rule_description)
-{
- rule_detailed_view_data_s *data = rule_detailed_view_data;
-
- // update current rule and pattern
- data->current_rule.pattern_id = pattern_id;
- strncpy(data->current_rule.name, rule_name, LEN_NAME);
- data->current_rule.name[LEN_NAME - 1] = '\0';
- strncpy(data->current_rule.description, rule_description, LEN_DESCRIPTION);
- data->current_rule.description[LEN_DESCRIPTION - 1] = '\0';
- set_current_pattern_name(data);
-
- // update view components
- elm_genlist_realized_items_update(data->rule_details_genlist);
-}
-
-void create_privacy_dlp_rule_detailed_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, get_custom_rule_s *current_rule, const dlp_profile_s *config, void *rule_list_data)
-{
- if (NULL == ad || NULL == current_rule || NULL == config) {
- LOGE("Invalid parameter");
- return;
- }
-
- rule_detailed_view_data.ad = ad;
- rule_detailed_view_data.rule_list_data = rule_list_data;
- rule_detailed_view_data.ctxpopup = NULL;
- rule_detailed_view_data.delete_popup = NULL;
- rule_detailed_view_data.pop_to_nf_it = pop_to_nf_it;
-
- set_current_rule(&rule_detailed_view_data, current_rule);
- set_current_pattern_name(&rule_detailed_view_data);
-
- create_rule_detailed_view_components(&rule_detailed_view_data);
-
- Elm_Object_Item *nf_it = elm_naviframe_item_push(
- rule_detailed_view_data.ad->nf,
- dgettext("privacy-setting", PRIVACY_MENU_DLP_RULE_DETAIL_TITLE),
- common_back_btn_add(rule_detailed_view_data.ad),
- NULL,
- rule_detailed_view_data.rule_details_genlist,
- NULL);
-
- if (PRIV_GUARD_DLP_PROFILE_CUSTOM == config->profile)
- /* Register the Menu key event callback */
- eext_object_event_callback_add(rule_detailed_view_data.rule_details_genlist, EEXT_CALLBACK_MORE,
- _rule_detailed_view_menu_button_cb, &rule_detailed_view_data);
-
- /* set callback to genlist item pop event */
- elm_naviframe_item_pop_cb_set(nf_it, _rule_detailed_view_nf_pop_cb, &rule_detailed_view_data);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_rule_edit_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_edit_field.h"
-#include "common_utils.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-
-typedef struct {
- struct app_data_s *ad;
- GList *pattern_list;
- GList *pattern_ids_in_use_list;
- dlp_profile_s *config;
- const get_custom_rule_s *current_rule;
- get_custom_rule_s edited_rule;
- const GList *app_list;
- void *rule_list_data;
- void *rule_detailed_view_data;
- Elm_Object_Item *pop_to_nf_it;
- dlp_edit_field *name_edit_field;
- dlp_edit_field *description_edit_field;
- Evas_Object *pattern_hoversel;
- Evas_Object *done_button;
- Evas_Object *next_button;
-} rule_edit_data_s;
-
-static rule_edit_data_s rule_edit_data = {
- .ad = NULL,
- .pattern_list = NULL,
- .pattern_ids_in_use_list = NULL,
- .config = NULL,
- .current_rule = NULL,
- .app_list = NULL,
- .rule_list_data = NULL,
- .pop_to_nf_it = NULL,
- .name_edit_field = NULL,
- .description_edit_field = NULL,
- .pattern_hoversel = NULL,
- .done_button = NULL
-};
-static get_pattern_s *current_pattern = NULL;
-
-#define CUSTOM_PATTERN_ITEM_ID -1
-
-get_pattern_s *create_pattern(
- int id,
- const char *pattern,
- const char *name,
- const char *description,
- PgDlpPatternType type,
- const char *category,
- bool undeletable,
- int leaks_count);
-static void set_state_of_done_button(rule_edit_data_s *red);
-
-static bool _rule_edit_get_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)
-{
- 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_prepend(red->pattern_list, dlp_pattern);
-
- return true;
-}
-
-static void _rule_edit_pattern_item_cb(void *data, Evas_Object *obj, void *event_info)
-{
- get_pattern_s *dlp_pattern = data;
- if (CUSTOM_PATTERN_ITEM_ID == dlp_pattern->id) {
- create_privacy_dlp_pattern_create_view(rule_edit_data.ad, &rule_edit_data, NULL);
- } else {
- current_pattern = dlp_pattern;
- elm_object_text_set(obj, current_pattern->name);
- }
-}
-
-static void _rule_edit_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_edit_data_s *red = data;
- elm_naviframe_item_pop(red->ad->nf);
-}
-
-static Eina_Bool _rule_edit_nf_pop_cb(void *data, Evas_Object* obj)
-{
- rule_edit_data_s *red = data;
- g_list_free_full(red->pattern_list, free_dlp_pattern);
- red->pattern_list = NULL;
- free_edit_field(red->name_edit_field);
- free_edit_field(red->description_edit_field);
- return EINA_TRUE;
-}
-
-static void _rule_edit_done_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_edit_data_s *red = data;
-
- char name[LEN_NAME];
- strncpy(name, get_text_from_edit_field(red->name_edit_field), LEN_NAME);
- left_trim(name, LEN_NAME);
- name[LEN_NAME - 1] = '\0';
-
- char description[LEN_DESCRIPTION];
- strncpy(description, get_text_from_edit_field(red->description_edit_field), LEN_DESCRIPTION);
- left_trim(description, LEN_DESCRIPTION);
- description[LEN_DESCRIPTION - 1] = '\0';
-
- const int pattern_id = current_pattern->id;
-
- if (NULL != red->app_list) {
- bool rule_created = false;
- const GList *l;
-
- for (l = red->app_list; l != NULL; l = l->next) {
- const application_item_s *app_item = l->data;
- if (!app_item->is_checked)
- continue;
-
- const char *app_id = (SELECT_ALL_APPS_ITEM_ID == app_item->id) ? "" : app_item->id;
-
- const int res = privacy_guard_client_add_dlp_custom_rule(getuid(), PRIV_GUARD_DLP_ACTION_ALLOW, pattern_id, name, description, app_id);
- if (PRIV_GUARD_ERROR_SUCCESS == res) {
- LOGI("created new custom rule: name=%s, description=%s, pattern_id=%d, app_id=%s", name, description, pattern_id, app_id);
- rule_created = true;
- } else {
- LOGE("privacy_guard_client_add_dlp_custom_rule() failed. Error=%d", res);
- }
-
- if (SELECT_ALL_APPS_ITEM_ID == app_item->id)
- break;
- }
-
- if (rule_created) {
- if (NULL == red->config) {
- show_toast_notification(dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CUSTOM_RULE_CREATED_MESSAGE), red->ad->win);
- } else {
- // Update profile
- red->config->profile = PRIV_GUARD_DLP_PROFILE_CUSTOM;
- const int set_prof_res = privacy_guard_client_set_dlp_profile(getuid(), red->config);
- if (PRIV_GUARD_ERROR_SUCCESS == set_prof_res) {
- // Refresh main menu to update new profile value
- elm_genlist_realized_items_update(elm_object_item_part_content_get(red->pop_to_nf_it, "default"));
- show_toast_notification(dgettext("privacy-setting", PRIVACY_MENU_DLP_CUSTOM_PROTECTION_MODE_APPLIED), red->ad->win);
- } else {
- LOGE("privacy_guard_client_set_dlp_profile() failed. Error=%d", set_prof_res);
- }
- }
- }
- } else if (NULL != red->current_rule) {
- const int res = privacy_guard_client_update_dlp_custom_rule(
- red->current_rule->id,
- red->current_rule->action,
- pattern_id,
- name,
- description,
- red->current_rule->application_id);
- if (PRIV_GUARD_ERROR_SUCCESS != res)
- LOGE("privacy_guard_client_update_dlp_custom_rule() failed. Error=%d", res);
- }
-
- if (NULL != red->pop_to_nf_it)
- elm_naviframe_item_pop_to(red->pop_to_nf_it);
- else
- elm_naviframe_item_pop(red->ad->nf);
-
- if (NULL != red->rule_list_data)
- update_privacy_dlp_rules_list_view(red->rule_list_data);
- else if (NULL != red->rule_detailed_view_data)
- update_privacy_dlp_rule_detailed_view(red->rule_detailed_view_data, pattern_id, name, description);
- else
- create_privacy_dlp_reports_rules_and_patterns_view(red->ad, red->config);
-}
-
-static void _rule_edit_next_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_edit_data_s *red = data;
-
- red->edited_rule.id = red->current_rule->id;
- red->edited_rule.pattern_id = current_pattern->id;
-
- strncpy(red->edited_rule.pattern, elm_object_text_get(red->pattern_hoversel), LEN_PATTERN);
- red->edited_rule.pattern[LEN_PATTERN - 1] = '\0';
-
- strncpy(red->edited_rule.name, get_text_from_edit_field(red->name_edit_field), LEN_NAME);
- left_trim(red->edited_rule.name, LEN_NAME);
- red->edited_rule.name[LEN_NAME - 1] = '\0';
-
- strncpy(red->edited_rule.description, get_text_from_edit_field(red->description_edit_field), LEN_DESCRIPTION);
- left_trim(red->edited_rule.description, LEN_DESCRIPTION);
- red->edited_rule.description[LEN_DESCRIPTION - 1] = '\0';
-
- strncpy(red->edited_rule.application_id, red->current_rule->application_id, LEN_APPLICATION_ID);
- red->edited_rule.application_id[LEN_APPLICATION_ID - 1] = '\0';
-
- red->edited_rule.leaks_count = red->current_rule->leaks_count;
-
- create_privacy_dlp_choose_apps_view(red->ad, red->pop_to_nf_it, NULL, NULL, red->rule_list_data, &red->edited_rule, red->current_rule);
-}
-
-static void _rule_edit_field_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- rule_edit_data_s *red = data;
- set_state_of_done_button(red);
-}
-
-get_pattern_s *create_pattern(
- int id,
- const char *pattern,
- const char *name,
- const char *description,
- PgDlpPatternType type,
- const char *category,
- bool undeletable,
- int leaks_count)
-{
- 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;
-
- return dlp_pattern;
-}
-
-static void set_state_of_done_button(rule_edit_data_s *red)
-{
- const Eina_Bool disable = is_valid_rule(
- get_text_from_edit_field(red->name_edit_field),
- get_text_from_edit_field(red->description_edit_field),
- current_pattern) ? EINA_FALSE : EINA_TRUE;
- Evas_Object *button = (NULL != red->done_button) ? red->done_button : red->next_button;
- elm_object_disabled_set(button, disable);
-}
-
-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);
- elm_hoversel_hover_parent_set(hoversel, rule_grid);
-
- GList* l;
- /* Append patterns to hoversel */
- for (l = data->pattern_list; l != NULL; l = l->next) {
- get_pattern_s *dlp_pattern = l->data;
- Elm_Object_Item *item = elm_hoversel_item_add(hoversel, dlp_pattern->name, NULL, ELM_ICON_NONE, _rule_edit_pattern_item_cb, dlp_pattern);
- if (NULL != data->current_rule && data->current_rule->pattern_id == dlp_pattern->id) {
- current_pattern = dlp_pattern;
- elm_object_text_set(hoversel, current_pattern->name);
- } else {
- /* check if pattern is already in use */
- 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 && is_empty(hoversel_text)) {
- current_pattern = dlp_pattern;
- elm_object_text_set(hoversel, current_pattern->name);
- }
- } else {
- /* if pattern is already in use, disable the item */
- elm_object_item_disabled_set(item, EINA_TRUE);
- }
- }
- }
-
- elm_grid_pack(rule_grid, hoversel, col, row, col_span, row_span);
- evas_object_show(hoversel);
-
- return hoversel;
-}
-
-void update_privacy_dlp_rule_edit_view(void *rule_edit_data, const char *pattern, const PgDlpPatternType pattern_type, const bool undeletable)
-{
- if (NULL == rule_edit_data || NULL == pattern) {
- LOGD("Invalid parameter");
- return;
- }
-
- rule_edit_data_s *data = rule_edit_data;
-
- if (!elm_hoversel_expanded_get(data->pattern_hoversel))
- elm_hoversel_hover_end(data->pattern_hoversel);
-
- elm_hoversel_clear(data->pattern_hoversel);
-
- g_list_free_full(data->pattern_list, free_dlp_pattern);
- data->pattern_list = NULL;
-
- /* Get dlp custom patterns from privacy guard */
- const int res = privacy_guard_client_foreach_dlp_patterns(_rule_edit_get_patterns_cb, data);
- 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_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);
-
- set_state_of_done_button(data);
-}
-
-/**
- * @brief Displays the Rule Create/Edit view
- * @param[in] ad the appliation data
- * @param[in] pop_to_nf_it the view to pop to after user creates a new rule
- * @param[in] config the user's configuration
- * @param[in] current_rule rule to be edited. If NULL, a new rule will be created
- * @param[in] app_list list of apps to which the new rule will be applied
- * @param[in] rule_list_data pointer to a dlp_rule_list_data_s. May be NULL
- * @param[in] rule_detailed_view_data pointer to a rule_detailed_view_data_s. May be NULL
-*/
-void create_privacy_dlp_rule_edit_view(struct app_data_s *ad, Elm_Object_Item *pop_to_nf_it, dlp_profile_s *config, const get_custom_rule_s *current_rule, const GList *app_list, void *rule_list_data, void *rule_detailed_view_data)
-{
- if (NULL == ad) {
- LOGE("Invalid parameter");
- return;
- }
-
- rule_edit_data.ad = ad;
- g_list_free_full(rule_edit_data.pattern_list, free_dlp_pattern);
- rule_edit_data.pattern_list = NULL;
- g_list_free(rule_edit_data.pattern_ids_in_use_list);
- rule_edit_data.pattern_ids_in_use_list = NULL;
- rule_edit_data.config = config;
- rule_edit_data.current_rule = current_rule;
- rule_edit_data.app_list = app_list;
- rule_edit_data.rule_list_data = rule_list_data;
- rule_edit_data.rule_detailed_view_data = rule_detailed_view_data;
- rule_edit_data.pop_to_nf_it = pop_to_nf_it;
- rule_edit_data.name_edit_field = NULL;
- rule_edit_data.description_edit_field = NULL;
- rule_edit_data.pattern_hoversel = NULL;
- rule_edit_data.done_button = NULL;
- rule_edit_data.next_button = NULL;
-
- current_pattern = NULL;
-
- const bool got_patterns = get_pattern_ids_in_use_list(&(rule_edit_data.pattern_ids_in_use_list));
- log_if(!got_patterns, 1, "get_pattern_ids_in_use_list() failed");
-
- /* Get dlp custom patterns from privacy guard */
- const int res = privacy_guard_client_foreach_dlp_patterns(_rule_edit_get_patterns_cb, &rule_edit_data);
- 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_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);
-
- Evas_Object *rule_grid = elm_grid_add(ad->nf);
- elm_grid_size_set(rule_grid, 100, 10);
-
- elm_object_content_set(bg, rule_grid);
-
- const int col1 = 5;
- const int col2 = 35;
- const int col_span1 = 34;
- const int col_span2 = 65;
- int row = 0;
- const int row_span = 1;
-
- static dlp_edit_field_changed_cb_s edit_field_changed_cb_data;
- edit_field_changed_cb_data.changed_cb = _rule_edit_field_changed_cb;
- edit_field_changed_cb_data.data = &rule_edit_data;
-
- /* add rule name fields to grid */
- static const Elm_Entry_Filter_Limit_Size name_limit_size = { .max_char_count = 0, .max_byte_count = LEN_NAME - 1 };
- add_edit_field_to_grid(rule_grid, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_NAME), false, NULL, col1, row, col_span1, row_span, NULL);
- rule_edit_data.name_edit_field = add_edit_field_to_grid(rule_grid, NULL == current_rule ? "" : current_rule->name, true, &name_limit_size, col2, row++, col_span2, row_span, &edit_field_changed_cb_data);
-
- /* add rule description fields to grid */
- static const Elm_Entry_Filter_Limit_Size description_limit_size = { .max_char_count = 0, .max_byte_count = LEN_DESCRIPTION - 1 };
- add_edit_field_to_grid(rule_grid, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DESCRIPTION), false, NULL, col1, row, col_span1, row_span, NULL);
- rule_edit_data.description_edit_field = add_edit_field_to_grid(rule_grid, NULL == current_rule ? "" : current_rule->description, true, &description_limit_size, col2, row++, col_span2, row_span, &edit_field_changed_cb_data);
-
- /* add rule pattern fields to grid */
- add_edit_field_to_grid(rule_grid, dgettext("privacy-setting", PRIVACY_MENU_DLP_RULES_N_PATTERNS_TITLE_PATTERNS), false, NULL, col1, row, col_span1, row_span, NULL);
- rule_edit_data.pattern_hoversel = add_pattern_hoversel_to_grid(rule_grid, &rule_edit_data, col2 + 4, row++, col_span2 - 8, row_span);
-
- evas_object_show(rule_grid);
-
- Elm_Object_Item *nf_it = elm_naviframe_item_push(
- ad->nf,
- NULL == current_rule ? dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CREATE) : dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_EDIT),
- NULL,
- NULL,
- bg,
- NULL);
-
- /* set callback to genlist item pop event */
- elm_naviframe_item_pop_cb_set(nf_it, _rule_edit_nf_pop_cb, &rule_edit_data);
- /* add a cancel button to naviframe title bar */
- common_naviframe_btn_add(ad->nf, nf_it, true, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CANCEL), _rule_edit_cancel_cb, &rule_edit_data);
- if (NULL == current_rule) {
- /* add a done button to naviframe title bar */
- rule_edit_data.done_button = common_naviframe_btn_add(ad->nf, nf_it, false, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DONE), _rule_edit_done_cb, &rule_edit_data);
- elm_object_disabled_set(rule_edit_data.done_button, EINA_TRUE);
- } else
- /* add a next button to naviframe title bar */
- rule_edit_data.next_button = common_naviframe_btn_add(ad->nf, nf_it, false, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_NEXT), _rule_edit_next_cb, &rule_edit_data);
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_dlp_rule_list_view.c
- * @version 1.0
- * @brief
- */
-
-#include "common_utils.h"
-#include "common_ctxpopup.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-#include <privacy_guard_client.h>
-#include <app_manager.h>
-#include <efl_extension.h>
-
-#define ACTION_TEXT_LEN 128
-
-typedef struct {
- struct app_data_s *ad;
- GList *rule_list;
- rule_action_filter action;
- const dlp_profile_s *config;
- Elm_Object_Item *pop_to_nf_it;
- Evas_Object *view_parent;
- Evas_Object *rule_box;
- Evas_Object *rule_genlist;
- Evas_Object *rule_ctxpopup;
-} dlp_rule_list_data_s;
-
-static dlp_rule_list_data_s rule_list_data = {
- .ad = NULL,
- .rule_list = NULL,
- .action = ACTION_ALL,
- .config = NULL,
- .view_parent = NULL,
- .rule_box = NULL,
- .rule_genlist = NULL,
- .rule_ctxpopup = NULL
-};
-
-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 = g_slice_new(get_custom_rule_s);
-
- rule->id = id;
- rule->action = action;
- rule->pattern_id = pattern_id;
- strncpy(rule->name, name, LEN_NAME);
- rule->name[LEN_NAME - 1] = '\0';
- strncpy(rule->description, description, LEN_DESCRIPTION);
- rule->description[LEN_DESCRIPTION - 1] = '\0';
- rule->leaks_count = leaks_count;
- strncpy(rule->application_id, application_id, LEN_APPLICATION_ID);
- rule->application_id[LEN_APPLICATION_ID - 1] = '\0';
-
- GList **dlp_rules_list = user_data;
- *dlp_rules_list = g_list_prepend(*dlp_rules_list, rule);
-
- return true;
-}
-
-static gint _compare_rules_pattern_id_action_cb(gconstpointer lhs, gconstpointer rhs)
-{
- const get_custom_rule_s *lhs_rule = lhs;
- const get_custom_rule_s *rhs_rule = rhs;
-
- if (lhs_rule->pattern_id < rhs_rule->pattern_id)
- return -1;
-
- if (lhs_rule->pattern_id > rhs_rule->pattern_id)
- return 1;
-
- // note that here we already know that
- // lhs_rule->pattern_id == rhs_rule->pattern_id,
- // so we compare the rules actions
- if (lhs_rule->action == rhs_rule->action)
- return 0;
-
- return (lhs_rule->action < rhs_rule->action) ? -1 : 1;
-}
-
-static void _rule_genlist_del_cb(void *data, Evas_Object *obj)
-{
- g_slice_free(dlp_item_rule_s, data);
-}
-
-static char* _rule_genlist_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- dlp_item_rule_s *rule = (dlp_item_rule_s *)data;
-
- if (strcmp(part, "elm.text") == 0)
- return strdup(rule->data->name);
-
- if (strcmp(part, "elm.text.multiline") == 0) {
- if (rule == NULL)
- return strdup("");
-
- return strdup(rule->data->description);
- }
-
- return NULL;
-}
-
-static void _rule_list_view_create_rule_cb(void *data, Evas_Object *obj, void *event_info)
-{
- dlp_rule_list_data_s *rld = data;
- elm_ctxpopup_dismiss(rld->rule_ctxpopup);
- create_privacy_dlp_rule_create_view(rld->ad, rld->pop_to_nf_it, NULL, rld);
-}
-
-static void _rule_list_view_delete_rules_cb(void *data, Evas_Object *obj, void *event_info)
-{
- dlp_rule_list_data_s *rld = data;
- elm_ctxpopup_dismiss(rld->rule_ctxpopup);
- create_privacy_dlp_rule_delete_view(rld->ad, rld->rule_list, rld);
-}
-
-static void _rule_list_menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected item */
- Elm_Object_Item *ei = event_info;
- dlp_item_rule_s *item = elm_object_item_data_get(ei);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- dlp_rule_list_data_s *view_data = (dlp_rule_list_data_s *)data;
- create_privacy_dlp_rule_detailed_view(view_data->ad, view_data->pop_to_nf_it, item->data, view_data->config, view_data);
-}
-
-static void _rule_list_view_menu_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
- dlp_rule_list_data_s *rld = data;
-
- 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);
-
- if (!rld->rule_ctxpopup) {
- rld->rule_ctxpopup = create_ctxpop(rld->ad);
- elm_ctxpopup_item_append(rld->rule_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_CREATE), NULL, _rule_list_view_create_rule_cb, data);
- elm_ctxpopup_item_append(rld->rule_ctxpopup, dgettext("privacy-setting", PRIVACY_MENU_DLP_CREATE_RULES_MENU_DELETE), NULL, _rule_list_view_delete_rules_cb, data);
- evas_object_smart_callback_add(rld->rule_ctxpopup, "dismissed", _rule_list_view_menu_dismissed_cb, rld);
- } else {
- evas_object_show(rld->rule_ctxpopup);
- }
-}
-
-static void _rule_list_view_dismiss_menu_cb(void *data, Evas_Object *obj, void *event_info)
-{
- dlp_rule_list_data_s *rld = data;
- elm_ctxpopup_dismiss(rld->rule_ctxpopup);
-}
-
-static void _rule_list_view_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- dlp_rule_list_data_s *rld = data;
-
- 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);
-}
-
-static int _compare_rule_list_menu_item_cb(const void *lhs, const void* rhs)
-{
- const get_custom_rule_s *lhs_rule = ((const dlp_item_rule_s *)elm_object_item_data_get(lhs))->data;
- const get_custom_rule_s *rhs_rule = ((const dlp_item_rule_s *)elm_object_item_data_get(rhs))->data;
- return strncasecmp(lhs_rule->name, rhs_rule->name, LEN_NAME);
-}
-
-void delete_rule_list()
-{
- if (NULL == rule_list_data.rule_list)
- return;
-
- g_list_free_full(rule_list_data.rule_list, free_dlp_rule);
- rule_list_data.rule_list = NULL;
-}
-
-static int populate_genlist(dlp_rule_list_data_s *data)
-{
- int rule_count = 0;
-
- if (NULL != data->rule_list) {
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- itc->item_style = "multiline";
- itc->func.text_get = _rule_genlist_text_get_cb;
- itc->func.del = _rule_genlist_del_cb;
-
- Elm_Object_Item *it = NULL;
- GList* l = data->rule_list;
- /* Append rules as genlist item */
- while (l != NULL) {
- 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 {
- l = l->next;
- }
- }
- elm_genlist_item_class_free(itc);
- }
-
- return rule_count;
-}
-
-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);
- evas_object_size_hint_align_set(data->rule_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
- if (populate_genlist(data) == 0) {
- /* rules list is empty */
- elm_layout_theme_set(data->rule_genlist, "layout", "nocontents", "default");
- } else {
- elm_genlist_item_show(elm_genlist_first_item_get(data->rule_genlist), ELM_GENLIST_ITEM_SCROLLTO_IN);
- }
- evas_object_show(data->rule_genlist);
- elm_box_pack_end(data->rule_box, data->rule_genlist);
-}
-
-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);
- evas_object_show(data->rule_box);
-
- create_rule_genlist(data);
- elm_object_part_content_set(data->view_parent, "elm.swallow.content", data->rule_box);
-
- if (PRIV_GUARD_DLP_PROFILE_CUSTOM == data->config->profile)
- /* Register the Menu key event callback */
- eext_object_event_callback_add(data->rule_box, EEXT_CALLBACK_MORE, _rule_list_view_menu_button_cb, data);
-}
-
-static void create_rule_list(const PgDlpProfile profile, GList **rule_list)
-{
- delete_rule_list();
-
- /* Get dlp leak logs from privacy guard */
- const int res = privacy_guard_client_foreach_dlp_rules(getuid(), profile, _pg_dlp_rules_cb, rule_list);
- log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_dlp_custom_rules() is failed. [%d]", res);
-
- /* sort rules by pattern id and action */
- rule_list_data.rule_list = g_list_sort(rule_list_data.rule_list, _compare_rules_pattern_id_action_cb);
-}
-
-void update_privacy_dlp_rules_list_view(void *rule_list_data)
-{
- if (NULL == rule_list_data) {
- LOGE("Invalid parameter");
- return;
- }
-
- dlp_rule_list_data_s *rld = rule_list_data;
-
- create_rule_list(rld->config->profile, &(rld->rule_list));
-
- elm_box_unpack(rld->rule_box, rld->rule_genlist);
- evas_object_del(rld->rule_genlist);
- create_rule_genlist(rld);
-}
-
-void create_privacy_dlp_rules_list_view(struct app_data_s *ad, Evas_Object *parent, Elm_Object_Item *pop_to_nf_it, const dlp_profile_s *config)
-{
- rule_list_data.ad = ad;
-
- rule_list_data.config = config;
- rule_list_data.view_parent = parent;
- rule_list_data.pop_to_nf_it = pop_to_nf_it;
-
- create_rule_list(rule_list_data.config->profile, &rule_list_data.rule_list);
-
- create_rule_list_components(&rule_list_data);
-}
+++ /dev/null
-/**
- * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_guard_list_view.c
- * @author Kyoungyong Lee (k.y.lee@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#include <efl_extension.h>
-#include "common_utils.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-#include "privilege_info.h"
-
-static char* gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- char *privacy_display = NULL;
- char *privacy_name = (char *) data;
- privilege_info_get_privacy_display(privacy_name, &privacy_display);
- lreturn_if(!strcmp(part, "elm.text"), , privacy_display, "privacy = %s", privacy_name);
-
- return "FAIL";
-}
-static void gl_del_cb(void *data, Evas_Object *obj)
-{
- /* Unrealized callback can be called after this. */
- /* Accessing item_data_s can be dangerous on unrealized callback. */
- if (!data)
- free(data);
-}
-
-static void _privacy_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- /* Get selected privacy */
- Elm_Object_Item *ei = event_info;
- item_data_s *selected_text = elm_object_item_data_get(ei);
- LOGD("%s is selected", (char*)selected_text);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-
- struct app_data_s *ad = (struct app_data_s *)data;
- return_if(ad == NULL, , , "ad is null");
-
- ad->privacy = (char *)selected_text;
-
- create_privacy_guard_package_list_view(ad);
-}
-
-void create_privacy_guard_list_view(struct app_data_s *ad)
-{
- Evas_Object *genlist = common_genlist_add(ad->nf);
-
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- itc->item_style = "default";
- itc->func.text_get = gl_text_get_cb;
- itc->func.del = gl_del_cb;
- 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");
- }
- elm_genlist_item_class_free(itc);
- evas_object_show(genlist);
-
- /* Change "Privacy Setting" to proper DID : use dgettext() */
- Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->nf, dgettext("privacy-setting", PRIVACY_MENU_MONITOR), common_back_btn_add(ad), NULL, genlist, NULL);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
-
+++ /dev/null
-/**
- * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_guard_package_list_view.c
- * @author Kyoungyong Lee (k.y.lee@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#include <efl_extension.h>
-#include <privilege_info.h>
-#include <glib.h>
-#include <pkgmgr-info.h>
-#include <tzplatform_config.h>
-#include <privacy_guard_client.h>
-#include "common_utils.h"
-#include "privacy_setting.h"
-#include "privacy_view.h"
-
-#define DEFAULT_ICON_PATH _TZ_SYS_RO_APP"/org.tizen.privacy-setting/res/icon/default.png"
-#define SUCCESS 1
-#define FAIL 0
-
-typedef struct pg_data_list_struct {
- pg_data_s *pg_data;
- struct pg_data_list_struct *next;
-} pg_data_list;
-
-
-static pg_item_data_s **item_list;
-static int is_last;
-static int len;
-static pg_data_list *start;
-static pg_data_list *cur;
-
-int init_pg_data_list(void)
-{
- start = (pg_data_list *)malloc(sizeof(pg_data_list) * 1);
- if (start == NULL) {
- LOGE("Failed to allocate memory");
- return FAIL;
- }
-
- start->next = NULL;
- cur = start;
-
- return SUCCESS;
-}
-
-int add_pg_data(const char *package_id, const int count, const time_t time, const int monitor_policy)
-{
- pg_data_list *node = (pg_data_list *)malloc(sizeof(pg_data_list) * 1);
- if (node == NULL) {
- LOGE("Failed to allocate memory");
- return FAIL;
- }
-
- node->pg_data = (pg_data_s *)malloc(sizeof(pg_data_s));
- if (node->pg_data == NULL) {
- LOGE("Failed to allocate memory");
- free(node);
- return FAIL;
- }
-
- node->next = NULL;
-
- node->pg_data->pkg_id = strdup(package_id);
- if (node->pg_data->pkg_id == NULL) {
- LOGE("Failed to allocate memory");
- free(node->pg_data);
- free(node);
- return FAIL;
- }
-
- node->pg_data->count = count;
- node->pg_data->time = time;
- node->pg_data->monitor_policy = monitor_policy;
-
- cur->next = node;
- cur = node;
- len++;
-
- return SUCCESS;
-}
-
-static void free_pg_data(pg_data_list *node, pg_data_list *next)
-{
- if (next != NULL)
- free_pg_data(next, next->next);
-
- if (node == start) {
- if (start != NULL) {
- free(start);
- start = NULL;
- }
- return;
- } else {
-
- if (node != NULL && node->pg_data != NULL && node->pg_data->pkg_id != NULL)
- free(node->pg_data->pkg_id);
-
- if (node != NULL && node->pg_data != NULL)
- free(node->pg_data);
-
- if (node != NULL)
- free(node);
- }
-}
-
-void free_pg_data_list(void)
-{
- free_pg_data(start, start->next);
-}
-
-static void free_item(pg_item_data_s *data, int *is_description)
-{
- if (data != NULL) {
- if (data->label != NULL) {
- free(data->label);
-
- if (*is_description == 0) {
- *is_description = 1;
- return;
- }
- }
- if (data->pkg_id != NULL)
- free(data->pkg_id);
-
- if (data->privacy_id != NULL)
- free(data->privacy_id);
-
- if (data->icon != NULL)
- free(data->icon);
-
- if (data->description != NULL)
- free(data->description);
- }
-
-}
-
-static int _create_privacy_guard_item_list(void)
-{
- int j = 0;
- item_list = (pg_item_data_s **)malloc(sizeof(pg_item_data_s *) * len);
- if (item_list == NULL) {
- LOGE("Failed to allocate memory");
- return FAIL;
- }
-
- for (j = 0; j < len; j++) {
- item_list[j] = (pg_item_data_s *)malloc(sizeof(pg_item_data_s));
- if (item_list[j] == NULL) {
- LOGE("Failed to allocate memory");
- return FAIL;
- }
- }
-
- return SUCCESS;
-}
-
-static void _free_privacy_guard_item_list(void)
-{
-
- int is_description = 0;
- int j = 0;
-
- for (j = 0; j < len; j++) {
- free_item(item_list[j], &is_description);
- free(item_list[j]);
- }
-
- free(item_list);
- item_list = NULL;
-}
-
-static void _gl_del_cb(void *data, Evas_Object *obj)
-{
- is_last++;
- if (start != NULL) {
- free_pg_data_list();
- start = NULL;
- cur = NULL;
- }
- if (is_last == len) {
- if (item_list != NULL)
- _free_privacy_guard_item_list();
- }
-}
-
-static void _privacy_package_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Elm_Object_Item *ei = event_info;
- pg_item_data_s *id = (pg_item_data_s *)data;
- Eina_Bool status;
-
- status = !id->status;
-
- Evas_Object *check = elm_object_item_part_content_get(ei, "elm.swallow.end");
- elm_check_state_set(check, status);
- evas_object_smart_callback_call(check, "changed", data);
-
- /* Unhighlight selected item */
- elm_genlist_item_selected_set(ei, EINA_FALSE);
-}
-
-static void _privacy_package_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- pg_item_data_s *id = (pg_item_data_s *)data;
-
- LOGD("current policy: [%d]", id->status);
- int res = privacy_guard_client_update_monitor_policy(id->user_id, id->pkg_id, id->privacy_id, !id->status);
- log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_update_monitor_policy() is failed. [%d]", res);
- id->status = !id->status;
- LOGD("changed policy: [%d]", id->status);
-}
-
-static char* _gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- pg_item_data_s *id = data;
- char *ret = NULL;
-
- if (!strcmp(part, "elm.text")) {
- ret = strdup(id->label);
- if (ret == NULL) {
- LOGE("Failed to allocate memory");
- return NULL;
- }
-
- return ret;
- }
-
- if (!strcmp(part, "elm.text.sub") && id->index != 0) {
- if (id->description == NULL)
- return NULL;
-
- ret = strdup(id->description);
- if (ret == NULL) {
- LOGE("Failed to allocate memory");
- return NULL;
- }
-
- return ret;
- }
-
- return NULL;
-}
-
-static Evas_Object* _gl_content_get_cb(void *data, Evas_Object *obj, const char *part)
-{
- pg_item_data_s *id = (pg_item_data_s*)data;
-
- if (id->index == 0)
- return NULL;
-
- if (!strcmp("elm.swallow.icon", part)) {
- Evas_Object *icon;
- icon = elm_image_add(obj);
- elm_image_file_set(icon, id->icon, NULL);
- evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(70), ELM_SCALE_SIZE(70));
-
- return icon;
- }
-
- if (!strcmp(part, "elm.swallow.end")) {
- Evas_Object *check;
- Eina_Bool status = id->status;
- check = elm_check_add(obj);
- elm_object_style_set(check, "on&off");
- elm_check_state_set(check, status);
- evas_object_repeat_events_set(check, EINA_FALSE);
- evas_object_propagate_events_set(check, EINA_FALSE);
- evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(check, "changed", _privacy_package_check_changed_cb, data);
- evas_object_show(check);
-
- return check;
- }
-
- return NULL;
-}
-
-static bool _privacy_package_info_cb(const char *package_id, const int count, const time_t time, const int monitor_policy, void *user_data)
-{
- if (add_pg_data(package_id, count, time, monitor_policy) == FAIL) {
- LOGE("add_pg_data() is failed.");
- return false;
- }
-
- return true;
-}
-
-void create_privacy_guard_package_list_view(struct app_data_s *ad)
-{
- Evas_Object *genlist = NULL;
- is_last = 0;
- len = 1;
-
- if (init_pg_data_list() == FAIL) {
- LOGE("init_pg_data_list() is failed.");
- return;
- }
-
- /* Get privacy guard data (pkg, count, policy) list by a privacy */
- // user ID
- uid_t user_id = getuid();
- // get package_id, count, policy using a privacy
- int res = privacy_guard_client_foreach_package_info_by_privacy_id(user_id, ad->privacy, _privacy_package_info_cb, NULL);
- log_if(res != PRIV_GUARD_ERROR_SUCCESS, 1, "privacy_guard_client_foreach_package_info_by_privacy_id() is failed. [%d]", res);
- // no content in the genlist
- if (start->next == NULL) {
- char* privacy_display = NULL;
- res = privilege_info_get_privacy_display(ad->privacy, &privacy_display);
- log_if(res != PRVMGR_ERR_NONE, 1, "privilege_info_get_privacy_display() is failed. [%d]", res);
-
- genlist = elm_layout_add(ad->nf);
- elm_layout_theme_set(genlist, "layout", "nocontents", "default");
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- elm_object_part_text_set(genlist, "elm.text", dgettext("privacy-setting", "IDS_ST_NPBODY_NO_APPS"));
- char* no_app_string_format = dgettext("privacy-setting", "IDS_ST_BODY_AFTER_YOU_DOWNLOAD_APPS_THAT_USE_PS_THEY_WILL_BE_SHOWN_HERE");
- char no_app_string[256];
- snprintf(no_app_string, sizeof(no_app_string), no_app_string_format, privacy_display);
-
- elm_object_part_text_set(genlist, "elm.help.text", no_app_string);
- elm_layout_signal_emit(genlist, "align.center", "elm");
- } else {
- genlist = common_genlist_add(ad->nf);
- evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
- /* Set itc */
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
-
- itc->item_style = "type1";
- itc->func.content_get = _gl_content_get_cb;
- itc->func.text_get = _gl_text_get_cb;
- itc->func.del = _gl_del_cb;
-
- Elm_Object_Item *it = NULL;
- pg_data_list *l = NULL;
-
- if (_create_privacy_guard_item_list() == FAIL) {
- LOGE("_create_privacy_guard_item_list() is failed.");
- elm_genlist_item_class_free(itc);
- return;
- }
- /* Append guide text to the top of genlist */
- pg_item_data_s *description_item = item_list[0];
- description_item->index = 0;
-
- // first line of the genlist will be filled with a description
- char str_label[256] = {'\0',};
- snprintf(str_label, sizeof(str_label), "<wrap=word><ellipsis=-1.0><font_size=35><color=#A9A9A9FF>%s</color></font_size></ellipsis></wrap>", dgettext("privacy-setting", "IDS_ST_BODY_THE_SELECTED_APPS_WILL_BE_MONITORED_FOR_ANY_ATTEMPTS_TO_VIOLATE_YOUR_PRIVACY"));
- description_item->label = strdup(str_label);
-
- if (description_item->label == NULL) {
- LOGE("Failed to allocate memory");
- elm_genlist_item_class_free(itc);
- return;
- }
- it = elm_genlist_item_append(genlist, itc, description_item, NULL, ELM_GENLIST_ITEM_NONE, _privacy_package_selected_cb, description_item);
- elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-
- /* Append privacy related package as genlist item */
- int idx = 1;
- for (l = start->next; l != NULL; l = l->next) {
- pg_item_data_s *item = item_list[idx];
- pg_data_s *data = l->pg_data;
- char str_temp[256] = {'\0',};
- struct tm timeinfo;
- char *label = NULL;
- char *icon = NULL;
- pkgmgrinfo_pkginfo_h handle;
-
- // index
- item->index = idx++;
-
- // package ID
- item->pkg_id = strdup(data->pkg_id);
- if (item->pkg_id == NULL) {
- LOGE("Failed to allocate memory");
- elm_genlist_item_class_free(itc);
- return;
- }
- // package label
- res = pkgmgrinfo_pkginfo_get_pkginfo(item->pkg_id, &handle);
- if (res != PMINFO_R_OK) {
- LOGE("Failed to operate pkgmgrinfo_pkginfo_get_pkginfo [%d]", res);
- LOGE("So replace the label to package ID");
- label = item->pkg_id;
- } else {
- res = pkgmgrinfo_pkginfo_get_label(handle, &label);
- if (res != PMINFO_R_OK) {
- LOGE("Failed to operate pkgmgrinfo_pkginfo_get_label [%d]", res);
- LOGE("So replace the label to package ID");
- label = item->pkg_id;
- }
- }
-
- // title.. (package label)
- snprintf(str_temp, sizeof(str_temp), "%s", label);
- item->label = strdup(str_temp);
- if (item->label == NULL) {
- LOGE("Failed to allocate memory");
- elm_genlist_item_class_free(itc);
- return;
- }
- // description - e.g.) 25/08/2010 01:30 PM 21 time(s)
- if (data->time > 0) {
- localtime_r(&data->time, &timeinfo);
- char buf[32];
- char str_time[32] = {'\0',};
- LOGD("time: %s", asctime_r(&timeinfo, buf));
- strftime(str_time, 32, "%d/%m/%Y %I:%M %p", &timeinfo);
- char *str_count = dgettext("privacy-setting", "IDS_CLD_BODY_PD_TIMES");
- snprintf(str_temp, sizeof(str_temp), str_count, data->count);
- 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) {
- elm_genlist_item_class_free(itc);
- LOGE("Failed to allocate memory");
- return;
- }
- } else {
- item->description = NULL;
- }
-
- // user ID
- item->user_id = user_id;
-
- // privacy ID
- item->privacy_id = strdup(ad->privacy);
- if (item->privacy_id == NULL) {
- LOGE("Failed to allocate memory");
- elm_genlist_item_class_free(itc);
- return;
- }
- // icon
- res = pkgmgrinfo_pkginfo_get_icon(handle, &icon);
- if (res != PMINFO_R_OK) {
- LOGE("Failed to operate pkgmgrinfo_pkginfo_get_icon [%d]", res);
- LOGE("So replace the icon to the default icon");
- item->icon = strdup(DEFAULT_ICON_PATH);
- if (item->icon == NULL) {
- LOGE("Failed to allocate memory");
- elm_genlist_item_class_free(itc);
- return;
- }
- } else {
- if (EINA_TRUE == ecore_file_exists(icon)) {
- item->icon = strdup(icon);
- if (item->icon == NULL) {
- LOGE("Failed to allocate memory");
- elm_genlist_item_class_free(itc);
- return;
- }
- } else {
- LOGD("The icon is not exist for %s. So replace it to the default icon.", label);
- item->icon = strdup(DEFAULT_ICON_PATH);
- if (item->icon == NULL) {
- LOGE("Failed to allocate memory");
- elm_genlist_item_class_free(itc);
- return;
- }
- }
- }
-
- // status
- item->status = ((data->monitor_policy == 1) ? EINA_TRUE : EINA_FALSE);
-
- pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
-
- // append to the genlist
- it = elm_genlist_item_append(genlist, itc, item, NULL, ELM_GENLIST_ITEM_NONE, _privacy_package_selected_cb, item);
- log_if(it == NULL, 1, "Error in elm_genlist_item_append");
- }
-
- elm_genlist_item_class_free(itc);
- }
-
- evas_object_show(genlist);
-
- /* TODO: change nf_it_title to proper DID : use dgettext() */
- char *privacy_display = NULL;
- int ret = privilege_info_get_privacy_display(ad->privacy, &privacy_display);
- log_if(ret != PRVMGR_ERR_NONE, 1, "privacy_display = %s", privacy_display);
-
- /* Push naviframe item */
- Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->nf, privacy_display, common_back_btn_add(ad), NULL, genlist, NULL);
-
- elm_object_item_domain_text_translatable_set(nf_it, PACKAGE, EINA_TRUE);
-}
if (strstr(selected_text, dgettext("privacy-setting", PRIVACY_MENU_SETTING)) != NULL) {
create_privacy_list_view(ad);
- } else if (strstr(selected_text, dgettext("privacy-setting", PRIVACY_MENU_MONITOR)) != NULL) {/* privacy guard */
- create_privacy_guard_list_view(ad);
- } else if (strstr(selected_text, dgettext("privacy-setting", PRIVACY_MENU_DLP)) != NULL) {/* data leak monitor */
- create_privacy_dlp_menu_view(ad);
} else {
LOGE("selected text = %s, no matching menu", selected_text);
}
/* Set privacy menu list */
privacy_menu_list = NULL;
privacy_menu_list = g_list_append(privacy_menu_list, PRIVACY_MENU_SETTING);
- privacy_menu_list = g_list_append(privacy_menu_list, PRIVACY_MENU_MONITOR);
- privacy_menu_list = g_list_append(privacy_menu_list, PRIVACY_MENU_DLP);
Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
itc->item_style = "default";
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file privacy_view.c
- * @version 1.0
- * @brief
- */
-
-#include "privacy_view.h"
-
-bool filter_rule_by_action(int rule_action, rule_action_filter filter_action)
-{
- switch (filter_action) {
- case ACTION_ALLOW:
- return PRIV_GUARD_DLP_ACTION_ALLOW == rule_action;
- case ACTION_DENY:
- return PRIV_GUARD_DLP_ACTION_DENY == rule_action;
- case ACTION_SANITIZE:
- return PRIV_GUARD_DLP_ACTION_SANITIZE == rule_action;
- default:
- return true; // defaults to ACTION_ALL;
- }
-}
-
-// NOTE: the function below is commented out because only allow actions will be
-// released to Tizen 4.0, so action icons become meaningless.
-//
-// /**
-// * @brief Overlay an image related to the action on top of the application icon
-// * @param[in] icon The icon to be altered
-// * @param[in] action The type of image to be overlaid
-// */
-// void overlay_action_image(Evas_Object *icon, PgDlpAction action)
-// {
-// Evas_Object *img = elm_image_object_get((const Elm_Image *)icon);
-// Eina_Bool has_alpha = evas_object_image_alpha_get(img);
-// unsigned char *ptr = (unsigned char *)evas_object_image_data_get(img, EINA_TRUE);
-// int stride = evas_object_image_stride_get(img);
-// int psize = 3, width, height;
-// int radius, x, y;
-
-// evas_object_image_size_get(img, &width, &height);
-// radius = width / 4;
-// if (height / 4 < radius)
-// radius = height / 4;
-// if (has_alpha) psize = 4;
-// float xcenter = (float)(width - radius);
-// for (y = stride * (height - radius * 2); y < stride * height; y += stride) {
-// float sliceval = (float)radius * sinf(((float)height - 1. - (float)y / (float)stride) / (float)radius * M_PI / 2.);
-// for (x = (int)(xcenter - sliceval + .5) * psize; x < (int)(xcenter + sliceval + .5) * psize; x += psize) {
-// // order is bgra in elm_image
-// switch (action) {
-// case PRIV_GUARD_DLP_ACTION_ALLOW:
-// ptr[y + x] = 0;
-// ptr[y + x + 1] = 255;
-// ptr[y + x + 2] = 0;
-// break;
-// case PRIV_GUARD_DLP_ACTION_DENY:
-// ptr[y + x] = 0;
-// ptr[y + x + 1] = 0;
-// ptr[y + x + 2] = 255;
-// break;
-// case PRIV_GUARD_DLP_ACTION_SANITIZE:
-// ptr[y + x] = 0;
-// ptr[y + x + 1] = 255;
-// ptr[y + x + 2] = 255;
-// break;
-// default:
-// LOGE("Invalid action type");
-// break;
-// }
-// if (has_alpha) ptr[y + x + 3] = 255;
-// }
-// }
-//}
-