Round genlist item and add padding 46/243246/5
authorYunjin Lee <yunjin-.lee@samsung.com>
Fri, 4 Sep 2020 07:39:02 +0000 (16:39 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Mon, 5 Oct 2020 07:34:12 +0000 (16:34 +0900)
- Round & group genlist items
- Add padding on left & right side
- Add padding between description and app list
(at privacy_package_list_view)

Change-Id: I041330b09cbce8204253eb0c9db2191618ee5319

CMakeLists.txt
packaging/org.tizen.privacy-setting.spec
res/edc/main_layout.edc [new file with mode: 0644]
ui/include/privacy_view.h
ui/src/main_privacy_setting.c
ui/src/privacy_list_view.c
ui/src/privacy_package_list_view.c

index 9d2bd930f0485c8984b2abf3a8e75cc17a2662d5..68f69c62105671d4aa397dc5bd8f3e6d8a71e880 100644 (file)
@@ -42,11 +42,18 @@ ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
 ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
 
 SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
-#ADD_DEFINITIONS("-DUG_WAYLAND")
 
 ADD_SUBDIRECTORY(ui)
 ADD_SUBDIRECTORY(po)
 
+# make main_layout.edj
+ADD_CUSTOM_TARGET(main_layout.edj
+    COMMAND edje_cc -no-save res/edc/main_layout.edc res/main_layout.edj
+    DEPENDS res/edc/main_layout.edc
+    )
+ADD_DEPENDENCIES("org.tizen.privacy-setting" main_layout.edj)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/res/main_layout.edj DESTINATION ${TZ_SYS_RO_APP}/org.tizen.privacy-setting/res/edje/)
+
 INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/res/icon DESTINATION DESTINATION ${TZ_SYS_RO_APP}/org.tizen.privacy-setting/res FILES_MATCHING PATTERN "*.png")
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/packaging/org.tizen.privacy-setting.xml DESTINATION ${TZ_SYS_RO_PACKAGES}/)
 
index 6803970e8043ab1e1a648b5b90864e38d7762aae..326125c0c422cfac8cb12f65ec207a21dfbf46e9 100755 (executable)
@@ -79,3 +79,4 @@ echo "cyad done"
 %{TZ_SYS_RO_PACKAGES}/%alias.xml
 %{PREFIX}/bin/
 %{PREFIX}/res/icon/
+%{PREFIX}/res/edje/
diff --git a/res/edc/main_layout.edc b/res/edc/main_layout.edc
new file mode 100644 (file)
index 0000000..b1df0b2
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * 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.
+ */
+
+#define PADDING_SIZE 40
+
+collections
+{
+       base_scale: 1.8;
+
+       group { "main_layout";
+               parts {
+                       rect { "base";
+                               desc { "default";
+                                       color: 238 239 241 255;
+                               }
+                       }
+                       spacer { "padding.left"; scale;
+                               desc { "default";
+                                       min: PADDING_SIZE 0;
+                                       max: PADDING_SIZE -1;
+                                       fixed: 1 0;
+                                       align: 0.0 0.0;
+                                       rel.to: "base";
+                               }
+                       }
+                       spacer { "padding.right"; scale;
+                               desc { "default";
+                                       min: PADDING_SIZE 0;
+                                       max: PADDING_SIZE -1;
+                                       fixed: 1 0;
+                                       align: 1.0 0.0;
+                                       rel.to: "base";
+                               }
+                       }
+                       swallow { "elm.swallow.content";
+                               desc { "default";
+                                       rel1 { relative: 1.0 0.0; to: "padding.left"; }
+                                       rel2 { relative: 0.0 1.0; to: "padding.right"; }
+                               }
+                       }
+               }
+       }
+}
index 9d0efe2347ae57e0118e8f6e3111956c3173551f..d3edc061b85e16c4ef5d2f0ba1cd7711ae5968d3 100644 (file)
@@ -30,8 +30,6 @@
 
 #include "privacy_setting.h"
 
