Add entry widget and dpm integration 32/66032/1
authoryeji01kim <yeji01.kim@samsung.com>
Fri, 15 Apr 2016 01:24:08 +0000 (10:24 +0900)
committeryeji01kim <yeji01.kim@samsung.com>
Fri, 15 Apr 2016 01:24:08 +0000 (10:24 +0900)
Change-Id: I125eb28a0cd3e8d7283e223b8c2cc44d826e5835
Signed-off-by: yeji01kim <yeji01.kim@samsung.com>
packaging/dpm-toolkit.spec
test-app/CMakeLists.txt
test-app/data/test.xml
test-app/edc_resource/genlist_custom.edc [new file with mode: 0644]
test-app/include/dpm-toolkit.h
test-app/res/org.tizen.dpm-toolkit.edc [new file with mode: 0644]
test-app/src/dpm-toolkit.c
test-app/src/password.c

index 2dde66e..1dcb2f7 100755 (executable)
@@ -19,6 +19,8 @@ BuildRequires: pkgconfig(capi-appfw-application)
 BuildRequires: pkgconfig(efl-extension)
 BuildRequires: pkgconfig(libxml-2.0)
 BuildRequires: pkgconfig(capi-system-system-settings)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(dpm)
 
 %if %{with x}
 BuildRequires: pkgconfig(x11)
@@ -75,6 +77,7 @@ DPM test application
 %manifest test-app/org.tizen.dpm-toolkit.manifest
 %defattr(-,root,root,-)
 %{TZ_SYS_RO_APP}/org.tizen.dpm-toolkit/bin/*
+%{TZ_SYS_RO_APP}/org.tizen.dpm-toolkit/res/*
 %{TZ_SYS_RO_APP}/org.tizen.dpm-toolkit/test.xml
 %{TZ_SYS_RO_PACKAGES}/org.tizen.dpm-toolkit.xml
 %{TZ_SYS_RW_ICONS}/default/small/org.tizen.dpm-toolkit.png
index d3bbee4..d3712fe 100755 (executable)
@@ -29,6 +29,8 @@ PKG_CHECK_MODULES(test_pkgs REQUIRED
        capi-appfw-application
        libxml-2.0
        capi-system-system-settings
+       evas
+       dpm
 )
 
 
@@ -52,9 +54,16 @@ INSTALL(TARGETS ${PKG_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/${PKG_NAME}/bin)
 
 TARGET_LINK_LIBRARIES(${PKG_NAME} ${test_pkgs_LIBRARIES})
 
+#Create edj file
+ADD_CUSTOM_TARGET(org.tizen.dpm-toolkit.edj
+       COMMAND edje_cc -no-save ${CMAKE_CURRENT_SOURCE_DIR}/res/org.tizen.dpm-toolkit.edc
+       ${CMAKE_BINARY_DIR}/org.tizen.dpm-toolkit.edj
+       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/org.tizen.dpm-toolkit.edc)
+
+ADD_DEPENDENCIES(${PACKAGE} org.tizen.dpm-toolkit.edj)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/org.tizen.dpm-toolkit.edj DESTINATION ${CMAKE_INSTALL_PREFIX}/${PKG_NAME}/res)
+
 #Install app data
 INSTALL(FILES res/${PKG_NAME}.png DESTINATION ${CMAKE_DESKTOP_ICON_DIR})
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PKG_NAME}.xml DESTINATION ${CMAKE_APP_SHARE_PACKAGES_DIR})
 INSTALL(FILES data/test.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/${PKG_NAME})
-
-
index 54fc2cf..10d3c28 100755 (executable)
@@ -4,9 +4,11 @@
        <policy-group id="PASSWORD">\r
                <policy id="GET_ALLOW_APP" desc="get allow app" status="ON">\r
                </policy>\r
-               <policy id="SET_ENFORCE_PASSWORD" desc="Enforce Password Change" status="ON">\r
+               <policy id="SET_ENFORCE_PASSWORD" desc="Enforce Password Change" status="ON" entry="ON" default="entry test1">\r
                </policy>\r
-               <policy id="SET_PASSWORD_RECOVERY" desc="Set Password Recovery" status="ON">\r
+               <policy id="SET_PASSWORD_RECOVERY" desc="Set Password Recovery" status="ON" entry="ON" default="entry test2">\r
+               </policy>\r
+               <policy id="SET_PASSWORD_QUALITY" desc="Set Password Quality" status="ON" username="owner" quality="DPM_PASSWORD_QUALITY_ALPHANUMERIC">\r
                </policy>\r
        </policy-group>\r
 \r
diff --git a/test-app/edc_resource/genlist_custom.edc b/test-app/edc_resource/genlist_custom.edc
new file mode 100644 (file)
index 0000000..769ea8a
--- /dev/null
@@ -0,0 +1,91 @@
+group { name: "gl_custom_item";
+       styles{
+               style { name: "text_style";
+                       base: "color=#000000FF font=Tizen:style=Regular font_size=30 text_class=list_item ellipsis=1.0";
+                       tag:  "br" "\n";
+                       tag:  "ps" "ps";
+                       tag:  "tab" "\t";
+                       tag:  "b" "+ font_weight=Bold";
+                       tag:  "match" "+ color=#0051B5FF";
+               }
+       }
+       parts {
+               part { name: "base";
+                       type: SPACER;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 0 120; //GENLIST_ITEM_1LINE_HEIGHT
+                       }
+               }
+               part { name: "left_padding";
+                       type: SPACER;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 24 0;
+                               align: 0.0 0.0;
+                               rel1 { to: "base"; relative: 0.0 0.0; }
+                               rel2 { to: "base"; relative: 0.0 1.0; }
+                       }
+               }
+               part { name: "right_padding";
+                       type: SPACER;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 24 0;
+                               align: 1.0 0.0;
+                               rel1 { to: "base"; relative: 1.0 0.0; }
+                               rel2 { to: "base"; relative: 1.0 1.0; }
+                       }
+               }
+               part { name: "top_padding";
+                       type: SPACER;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 0 17;
+                               align: 0.0 0.0;
+                               rel1 { to_x: "left_padding"; to_y: "base"; relative: 1.0 0.0; }
+                               rel2 { to_x: "right_padding"; to_y: "base"; relative: 0.0 0.0; }
+                       }
+               }
+               part { name: "elm.text";
+                       type: SWALLOW;
+                       scale: 1;
+                       mouse_events: 0;
+                       description { state: "default" 0.0;
+                               min: 0 41;
+                               align: 0.0 0.0;
+                               rel1 { to: "top_padding"; relative: 0.0 1.0; }
+                               rel2 { to: "top_padding"; relative: 1.0 1.0; }
+                       }
+               }
+               part { name: "text_content_padding";
+                       type: SPACER;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 0 10;
+                               align: 0.0 0.0;
+                               rel1 { to: "elm.text"; relative: 0.0 1.0; }
+                               rel2 { to: "elm.text"; relative: 1.0 1.0; }
+                       }
+               }
+               part { name: "elm.swallow.content";
+                       type: SWALLOW;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               align: 0.5 0.0;
+                               rel1 { to: "text_content_padding"; relative: 0.0 1.0; }
+                               rel2 { to: "bottom_padding"; relative: 1.0 0.0; }
+                       }
+               }
+               part { name: "bottom_padding";
+                       type: SPACER;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 0 24;
+                               align: 0.5 1.0;
+                               rel1 { to: "base"; relative: 0.0 1.0; }
+                               rel2 { to: "base"; relative: 1.0 1.0; }
+                       }
+               }
+       }
+}
index 8df5d61..aa67571 100755 (executable)
 #define POLICY_RESULT_FAIL 1
 
 typedef struct appdata {
-       Evas_Object *win;
-       Evas_Object *conform;
-       Evas_Object *nf;
-       Evas_Object *list;
+       Evas_Object* win;
+       Evas_Object* conform;
+       Evas_Object* nf;
+       Evas_Object* list;
+       char* edj_path;
 } appdata_s;
 
 appdata_s* global_ad;
 
 typedef struct dpm_toolkit_entity{
-       char *id;
+       charid;
        int (*handler)(struct dpm_toolkit_entity* self);
        xmlNodePtr model;
+       char* entry_input;
 }dpm_toolkit_entity_t;
 
 typedef struct dpm_toolkit_policy_group {
-       char *id;
-       GList *policies;
+       charid;
+       GListpolicies;
 }dpm_toolkit_policy_group_t;
 
-GList *global_dpm_policy_group_list;
-GList *effective_dpm_policy_group_list;
+GListglobal_dpm_policy_group_list;
+GListeffective_dpm_policy_group_list;
 
-int dpm_toolkit_add_policy_group(GList **Grouplist , dpm_toolkit_policy_group_t * group);
-int dpm_toolkit_init_policy(GList **policies, dpm_toolkit_entity_t * policy, int policyNum);
+int dpm_toolkit_add_policy_group(GList** Grouplist , dpm_toolkit_policy_group_t* group);
+int dpm_toolkit_init_policy(GList** policies, dpm_toolkit_entity_t* policy, int policyNum);
 
 #endif /* __dpm-toolkit_H__ */