-#define SELECT_ALL_APPS_ITEM_ID NULL
-
 typedef struct {
        char* pkgid;
        char* label;
index 26967e485caeec3ac1ad80534749d80e284f4c25..5f21d16e8a1b8a90fa6a1dd78d15d1bddcfa5694 100644 (file)
@@ -46,8 +46,8 @@ static void app_start(void* data)
 
        /* Add layout to conformant */
        ad->layout = elm_layout_add(ad->conform);
+       elm_layout_file_set(ad->layout, RESDIR"/edje/main_layout.edj", "main_layout");
        evas_object_size_hint_weight_set(ad->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       elm_layout_theme_set(ad->layout, "layout", "application", "default");
        elm_object_content_set(ad->conform, ad->layout);
        evas_object_show(ad->layout);
 
index 3be51a694b2e8bf0e70e23ae33cfeff11773f1d4..c7c5daabfa0a6dd6108916e224b4d62e052952af 100644 (file)
@@ -15,7 +15,7 @@
  */
 /*
  * @file      privacy_list_view.c
- * @author    Yunjin Lee (yunjin-.lee@samsung.com)
+ * @author  Yunjin Lee (yunjin-.lee@samsung.com)
  * @version   1.0
  * @brief
  */
@@ -37,6 +37,7 @@ static char* gl_text_get_cb(void *data, Evas_Object *obj, const char *part)
        lreturn_if(!strcmp(part, "elm.text"), , privacy_display, "privacy = %s", privacy_name);
        return NULL;
 }
+
 static void gl_del_cb(void *data, Evas_Object *obj)
 {
        /* Unrealized callback can be called after this. */
@@ -44,6 +45,23 @@ static void gl_del_cb(void *data, Evas_Object *obj)
        free(data);
 }
 
+static void gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = event_info;
+       item_data_s *privacy = elm_object_item_data_get(it);
+       struct app_data_s *ad = (struct app_data_s*)data;
+
+       int idx = g_list_index(ad->privacy_list, privacy);
+       int len = g_list_length(ad->privacy_list);
+
+       if (idx == 0)
+               elm_object_item_signal_emit(it, "elm,state,group,top", "elm");
+       else if (idx == len - 1)
+               elm_object_item_signal_emit(it, "elm,state,group,bottom", "elm");
+       else
+               elm_object_item_signal_emit(it, "elm,state,group,middle", "elm");
+}
+
 static Eina_Bool quit_cb(void *data, Elm_Object_Item *it)
 {
        struct app_data_s* ad = (struct app_data_s*)data;
@@ -83,6 +101,9 @@ void create_privacy_list_view(struct app_data_s *ad)
        itc->item_style = "1line";
        itc->func.text_get = gl_text_get_cb;
        itc->func.del = gl_del_cb;
+
+       evas_object_smart_callback_add(genlist, "realized", gl_realized_cb, ad);
+
        int i = 0;
        for (i = 0; i < (int)g_list_length(ad->privacy_list); ++i) {
                Elm_Object_Item *it = NULL;
index 18f81550a43888e19ef49b89091c38fc47ede3ab..9c68591bd7dc346f50a7531fefd44142aac7c089 100644 (file)
@@ -36,7 +36,6 @@
 #include "privacy_view.h"
 
 static GList* pkg_list;
-static GList* privilege_list;
 static GList* pkg_data_list;
 static char* privacy_display = NULL;
 static char* privacy_name = NULL;
@@ -94,6 +93,29 @@ static char* gl_menu_desc_text_get_cb(void *data, Evas_Object *obj, const char *
        return NULL;
 }
 
+static void gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = event_info;
+       pkg_data_s *pd = elm_object_item_data_get(it);
+
+       if (pd == NULL) {
+               elm_object_item_signal_emit(it, "elm,state,group,single", "elm");
+               return;
+       }
+
+       int idx = g_list_index(pkg_data_list, pd);
+       int len = g_list_length(pkg_data_list);
+
+       if (len == 1)
+               elm_object_item_signal_emit(it, "elm,state,group,single", "elm");
+       else if (idx == 0)
+               elm_object_item_signal_emit(it, "elm,state,group,top", "elm");
+       else if (idx == len - 1)
+               elm_object_item_signal_emit(it, "elm,state,group,bottom", "elm");
+       else
+               elm_object_item_signal_emit(it, "elm,state,group,middle", "elm");
+}
+
 static void privacy_package_selected_cb(void *data, Evas_Object *obj, void *event_info)
 {
        Elm_Object_Item *ei = event_info;
@@ -409,18 +431,14 @@ void create_privacy_package_list_view(struct app_data_s* ad)
        log_if(privilege_info_get_privacy_display(ad->privacy, &privacy_display) != PRVMGR_ERR_NONE, 1, "Couldn't get privacy display : %s", ad->privacy);
 
        /* Get privilege list by privacy */
-       if (privilege_list != NULL) {
-               g_list_free_full(privilege_list, free);
-               privilege_list = NULL;
+       if (pkg_list != NULL) {
+               g_list_free_full(pkg_list, free);
+               pkg_list = NULL;
+       }
+       if (pkg_data_list != NULL) {
+               g_list_free_full(pkg_data_list, free_extension_pkg_data);
+               pkg_data_list = NULL;
        }
-    if (pkg_list != NULL) {
-        g_list_free_full(pkg_list, free);
-        pkg_list = NULL;
-    }
-    if (pkg_data_list != NULL) {
-        g_list_free_full(pkg_data_list, free_extension_pkg_data);
-        pkg_data_list = NULL;
-    }
        /* Get unique package list filtered by given privacy related privileges */
        int ret = privilege_package_info_get_package_list_by_privacy(getuid(), ad->privacy, &pkg_list);
        log_if(ret != 0, 1, "privilege_package_info_get_package_list_by_privacy() failed");
@@ -467,9 +485,12 @@ void create_privacy_package_list_view(struct app_data_s* ad)
                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);
 
+               evas_object_smart_callback_add(genlist, "realized", gl_realized_cb, NULL);
+
                /* Set itc */
                Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
                Elm_Genlist_Item_Class *mtc = elm_genlist_item_class_new();
+               Elm_Genlist_Item_Class *ntc = elm_genlist_item_class_new();
 
                itc->item_style = "1line";
                itc->func.content_get = gl_content_get_cb;
@@ -480,10 +501,17 @@ void create_privacy_package_list_view(struct app_data_s* ad)
                mtc->func.text_get = gl_menu_desc_text_get_cb;
                mtc->func.del = gl_menu_desc_del_cb;
 
+               ntc->item_style = "group_index";
+               ntc->func.text_get = NULL;
+
                it = elm_genlist_item_append(genlist, mtc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
                log_if(it == NULL, 1, "Error in elm_genlist_item_append");
                elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
+               it = elm_genlist_item_append(genlist, ntc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               log_if(it == NULL, 1, "error in elm_genlist_item_append");
+               elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
                for (l = pkg_data_list; l != NULL; l = l->next) {
                        pkg_data_s* pkg_data = (pkg_data_s*)l->data;
                        /* Get privacy status of given package */
@@ -492,6 +520,7 @@ void create_privacy_package_list_view(struct app_data_s* ad)
                }
                elm_genlist_item_class_free(itc);
                elm_genlist_item_class_free(mtc);
+               elm_genlist_item_class_free(ntc);
        }
        /* Push naviframe item */
        Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->nf, privacy_display, common_back_btn_add(ad), NULL, genlist, NULL);