diff --git a/test-app/res/org.tizen.dpm-toolkit.edc b/test-app/res/org.tizen.dpm-toolkit.edc
new file mode 100644 (file)
index 0000000..9e2de6a
--- /dev/null
@@ -0,0 +1,4 @@
+collections {
+       base_scale: 2.6;
+       #include "../edc_resource/genlist_custom.edc"
+}
index 8156562..f23f110 100755 (executable)
@@ -2,7 +2,7 @@
 
 /*#define POLICY_XML_FILE_PATH "/home/owner/test.xml"*/
 #define POLICY_XML_FILE_PATH "/usr/apps/org.tizen.dpm-toolkit/test.xml"
-static Elm_Genlist_Item_Class* itc_policy_group, * itc_policy;
+static Elm_Genlist_Item_Class* itc_policy_group, * itc_policy, * itc_policy_entry;
 static xmlDoc* dpmDoc = NULL;
 
 void _popup_hide_cb(void* data, Evas_Object* obj, void* event_info)
@@ -153,7 +153,6 @@ int dpm_toolkit_add_policy(GList** policies, dpm_toolkit_entity_t* policy)
 
 void dpm_parser_free_policy_list(void)
 {
-
        dlog_print(DLOG_DEBUG, LOG_TAG, "## policy list free ## ");
 
        GList* pg_list = NULL;
@@ -217,6 +216,62 @@ static char* _gl_policy_label_get(void* data, Evas_Object* obj, const char* part
                return NULL;
 }
 
+static void _entry_cb(void* data, Evas_Object* obj, void* event_info, const char* smart_event)
+{
+       dpm_toolkit_entity_t* selected_entity = (dpm_toolkit_entity_t*)data;
+       Evas_Object* entry = obj;
+       const char* entry_str = NULL;
+       entry_str = elm_entry_entry_get(entry);
+
+       /* Free previous entry */
+       g_free(selected_entity->entry_input);
+       selected_entity->entry_input = strdup(entry_str);
+}
+
+static void _entry_changed_cb(void* data, Evas_Object* obj, void* event_info)
+{
+       _entry_cb(data, obj, event_info, "changed");
+}
+
+static void _entry_preedit_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _entry_cb(data, obj, event_info, "preedit,changed");
+}
+
+static Evas_Object* _gl_entry_content_get(void* data, Evas_Object* obj, const char* part)
+{
+       Evas_Object* layout, * entry, * label;
+       dpm_toolkit_entity_t* selected_entity = NULL;
+
+       selected_entity = (dpm_toolkit_entity_t*)data;
+
+       layout = elm_layout_add(obj);
+       elm_layout_file_set(layout, global_ad->edj_path, "gl_custom_item");
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       label = elm_label_add(obj);
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_text_set(label, (const char*)xmlGetProp(selected_entity->model, (xmlChar*) "desc"));
+       elm_object_part_content_set(layout, "elm.text", label);
+
+       entry = elm_entry_add(obj);
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_entry_entry_set(entry, (const char*)xmlGetProp(selected_entity->model, (xmlChar*) "default"));
+       selected_entity->entry_input = strdup((char*)xmlGetProp((xmlNodePtr)selected_entity->model, (xmlChar*) "default"));
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , entry);
+       evas_object_smart_callback_add(entry, "changed", _entry_changed_cb, selected_entity);
+       evas_object_smart_callback_add(entry, "preedit,changed", _entry_preedit_cb, selected_entity);
+
+       return layout;
+}
+
 static void create_genlist_items_classes()
 {
        itc_policy_group = elm_genlist_item_class_new();
@@ -231,6 +286,13 @@ static void create_genlist_items_classes()
        itc_policy->func.state_get = NULL;
        itc_policy->func.del = NULL;
 
+       itc_policy_entry = elm_genlist_item_class_new();
+       itc_policy_entry->item_style = "full";
+       itc_policy_entry->func.text_get = NULL;
+       itc_policy_entry->func.content_get = _gl_entry_content_get;
+       itc_policy_entry->func.state_get = NULL;
+       itc_policy_entry->func.del = NULL;
+
 }
 
 static Eina_Bool naviframe_pop_cb(void* data, Elm_Object_Item* it)
@@ -247,6 +309,7 @@ static void _gl_policy_select(void* data, Evas_Object* obj, void* event_info)
 {
        dpm_toolkit_entity_t* selected_policy = (dpm_toolkit_entity_t*) data;
        int ret = selected_policy->handler(selected_policy);
+       elm_genlist_item_selected_set((Elm_Object_Item*) event_info, EINA_FALSE);
 
        if (ret == POLICY_RESULT_SUCCESS)
                display_result_popup((char*)xmlGetProp((xmlNodePtr) selected_policy->model, (xmlChar*) "desc"), POLICY_SUCCESS_TXT);
@@ -255,6 +318,11 @@ static void _gl_policy_select(void* data, Evas_Object* obj, void* event_info)
 
 }
 
+static void _gl_policy_entry_select(void* data, Evas_Object* obj, void* event_info)
+{
+       elm_genlist_item_selected_set((Elm_Object_Item*)event_info, EINA_FALSE);
+}
+
 static void _gl_policy_group_select(void* data, Evas_Object* obj, void* event_info)
 {
        Evas_Object* genlist = elm_genlist_add(global_ad->nf);
@@ -270,7 +338,12 @@ static void _gl_policy_group_select(void* data, Evas_Object* obj, void* event_in
        for (policyList = g_list_first(selected_group->policies); (policyList && policyList->data); policyList = g_list_next(policyList)) {
                policy_entity_info = (dpm_toolkit_entity_t*) policyList->data;
 
-               if (xmlStrcmp(xmlGetProp(policy_entity_info->model, (xmlChar*) "status"), (xmlChar*) "ON") == 0)
+               if (xmlStrcmp(xmlGetProp(policy_entity_info->model, (xmlChar*) "status"), (xmlChar*) "ON") != 0)
+                       continue;
+               if (xmlStrcmp(xmlGetProp(policy_entity_info->model, (xmlChar*) "entry"), (xmlChar*) "ON") == 0) {
+                       elm_genlist_item_append(genlist, itc_policy, (void*)policy_entity_info, NULL, ELM_GENLIST_ITEM_NONE, _gl_policy_select, (void*)policy_entity_info);
+                       elm_genlist_item_append(genlist, itc_policy_entry, (void*)policy_entity_info, NULL, ELM_GENLIST_ITEM_NONE, _gl_policy_entry_select, (void*)policy_entity_info);
+               } else
                        elm_genlist_item_append(genlist, itc_policy, (void*)policy_entity_info, NULL, ELM_GENLIST_ITEM_NONE, _gl_policy_select, (void*)policy_entity_info);
        }
        elm_naviframe_item_push(global_ad->nf, selected_group->id, NULL, NULL, genlist, NULL);
@@ -283,9 +356,8 @@ void create_genlist(appdata_s* ad)
        GList* g_list = NULL;
        ad->list = elm_genlist_add(ad->nf);
 
-       dlog_print(DLOG_ERROR, LOG_TAG, "g_list_length(ad->dpm_policy_group_list) = %d", g_list_length(effective_dpm_policy_group_list));
+       dlog_print(DLOG_DEBUG, LOG_TAG, "g_list_length(ad->dpm_policy_group_list) = %d", g_list_length(effective_dpm_policy_group_list));
        for (g_list = g_list_first(effective_dpm_policy_group_list); (g_list && g_list->data); g_list = g_list_next(g_list)) {
-
                policy_group = (dpm_toolkit_policy_group_t *) g_list->data;
                elm_genlist_item_append(ad->list, itc_policy_group, (void*)policy_group, NULL, ELM_GENLIST_ITEM_NONE, _gl_policy_group_select, (void*)policy_group);
        }
@@ -295,7 +367,29 @@ void create_genlist(appdata_s* ad)
 static void create_base_gui(appdata_s* ad)
 {
        Elm_Object_Item* nf_it;
-       dlog_print(DLOG_ERROR, LOG_TAG, "create base gui");
+       char* res_path = NULL;
+       char* edj_path = NULL;
+       size_t path_size;
+       dlog_print(DLOG_DEBUG, LOG_TAG, "create base gui");
+
+       /* Get EDJ path */
+       res_path = app_get_resource_path();
+       if (res_path == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "failed get resource path");
+               ui_app_exit();
+               return;
+       }
+       path_size = strlen(res_path) + strlen("org.tizen.dpm-toolkit.edj") + 1;
+       edj_path = (char*)malloc(path_size);
+       if (edj_path == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "malloc fail");
+               ui_app_exit();
+               return;
+       }
+       snprintf(edj_path, path_size, "%s%s", res_path, "org.tizen.dpm-toolkit.edj");
+       global_ad->edj_path = strdup(edj_path);
+       free(res_path);
+
        /* Window */
        ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
        elm_win_conformant_set(ad->win, EINA_TRUE);
index 833d129..aa2d27f 100755 (executable)
@@ -1,4 +1,36 @@
 #include "dpm-toolkit.h"
+#include <dpm/password.h>
+
+/* dpm integration test */
+
+int password_set_password_quality_handler(struct dpm_toolkit_entity* self)
+{
+       dpm_client_h handle;
+       dpm_toolkit_entity_t* selected_policy = self;
+       char* param_username = NULL;
+       char* param_quality = NULL;
+
+       handle = dpm_create_client();
+       if (handle == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to create client handle");
+               return POLICY_RESULT_FAIL;
+       }
+
+       param_username = (char*)xmlGetProp(selected_policy->model, (xmlChar*)"username");
+       param_quality = (char*)xmlGetProp(selected_policy->model, (xmlChar*)"quality");
+       if (param_username == NULL || param_quality == NULL) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "not founded parameter");
+               return POLICY_RESULT_FAIL;
+       }
+       dlog_print(DLOG_DEBUG, LOG_TAG, "username: %s quality: %s", param_username, param_quality);
+       if (dpm_set_password_quality(handle, param_username, (int)param_quality) == 0) {
+               dpm_destroy_client(handle);
+               return POLICY_RESULT_SUCCESS;
+       }
+
+       dpm_destroy_client(handle);
+       return POLICY_RESULT_FAIL;
+}
 
 int set_enforce_password_handler(struct dpm_toolkit_entity* self)
 {
@@ -13,7 +45,7 @@ int set_enforce_password_handler(struct dpm_toolkit_entity* self)
                return -1;
        }
        dlog_print(DLOG_DEBUG, LOG_TAG, "status : %s ", param);
-
+       dlog_print(DLOG_DEBUG, LOG_TAG, "entry : %s ", selected_policy->entry_input);
        xmlFree(param);
        return POLICY_RESULT_SUCCESS;
 }
@@ -27,6 +59,7 @@ int get_password_policy_handler(struct dpm_toolkit_entity* self)
 int set_password_recovery(struct dpm_toolkit_entity* self)
 {
        dlog_print(DLOG_DEBUG, LOG_TAG, "set_password_recovery");
+       dlog_print(DLOG_DEBUG, LOG_TAG, "entry: %s ", self->entry_input);
        return POLICY_RESULT_SUCCESS;
 }
 
@@ -42,6 +75,10 @@ dpm_toolkit_entity_t dpm_toolkit_password_policy[] = {
        {
         .id = "SET_PASSWORD_RECOVERY",
         .handler = set_password_recovery
+       },
+       {
+        .id = "SET_PASSWORD_QUALITY",
+        .handler = password_set_password_quality_handler
        }
 };
 
@@ -62,4 +99,3 @@ void __CONSTRUCTOR__ dpm_toolkit_password_policy_constructor()
        if (ret < 0)
                dlog_print(DLOG_ERROR, LOG_TAG, "add password group fail");
 }
-