From 0ec11614d47f4a9fa04226ff0dbe1109f995ab05 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Sun, 19 Jul 2015 14:29:34 +0900 Subject: [PATCH 01/16] integrate with notification for displaying badge of noti count Change-Id: Ibd0b84189f77bac4c4d123310515cf7eae886619 Signed-off-by: Soohye Shin --- CMakeLists.txt | 1 + packaging/org.tizen.home.spec | 1 + src/data/data_home.c | 132 ++++++++++++++++++++++++++++++------------ src/view/view_home.c | 69 ++++++++++++++-------- 4 files changed, 141 insertions(+), 62 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e7a5be0..18cd8d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,7 @@ pkg_check_modules(PKGS REQUIRED libgum app-utils pkgmgr-info + notification capi-appfw-application) FOREACH(flag ${PKGS_CFLAGS}) diff --git a/packaging/org.tizen.home.spec b/packaging/org.tizen.home.spec index 11b37b6..c2b9785 100644 --- a/packaging/org.tizen.home.spec +++ b/packaging/org.tizen.home.spec @@ -17,6 +17,7 @@ BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(libgum) BuildRequires: pkgconfig(app-utils) BuildRequires: pkgconfig(pkgmgr-info) +BuildRequires: pkgconfig(notification) BuildRequires: edje-bin BuildRequires: gettext-devel diff --git a/src/data/data_home.c b/src/data/data_home.c index 335ee02..f2a8b20 100644 --- a/src/data/data_home.c +++ b/src/data/data_home.c @@ -20,10 +20,13 @@ #include #include #include +#include +#include #include "data_home.h" #include "datamgr.h" #include "utils.h" +#include "view.h" #define STR_SELECT_ACTION_PUSH "push" #define STR_SELECT_ACTION_LAUNCH "launch" @@ -36,6 +39,8 @@ #define MEMBER_STR_PARAMETER "parameter" #define MEMBER_INT_NOTIFICATION "notification" +#define MAX_BUF 64 + static inline char *_read_string(JsonReader *reader, char *member) { char *val; @@ -68,6 +73,34 @@ static inline gboolean _read_boolean(JsonReader *reader, char *member) return val; } +static inline void _get_notification_count(notification_type_e type, int *count) +{ + notification_list_h list = NULL; + + notification_get_list(type, -1, &list); + if (!list) + return; + + while (list) { + (*count)++; + list = notification_list_get_next(list); + } + + notification_free_list(list); +} + +static void _get_notification(char **noti) +{ + int count = 0; + char buf[MAX_BUF]; + + _get_notification_count(NOTIFICATION_TYPE_ONGOING, &count); + _get_notification_count(NOTIFICATION_TYPE_NOTI, &count); + + snprintf(buf, sizeof(buf), "%d", count); + *noti = strdup(buf); +} + static struct datamgr_item *_pack_home_item(JsonReader *reader, int i) { struct datamgr_item *di; @@ -120,6 +153,8 @@ static struct datamgr_item *_pack_home_item(JsonReader *reader, int i) di->focus_icon = strdup(focus_icon); di->parameter = strdup(parameter); di->noti = noti; + if (noti) + _get_notification(&di->subtitle); return di; err: @@ -160,47 +195,11 @@ static Eina_List *_load_home_data(JsonReader *reader) return list; } -static Eina_List *_get_items(struct datamgr *dm) -{ - if (!dm) { - _ERR("Invalid argument"); - return NULL; - } - - return dm->list; -} - -static void _fini(struct datamgr *dm) -{ - struct datamgr_item *di; - - if (!dm) { - _ERR("Invalid argument"); - return; - } - - EINA_LIST_FREE(dm->list, di) { - free(di->title); - free(di->icon); - free(di->focus_icon); - free(di->parameter); - - free(di); - } - - dm->list = NULL; -} - -static bool _init(struct datamgr *dm) +static bool _load_home(struct datamgr *dm) { JsonParser *parser; JsonReader *reader; - if (!dm) { - _ERR("Invalid argument"); - return false; - } - parser = json_parser_new(); if (!parser) { _ERR("failed to new parser"); @@ -234,6 +233,65 @@ static bool _init(struct datamgr *dm) return true; } +static void _unload_home(struct datamgr *dm) +{ + struct datamgr_item *di; + + EINA_LIST_FREE(dm->list, di) { + free(di->title); + free(di->icon); + free(di->focus_icon); + free(di->parameter); + free(di->subtitle); + + free(di); + } + + dm->list = NULL; +} + +static Eina_List *_get_items(struct datamgr *dm) +{ + if (!dm) { + _ERR("Invalid argument"); + return NULL; + } + + _unload_home(dm); + _load_home(dm); + + return dm->list; +} + +static void _notification_cb(void *data, notification_type_e type) +{ + /* It should be implemented later for loading a count of notification */ +} + +static void _fini(struct datamgr *dm) +{ + if (!dm) { + _ERR("Invalid argument"); + return; + } + + _unload_home(dm); + + notification_unresister_changed_cb(_notification_cb); +} + +static bool _init(struct datamgr *dm) +{ + if (!dm) { + _ERR("Invalid argument"); + return false; + } + + notification_resister_changed_cb(_notification_cb, dm); + + return _load_home(dm); +} + static void _select(struct datamgr_item *di) { if (!di || !di->parameter) diff --git a/src/view/view_home.c b/src/view/view_home.c index 7954945..1580e1f 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -36,6 +36,7 @@ struct _priv { Evas_Object *win; Evas_Object *base; Evas_Object *down; + Evas_Object *scr; Eina_List *list; struct datamgr *dm; @@ -44,6 +45,7 @@ struct _priv { struct bar_item { Evas_Object *eo; + Evas_Object *badge; struct datamgr_item *di; struct _priv *priv; @@ -159,6 +161,24 @@ static bool _add_navigations(struct _priv *priv, Evas_Object *base) return true; } +static Evas_Object *_add_notification_badge(Evas_Object *eo, char *noti) +{ + Evas_Object *badge; + + if (!strcmp(noti, "0")) + return NULL; + + badge = utils_add_icon(eo, IMAGE_BADGE, PART_BAR_ITEM_BADGE); + if (!badge) { + _ERR("failed to add badge"); + return NULL; + } + elm_object_part_text_set(eo, PART_BAR_ITEM_BADGE_COUNT, noti); + evas_object_color_set(badge, 238, 67, 49, 255); + + return badge; +} + static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, struct datamgr_item *di) { @@ -206,6 +226,9 @@ static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, if (!bg) goto err; + if (di->noti) + bi->badge = _add_notification_badge(eo, di->subtitle); + inputmgr_add_callback(eo, INPUT_HANDLER_TYPE_EO, &handler, bi); elm_box_pack_end(box, eo); evas_object_show(eo); @@ -244,6 +267,7 @@ static bool _add_home_menu(struct _priv *priv, Evas_Object *base) } elm_object_content_set(scr, box); elm_object_part_content_set(base, PART_HOME_MENU_BAR, scr); + priv->scr = scr; list = datamgr_get_items(priv->dm); if (!list) { @@ -263,22 +287,6 @@ static bool _add_home_menu(struct _priv *priv, Evas_Object *base) return true; } -static bool _add_home(struct _priv *priv, Evas_Object *base) -{ - - if (!_add_navigations(priv, base)) { - _ERR("failed to add navigations"); - return false; - } - - if (!_add_home_menu(priv, base)) { - _ERR("failed to add menu"); - return false; - } - - return true; -} - static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -313,7 +321,7 @@ static Evas_Object *_create(Evas_Object *win, void *data) priv->base = base; priv->dm = dm; - if (!_add_home(priv, base)) { + if (!_add_navigations(priv, base)) { _ERR("failed to load home"); datamgr_fini(dm); evas_object_del(base); @@ -338,6 +346,8 @@ static void _show(void *data) priv = data; + _add_home_menu(priv, priv->base); + evas_object_show(priv->base); elm_object_signal_emit(priv->base, SIG_SHOW_NAVIGATION, SRC_PROG); @@ -346,6 +356,21 @@ static void _show(void *data) elm_object_focus_set(priv->foc->eo, EINA_TRUE); } +static void _unload_home(struct _priv *priv) +{ + struct bar_item *bi; + + EINA_LIST_FREE(priv->list, bi) { + inputmgr_remove_callback(bi->eo, &handler); + evas_object_del(bi->eo); + free(bi); + } + evas_object_del(priv->scr); + + priv->foc = NULL; + priv->list = NULL; +} + static void _hide(void *data) { struct _priv *priv; @@ -357,6 +382,8 @@ static void _hide(void *data) priv = data; + _unload_home(priv); + elm_object_signal_emit(priv->base, SIG_HIDE_NAVIGATION, SRC_PROG); evas_object_hide(priv->base); } @@ -364,7 +391,6 @@ static void _hide(void *data) static void _destroy(void *data) { struct _priv *priv; - struct bar_item *bi; if (!data) { _ERR("Invalid argument"); @@ -373,18 +399,11 @@ static void _destroy(void *data) priv = data; - EINA_LIST_FREE(priv->list, bi) { - inputmgr_remove_callback(bi->eo, &handler); - evas_object_del(bi->eo); - free(bi); - } - datamgr_fini(priv->dm); inputmgr_remove_callback(priv->base, &handler); inputmgr_remove_callback(priv->down, &handler); evas_object_del(priv->base); - priv->list = NULL; free(priv); } -- 2.7.4 From 2d91ac575e7cf86a661d4267a2e4b3018eba6904 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Sun, 19 Jul 2015 14:47:26 +0900 Subject: [PATCH 02/16] update noti badge dinamically from notification changed callback Change-Id: I7ef435ed8c63215fbe82f38289c1426ee9f23775 Signed-off-by: Soohye Shin --- include/view.h | 3 ++- src/data/data_home.c | 21 ++++++++++++++++++++- src/view/view_home.c | 42 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/include/view.h b/include/view.h index 58f2a07..a981f18 100644 --- a/include/view.h +++ b/include/view.h @@ -19,7 +19,8 @@ enum update_type { UPDATE_TYPE_EDIT, - UPDATE_TYPE_PHOTO + UPDATE_TYPE_PHOTO, + UPDATE_TYPE_NOTI }; view_class *view_home_get_vclass(void); diff --git a/src/data/data_home.c b/src/data/data_home.c index f2a8b20..c03c143 100644 --- a/src/data/data_home.c +++ b/src/data/data_home.c @@ -27,6 +27,7 @@ #include "datamgr.h" #include "utils.h" #include "view.h" +#include "defs.h" #define STR_SELECT_ACTION_PUSH "push" #define STR_SELECT_ACTION_LAUNCH "launch" @@ -265,7 +266,25 @@ static Eina_List *_get_items(struct datamgr *dm) static void _notification_cb(void *data, notification_type_e type) { - /* It should be implemented later for loading a count of notification */ + char *noti = NULL; + Eina_List *l; + struct datamgr *dm; + struct datamgr_item *di; + + if (!data) { + _ERR("Invalid argument"); + return; + } + + dm = data; + + _get_notification(¬i); + viewmgr_update_view(VIEW_HOME, UPDATE_TYPE_NOTI, noti); + + EINA_LIST_FOREACH(dm->list, l, di) { + if (di->noti) + di->subtitle = noti; + } } static void _fini(struct datamgr *dm) diff --git a/src/view/view_home.c b/src/view/view_home.c index 1580e1f..703d8fd 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -407,12 +407,52 @@ static void _destroy(void *data) free(priv); } +static void _update(void *view_data, int update_type, void *data) +{ + struct _priv *priv; + struct bar_item *bi; + Eina_List *list; + Evas_Object *badge; + + if (!view_data) { + _ERR("Invalid argument"); + return; + } + + priv = view_data; + + switch (update_type) { + case UPDATE_TYPE_NOTI: + if (!priv->list) + return; + + EINA_LIST_FOREACH(priv->list, list, bi) { + if (!bi->di->noti) + continue; + + badge = _add_notification_badge(bi->eo, data); + if (!badge && bi->badge) { + evas_object_del(bi->badge); + elm_object_part_text_set(bi->eo, + PART_BAR_ITEM_BADGE_COUNT, ""); + } + evas_object_show(bi->eo); + bi->badge = badge; + } + break; + default: + _ERR("Invalid type"); + return; + } +} + static view_class vclass = { .view_id = VIEW_HOME, .create = _create, .show = _show, .hide = _hide, - .destroy = _destroy + .destroy = _destroy, + .update = _update }; view_class *view_home_get_vclass(void) -- 2.7.4 From de561a91bc7cd96e9b006abd7a5652a60db330e3 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Mon, 20 Jul 2015 13:51:18 +0900 Subject: [PATCH 03/16] fixed to load user list correctly - get user list which type is normal and admin - except for login user itself Change-Id: I4bb322ef6ee0278425db046dcd8028182a83a294 Signed-off-by: Soohye Shin --- src/data/data_user.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/data/data_user.c b/src/data/data_user.c index b1f3192..0e843fc 100644 --- a/src/data/data_user.c +++ b/src/data/data_user.c @@ -35,7 +35,8 @@ #define GUM_ATTR_UID "uid" #define GUM_ATTR_ICON "icon" #define GUM_ATTR_PASSWORD "secret" -#define GUM_LIST_USERTYPE "normal" +#define GUM_LIST_USERTYPE_NORMAL "normal" +#define GUM_LIST_USERTYPE_ADMIN "admin" #define ADDRESS_BUF_MAX 128 #define USER_SWITCH_TLM_SEAT_ID "seat0" @@ -319,6 +320,7 @@ static bool _load_users(Eina_List **list) struct datamgr_item *di; char *name, *icon; gchar **strv; + uid_t uid, user_uid; int i; service = gum_user_service_create_sync(FALSE); @@ -327,7 +329,8 @@ static bool _load_users(Eina_List **list) return false; } - strv = _append_string(NULL, GUM_LIST_USERTYPE); + strv = _append_string(NULL, GUM_LIST_USERTYPE_NORMAL); + strv = _append_string(strv, GUM_LIST_USERTYPE_ADMIN); ulist = gum_user_service_get_user_list_sync(service, (const gchar *const *)strv); g_strfreev(strv); @@ -337,14 +340,18 @@ static bool _load_users(Eina_List **list) return false; } + user_uid = getuid(); for (i = 0; i < g_list_length(ulist); i++) { user = g_list_nth_data(ulist, i); if (!user) continue; g_object_get(G_OBJECT(user), GUM_ATTR_NAME, &name, - GUM_ATTR_ICON, &icon, + GUM_ATTR_ICON, &icon, GUM_ATTR_UID, &uid, GUM_ATTR_USERTYPE, &type, NULL); + if (uid == user_uid) + continue; + di = _pack_user(name, icon, icon, ITEM_SELECT_ACTION_SWITCH, NULL, type); if (!di) -- 2.7.4 From 1b89b40a942cc350f91b810a91c2083e52fc70b0 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Mon, 20 Jul 2015 17:18:50 +0900 Subject: [PATCH 04/16] set photo icon mask Change-Id: Icd7897ad075f29752be8dbdd797b8bd2cee97a4d Signed-off-by: Soohye Shin --- edje/images/mask_user_nor.png | Bin 0 -> 3728 bytes edje/view/baritem.edc | 66 ++++++++++++++++++++++++++++++++++++++++++ include/defs.h | 1 + src/data/data_user.c | 10 +++++-- src/view/view_user.c | 6 ++-- 5 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 edje/images/mask_user_nor.png diff --git a/edje/images/mask_user_nor.png b/edje/images/mask_user_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..f8045fe8d82a39b7556f2c051174aee408072c9a GIT binary patch literal 3728 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, + focus_ic = utils_add_icon(eo, di->focus_icon, PART_BAR_ITEM_ICON_FOCUS); if (!focus_ic) goto err; + if (!strcmp(di->icon, di->focus_icon)) + elm_object_signal_emit(eo, SIG_SHOW_MASK, SRC_PROG); + bg = utils_add_bg(eo, COLOR_DEFAULT_R, COLOR_DEFAULT_G, COLOR_DEFAULT_B, COLOR_DEFAULT_A, PART_BAR_ITEM_BG); if (!bg) -- 2.7.4 From c320ab1c720970614dbc2c8a80bc2e8c85b5459b Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 21 Jul 2015 12:53:39 +0900 Subject: [PATCH 05/16] load login user in view_home Change-Id: Ic29ffd7295a14d7a5a1645d7c5d52264551ddb4b Signed-off-by: Soohye Shin --- include/defs.h | 8 ++++++++ src/data/data_home.c | 28 ++++++++++++++++++++++++++-- src/data/data_user.c | 8 -------- src/view/view_home.c | 3 +++ 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/include/defs.h b/include/defs.h index 6ad147d..dcb2a0e 100644 --- a/include/defs.h +++ b/include/defs.h @@ -180,4 +180,12 @@ #define MESSAGE_DONE "Done" #define MESSAGE_DISCARD "Discard" +#define GUM_ATTR_NAME "username" +#define GUM_ATTR_USERTYPE "usertype" +#define GUM_ATTR_UID "uid" +#define GUM_ATTR_ICON "icon" +#define GUM_ATTR_PASSWORD "secret" +#define GUM_LIST_USERTYPE_NORMAL "normal" +#define GUM_LIST_USERTYPE_ADMIN "admin" + #endif /* __AIR_HOME_DEFS_H__ */ diff --git a/src/data/data_home.c b/src/data/data_home.c index c03c143..8b17560 100644 --- a/src/data/data_home.c +++ b/src/data/data_home.c @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include "data_home.h" #include "datamgr.h" @@ -102,6 +104,27 @@ static void _get_notification(char **noti) *noti = strdup(buf); } +static void _get_login_user(char **name, char **icon, char **focus_icon) +{ + GumUser *user; + struct passwd *passwd; + uid_t uid = getuid(); + + user = gum_user_get_sync(uid, FALSE); + if (!user) { + _ERR("failed to get user service"); + passwd = getpwuid(uid); + *name = passwd->pw_name; + return; + } + + g_object_get(G_OBJECT(user), GUM_ATTR_NAME, name, GUM_ATTR_ICON, icon, + NULL); + *focus_icon = (char *)utils_get_focus_icon_from_icon(*icon); + + g_object_unref(user); +} + static struct datamgr_item *_pack_home_item(JsonReader *reader, int i) { struct datamgr_item *di; @@ -142,9 +165,10 @@ static struct datamgr_item *_pack_home_item(JsonReader *reader, int i) return NULL; } - if (!strcmp(action, STR_SELECT_ACTION_PUSH)) + if (!strcmp(action, STR_SELECT_ACTION_PUSH)) { di->action = ITEM_SELECT_ACTION_PUSH; - else if (!strcmp(action, STR_SELECT_ACTION_LAUNCH)) + _get_login_user(&name, &icon, &focus_icon); + } else if (!strcmp(action, STR_SELECT_ACTION_LAUNCH)) di->action = ITEM_SELECT_ACTION_LAUNCH; else di->action = ITEM_SELECT_ACTION_MAX; diff --git a/src/data/data_user.c b/src/data/data_user.c index 2379e5e..c4310b2 100644 --- a/src/data/data_user.c +++ b/src/data/data_user.c @@ -31,14 +31,6 @@ #include "defs.h" #include "utils.h" -#define GUM_ATTR_NAME "username" -#define GUM_ATTR_USERTYPE "usertype" -#define GUM_ATTR_UID "uid" -#define GUM_ATTR_ICON "icon" -#define GUM_ATTR_PASSWORD "secret" -#define GUM_LIST_USERTYPE_NORMAL "normal" -#define GUM_LIST_USERTYPE_ADMIN "admin" - #define ADDRESS_BUF_MAX 128 #define USER_SWITCH_TLM_SEAT_ID "seat0" #define USER_SWITCH_DBUS_SOCKET_PATH "/var/run/tlm/" diff --git a/src/view/view_home.c b/src/view/view_home.c index 703d8fd..3c06565 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -211,6 +211,9 @@ static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, if (!focus_ic) goto err; + if (!strcmp(di->icon, di->focus_icon)) + elm_object_signal_emit(eo, SIG_SHOW_MASK, SRC_PROG); + lbl = utils_add_label(eo, di->title, STYLE_LABEL_TITLE, PART_BAR_ITEM_TITLE); if (!lbl) -- 2.7.4 From 80e6e4fa28bd55baf35a008f8b72a7db8223f8d2 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 21 Jul 2015 13:31:16 +0900 Subject: [PATCH 06/16] limit notification count to 99 Change-Id: I325ef11e8d6ef92f8aa94f5a016b3c0fd2dfefc5 Signed-off-by: Soohye Shin --- src/data/data_home.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/data/data_home.c b/src/data/data_home.c index 8b17560..8c6ecf1 100644 --- a/src/data/data_home.c +++ b/src/data/data_home.c @@ -100,6 +100,9 @@ static void _get_notification(char **noti) _get_notification_count(NOTIFICATION_TYPE_ONGOING, &count); _get_notification_count(NOTIFICATION_TYPE_NOTI, &count); + if (count > 99) + count = 99; + snprintf(buf, sizeof(buf), "%d", count); *noti = strdup(buf); } -- 2.7.4 From 89a11875de341cbb2275abe65f6719d78de8c1b6 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 21 Jul 2015 16:07:42 +0900 Subject: [PATCH 07/16] add down arrow for user edit Change-Id: Ibfc97a37092bbe81fdec92bd9653b25d90e6190d Signed-off-by: Soohye Shin --- edje/view/baritem.edc | 17 ++++++++- edje/view/user.edc | 104 ++++++++++++++++++++++++++++++++++++++++++++++---- src/view/view_user.c | 1 + 3 files changed, 113 insertions(+), 9 deletions(-) diff --git a/edje/view/baritem.edc b/edje/view/baritem.edc index 400f4cf..5cf3693 100644 --- a/edje/view/baritem.edc +++ b/edje/view/baritem.edc @@ -31,6 +31,19 @@ group { description { state, "default" 0.0; min, 158 158; + visible, 0; + } + } + part { + name, "pad"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 158 158; + rel2.relative, 0.0 0.0; + align, 0.0 0.0; + fixed, 1 1; } } part { @@ -81,7 +94,9 @@ group { clip_to, "clip"; description { state, "default" 0.0; - min, 158 158; + rel1.to, "pad"; + rel2.to, "pad"; + fixed, 1 1; } } part { diff --git a/edje/view/user.edc b/edje/view/user.edc index f1244c4..8bcd7e3 100644 --- a/edje/view/user.edc +++ b/edje/view/user.edc @@ -89,7 +89,7 @@ group { to, "pad.list"; relative, 1.0 1.0; } - min, 1422 158; + min, 1422 228; align, 0.5 0.0; fixed, 1 1; } @@ -101,8 +101,21 @@ group { name, GRP_USER_ITEM; inherit, GRP_BAR_ITEM; data.item, TITLE_WIDTH "130"; + images { + image, "btn_navigation_down.png" COMP; + } parts { part { + name, "bg"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 158 228; + visible, 0; + } + } + part { name, "pad.icon"; type, RECT; scale, 1; @@ -141,10 +154,16 @@ group { scale, 1; description { state, "default" 0.0; - min, 0 24; - rel1.relative, 0.5 1.0; - rel2.relative, 0.5 1.0; - align, 0.5 1.0; + min, 0 12; + rel1 { + to, PART_BAR_ITEM_ICON; + relative, 0.5 1.0; + } + rel2 { + to, PART_BAR_ITEM_ICON; + relative, 0.5 1.0; + } + align, 0.5 0.0; fixed, 1 1; visible, 0; } @@ -157,13 +176,13 @@ group { state, "default" 0.0; rel1 { to, "pad.text"; - relative, 0.0 0.0; + relative, 1.0 1.0; } rel2 { to, "pad.text"; - relative, 0.0 0.0; + relative, 1.0 1.0; } - align, 0.5 1.0; + align, 0.5 0.0; fixed, 1 1; min, 130 22; } @@ -223,5 +242,74 @@ group { rel2.to, PART_BAR_ITEM_LOCK; } } + part { + name, "text"; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + min, 158 50; + rel1 { + to, "pad"; + relative, 0.5 1.0; + } + rel2 { + to, "pad"; + relative, 0.5 1.0; + } + align, 0.5 0.0; + fixed, 1 1; + text { + size, 26; + font, "TizenSans"; + text, "Edit"; + } + color, 255 255 255 178; + visible, 0; + } + description { + state, "focus"; + inherit, "default" 0.0; + visible, 1; + } + } + part { + name, "arrow"; + type, IMAGE; + scale, 1; + description { + state, "default" 0.0; + min, 86 30; + rel1.relative, 0.5 1.0; + rel2.relative, 0.5 1.0; + image.normal, "btn_navigation_down.png"; + align, 0.5 1.0; + fixed, 1 1; + visible, 0; + } + description { + state, "focus"; + inherit, "default" 0.0; + visible, 1; + } + } + } + programs { + program { + name, "sig,show,arrow"; + signal, SIG_FOCUS; + source, SRC_PROG; + action, STATE_SET "focus"; + target, "text"; + target, "arrow"; + } + program { + name, "sig,hide,arrow"; + signal, SIG_UNFOCUS; + source, SRC_PROG; + action, STATE_SET "default"; + target, "text"; + target, "arrow"; + } } } diff --git a/src/view/view_user.c b/src/view/view_user.c index cdbe5d1..d13782e 100644 --- a/src/view/view_user.c +++ b/src/view/view_user.c @@ -296,6 +296,7 @@ static struct _bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, if (!bg) goto err; + evas_object_size_hint_align_set(eo, 0.5, 0.0); inputmgr_add_callback(eo, INPUT_HANDLER_TYPE_EO, &handler, bi); elm_box_pack_end(box, eo); evas_object_show(eo); -- 2.7.4 From 3bab96bf6e82937323b63d3a226430037605966d Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 28 Jul 2015 15:23:09 +0900 Subject: [PATCH 08/16] modify a deleting user button according to v0.4 GUI Change-Id: Id27fb8619cd31355c924521016179d0b747ff8e3 Signed-off-by: Soohye Shin --- edje/images/btn_user_del.png | Bin 1337 -> 0 bytes edje/view/useredit.edc | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) delete mode 100644 edje/images/btn_user_del.png diff --git a/edje/images/btn_user_del.png b/edje/images/btn_user_del.png deleted file mode 100644 index 3c4fa041192b0ea8e12a2c77695aa094ea90e2d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1337 zcmeAS@N?(olHy`uVBq!ia0vp^VLDSr z1<%~X^wgl##FWaylc_cg49sbnArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKW@b!fooL3ADC}5E3S0onb8|oS8=jMX^1y)^L5|oN?23FO@A(aKG`a!A1 z`K3k4!1zd0hG_u(a6Hd$->py)WXc!+`T*ya5c4bba8UC zv~V^uws1B!GjM_F^~@_SNz6-5h1r`4v=^$^60cq>=c3falKi5O{QMkP3JA!^FUc>? z$S+WE4mMNJ2+zz*$uBR~1Vs#&rIbo&`bc{YIaUdlYm=G`pf|&5659GizPih`8 z#}omx#@~YeR0amdOivfbkcwMxX6@}d>xD z+wh{_jro7w%pEy}ZpX{6JMPKc`R(iZtt$@jrLqbG%B8Z)SKIe}j)-v%%zk26n)3lQ3^>5S evZiSs6AuGh?ctErlb8KLg_) Date: Tue, 28 Jul 2015 16:49:40 +0900 Subject: [PATCH 09/16] modify user edit view according to v0.4 GUI doc - remove title divider - remove function button layer - locate require text under photo - add pin code text under name Change-Id: I4efcb5ab5c90d04399f1b910e305e8af8ed0ae85 Signed-off-by: Soohye Shin --- edje/view/useredit.edc | 281 +++++++++++++++++++++++++------------------------ 1 file changed, 141 insertions(+), 140 deletions(-) diff --git a/edje/view/useredit.edc b/edje/view/useredit.edc index 34dc7aa..b114ac1 100644 --- a/edje/view/useredit.edc +++ b/edje/view/useredit.edc @@ -46,56 +46,6 @@ group { } } part { - name, "divider.up"; - type, RECT; - scale, 1; - description { - state, "default" 0.0; - rel1 { - to, "title"; - relative, 0.0 1.0; - } - rel2.to, "title"; - min, 0 1; - fixed, 0 1; - align, 0.5 0.0; - color, 210 219 230 255; - } - } - part { - name, "function.btn"; - type, RECT; - scale, 1; - description { - rel1 { - to, "divider.up"; - relative, 0.0 1.0; - } - rel2.to, "divider.up"; - min, 0 114; - fixed, 0 1; - align, 0.5 0.0; - color, 221 231 242 255; - } - } - part { - name, "divider.down"; - type, RECT; - scale, 1; - description { - state, "default" 0.0; - rel1 { - to, "function.btn"; - relative, 0.0 1.0; - } - rel2.to, "function.btn"; - min, 0 1; - fixed, 0 1; - align, 0.5 0.0; - color, 210 219 230 255; - } - } - part { name, "action.btn"; type, RECT; scale, 1; @@ -165,7 +115,7 @@ group { description { state, "default" 0.0; rel1 { - to, "divider.down"; + to, "title"; relative, 0.0 1.0; } rel2 { @@ -190,7 +140,7 @@ group { to, "contents"; relative, 0.5 0.5; } - min, 1036 452; + min, 1128 408; fixed, 1 1; } } @@ -211,7 +161,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 1036 452; + min, 1128 408; visible, 0; } } @@ -334,6 +284,90 @@ group { } } part { + name, "pad.require"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_USER_EDIT_CONTENTS_PHOTO; + relative, 0.0 1.0; + } + rel2 { + to, PART_USER_EDIT_CONTENTS_PHOTO; + relative, 0.0 1.0; + } + min, 0 22; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, "icon.require"; + type, IMAGE; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.require"; + relative, 1.0 1.0; + } + rel2.to, "pad.require"; + min, 12 24; + fixed, 1 1; + align, 0.0 0.0; + image.normal, "ic_user_require_02.png"; + } + } + part { + name, "pad.require.text"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "icon.require"; + relative, 1.0 0.0; + } + rel2 { + to, "icon.require"; + relative, 1.0 0.0; + } + min, 6 0; + align, 0.0 0.0; + fixed, 1 1; + visible, 0; + } + } + part { + name, "require"; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.require.text"; + relative, 1.0 1.0; + } + rel2 { + to, "pad.require.text"; + relative, 1.0 1.0; + } + min, 294 24; + fixed, 1 1; + align, 0.0 0.0; + text { + font, "TizenSans"; + size, 24; + align, 0.0 0.5; + text, "Required fields"; + } + color, 64 136 211 255; + } + } + + part { name, "pad.profile"; type, RECT; scale, 1; @@ -354,7 +388,7 @@ group { } } part { - name, "information"; + name, "name"; type, TEXT; scale, 1; description { @@ -367,30 +401,30 @@ group { to, "pad.profile"; relative, 1.0 0.0; } - min, 180 32; + min, 95 32; fixed, 1 1; align, 0.0 0.0; text { font, "TizenSans"; size, 32; - text, "Information"; + text, "Name"; align, 0.0 0.5; } color, 77 77 77 255; } } part { - name, "information.require"; + name, "name.require"; type, IMAGE; scale, 1; description { state, "default" 0.0; rel1 { - to, "information"; + to, "name"; relative, 1.0 0.0; } rel2 { - to, "information"; + to, "name"; relative, 1.0 0.0; } min, 16 20; @@ -406,11 +440,11 @@ group { description { state, "default" 0.0; rel1 { - to, "information"; + to, "name"; relative, 0.0 1.0; } rel2 { - to, "information"; + to, "name"; relative, 0.0 1.0; } min, 0 22; @@ -450,190 +484,157 @@ group { to, PART_USER_EDIT_CONTENTS_NAME; relative, 0.0 1.0; } - min, 0 16; + min, 0 32; fixed, 1 1; align, 0.0 0.0; visible, 0; } } part { - name, PART_USER_EDIT_CONTENTS_PIN; - type, SWALLOW; + name, "pin"; + type, TEXT; scale, 1; description { state, "default" 0.0; rel1 { to, "pad.pin"; - relative, 1.0 1.0; - } - rel2.to, "pad.pin"; - min, 436 64; - fixed, 1 1; - align, 0.0 0.0; - } - } - part { - name, "pad.lock"; - type, RECT; - scale, 1; - description { - state, "default" 0.0; - rel1 { - to, PART_USER_EDIT_CONTENTS_PIN; relative, 0.0 1.0; } rel2 { - to, PART_USER_EDIT_CONTENTS_PIN; + to, "pad.pin"; relative, 0.0 1.0; } - min, 0 32; - fixed, 1 1; - align, 0.0 0.0; - visible, 0; - } - } - part { - name, "lock"; - type, TEXT; - scale, 1; - description { - state, "default" 0.0; - rel1 { - to, "pad.lock"; - relative, 1.0 1.0; - } - rel2.to, "pad.lock"; min, 436 32; fixed, 1 1; align, 0.0 0.0; text { + text, "Pin code"; font, "TizenSans"; size, 32; - text, "Privacy lock"; align, 0.0 0.5; } color, 77 77 77 255; } } part { - name, "pad.lock.down"; + name, "pad.pin.down"; type, RECT; scale, 1; description { state, "default" 0.0; rel1 { - to, "lock"; + to, "pin"; relative, 0.0 1.0; } rel2 { - to, "lock"; + to, "pin"; relative, 0.0 1.0; } min, 0 22; - fixed, 1 1; align, 0.0 0.0; + fixed, 1 1; visible, 0; } } part { - name, PART_USER_EDIT_CONTENTS_LOCK; + name, PART_USER_EDIT_CONTENTS_PIN; type, SWALLOW; scale, 1; description { state, "default" 0.0; rel1 { - to, "pad.lock.down"; + to, "pad.pin.down"; relative, 1.0 1.0; } - rel2.to, "pad.lock.down"; - min, 104 54; + rel2 { + to, "pad.pin.down"; + relative, 1.0 1.0; + } + min, 436 64; fixed, 1 1; align, 0.0 0.0; } } part { - name, "pad.require"; + name, "pad.lock"; type, RECT; scale, 1; description { state, "default" 0.0; rel1 { - to, PART_USER_EDIT_CONTENTS_LOCK; + to, PART_USER_EDIT_CONTENTS_PIN; relative, 0.0 1.0; } rel2 { - to, PART_USER_EDIT_CONTENTS_LOCK; + to, PART_USER_EDIT_CONTENTS_PIN; relative, 0.0 1.0; } - min, 0 22; + min, 0 32; fixed, 1 1; align, 0.0 0.0; visible, 0; } } part { - name, "icon.require"; - type, IMAGE; + name, "lock"; + type, TEXT; scale, 1; description { state, "default" 0.0; rel1 { - to, "pad.require"; + to, "pad.lock"; relative, 1.0 1.0; } - rel2.to, "pad.require"; - min, 12 24; + rel2.to, "pad.lock"; + min, 436 32; fixed, 1 1; align, 0.0 0.0; - image.normal, "ic_user_require_02.png"; + text { + font, "TizenSans"; + size, 32; + text, "Privacy lock"; + align, 0.0 0.5; + } + color, 77 77 77 255; } } part { - name, "pad.require.text"; + name, "pad.lock.down"; type, RECT; scale, 1; description { state, "default" 0.0; rel1 { - to, "icon.require"; - relative, 1.0 0.0; + to, "lock"; + relative, 0.0 1.0; } rel2 { - to, "icon.require"; - relative, 1.0 0.0; + to, "lock"; + relative, 0.0 1.0; } - min, 6 0; - align, 0.0 0.0; + min, 0 22; fixed, 1 1; + align, 0.0 0.0; visible, 0; } } part { - name, "require"; - type, TEXT; + name, PART_USER_EDIT_CONTENTS_LOCK; + type, SWALLOW; scale, 1; description { state, "default" 0.0; rel1 { - to, "pad.require.text"; - relative, 1.0 0.0; - } - rel2 { - to, "pad.require.text"; - relative, 1.0 0.0; + to, "pad.lock.down"; + relative, 1.0 1.0; } - min, 418 24; + rel2.to, "pad.lock.down"; + min, 104 54; fixed, 1 1; align, 0.0 0.0; - text { - font, "TizenSans"; - size, 24; - align, 0.0 0.5; - text, "Required fields"; - } - color, 64 136 211 255; } } + part { name, "pad.delete"; type, RECT; -- 2.7.4 From 9dea3b329d76d1f0c6e3c3cfeba26132a50d9047 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 28 Jul 2015 17:16:15 +0900 Subject: [PATCH 10/16] modify photo view according to v0.4 GUI doc - decrease swallow size to 3 line of grid Change-Id: I852e2d4accf2af18b3533684fb0f4ac692b1a9d7 Signed-off-by: Soohye Shin --- edje/view/photo.edc | 52 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/edje/view/photo.edc b/edje/view/photo.edc index b52550c..e3953d2 100644 --- a/edje/view/photo.edc +++ b/edje/view/photo.edc @@ -48,33 +48,51 @@ group { } } part { - name, "bottom"; + name, "bg"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "title"; + relative, 0.0 1.0; + } + fixed, 1 1; + color, 244 244 244 255; + } + } + part { + name, "pad.list.up"; type, RECT; scale, 1; description { state, "default" 0.0; - rel1.relative, 0.0 1.0; - min, 0 157; + rel1.to, "bg"; + rel2 { + to, "bg"; + relative, 1.0 0.0; + } + align, 0.5 0.0; fixed, 0 1; - align, 0.5 1.0; + min, 0 196; + visible, 0; } } part { - name, "bg"; + name, "pad.list.down"; type, RECT; scale, 1; description { state, "default" 0.0; rel1 { - to, "title"; + to, "bg"; relative, 0.0 1.0; } - rel2 { - to, "bottom"; - relative, 1.0 0.0; - } - fixed, 1 1; - color, 244 244 244 255; + rel2.to, "bg"; + fixed, 0 1; + min, 0 148; + align, 0.5 1.0; + visible, 0; } } part { @@ -83,8 +101,14 @@ group { scale, 1; description { state, "default" 0.0; - rel1.to, "bg"; - rel2.to, "bg"; + rel1 { + to, "pad.list.up"; + relative, 0.0 1.0; + } + rel2 { + to, "pad.list.down"; + relative, 1.0 0.0; + } fixed, 1 1; } } -- 2.7.4 From 5df81a5387b0b8990fa46866aa5300f7071e93d0 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 28 Jul 2015 19:07:16 +0900 Subject: [PATCH 11/16] bug fix - load default icon file when icon is null Change-Id: I8bfbc6513be78df851919fd8b2d04340fddffe9a Signed-off-by: Soohye Shin --- src/data/data_home.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/data/data_home.c b/src/data/data_home.c index 8c6ecf1..b6b9789 100644 --- a/src/data/data_home.c +++ b/src/data/data_home.c @@ -123,6 +123,10 @@ static void _get_login_user(char **name, char **icon, char **focus_icon) g_object_get(G_OBJECT(user), GUM_ATTR_NAME, name, GUM_ATTR_ICON, icon, NULL); + + if (!*icon || strlen(*icon) == 0) + *icon = IMAGE_USER_DEFAULT; + *focus_icon = (char *)utils_get_focus_icon_from_icon(*icon); g_object_unref(user); -- 2.7.4 From 376c897b1f50ac37d876a44de4d9bacc88bb696e Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 28 Jul 2015 20:25:20 +0900 Subject: [PATCH 12/16] bug fix - clear recent data when pressed enter key Change-Id: I132057cc1972d1f25b2e4933525ff543365536fd Signed-off-by: Soohye Shin --- src/data/data_recent.c | 2 +- src/view/view_recent.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/data_recent.c b/src/data/data_recent.c index 3d231b0..e497e8d 100644 --- a/src/data/data_recent.c +++ b/src/data/data_recent.c @@ -184,7 +184,7 @@ static void _select(struct datamgr_item *di) } } -void _clear(struct datamgr *dm) +static void _clear(struct datamgr *dm) { int r; diff --git a/src/view/view_recent.c b/src/view/view_recent.c index 9afbb96..73e1ed3 100644 --- a/src/view/view_recent.c +++ b/src/view/view_recent.c @@ -122,8 +122,8 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, case INPUT_HANDLER_TYPE_DELETE: priv = data; - if (!strcmp(ev->keyname, KEY_ENTER) || - !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) { elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); } else if (!strcmp(ev->keyname, KEY_ENTER) || -- 2.7.4 From cf1073abea575dfbcaf4dc857329091b8b8835e6 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 28 Jul 2015 21:00:44 +0900 Subject: [PATCH 13/16] set focus move policy from CLICK to IN Change-Id: Ifdf8be7ee67fb96900ac9e3dd0b9aed148046a73 Signed-off-by: Soohye Shin --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 9338fed..8e734d1 100644 --- a/src/main.c +++ b/src/main.c @@ -57,7 +57,7 @@ static bool _create(void *user_data) ad = user_data; elm_theme_overlay_add(NULL, THEMEFILE); - elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK); + elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_IN); win = _add_win(ad->name); if (!win) { -- 2.7.4 From 1daf973cb81b9eaf0d5dd3604b4ad3bb97758dc2 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Wed, 29 Jul 2015 16:54:30 +0900 Subject: [PATCH 14/16] add transition animation between home and user view Change-Id: I6d77ac5bcbea45a9c3b4ebdf5109507fdaa8875a Signed-off-by: Soohye Shin --- edje/view/home.edc | 45 ++++++++++++++++++++++++++++++++++++++++- edje/view/user.edc | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++-- include/defs.h | 3 +++ src/view/view_home.c | 21 ++++++++++++++++++-- src/view/view_user.c | 24 ++++++++++++++++++++-- 5 files changed, 142 insertions(+), 7 deletions(-) diff --git a/edje/view/home.edc b/edje/view/home.edc index e8df094..b72d4e2 100644 --- a/edje/view/home.edc +++ b/edje/view/home.edc @@ -104,8 +104,23 @@ group { } } part { + name, "clip"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + color, 0 0 0 0; + } + description { + state, "show" 0.0; + inherit, "default" 0.0; + color, 255 255 255 255; + } + } + part { name, PART_HOME_MENU_BAR; type, SWALLOW; + clip_to, "clip"; scale, 1; description { state, "default" 0.0; @@ -117,14 +132,42 @@ group { relative, 0.0 0.0; to, "pad.list"; } - fixed, 1 1; align, 0.5 1.0; + fixed, 1 1; + min, 0 158; + } + description { + state, "show" 0.0; + inherit, "default" 0.0; min, 948 158; } } } programs { program { + name, "sig,show"; + signal, SIG_SHOW; + source, SRC_PROG; + action, STATE_SET "show" 0.0; + transition, DECEL 0.3; + target, "clip"; + target, PART_HOME_MENU_BAR; + } + program { + name, "sig,hide"; + signal, SIG_HIDE; + source, SRC_PROG; + action, STATE_SET "default" 0.0; + transition, DECEL 0.3; + target, "clip"; + target, PART_HOME_MENU_BAR; + after, "sig,hide,done"; + } + program { + name, "sig,hide,done"; + action, SIGNAL_EMIT SIG_HIDE_DONE SRC_EDJE; + } + program { name, "sig,show,navigation"; signal, SIG_SHOW_NAVIGATION; source, SRC_PROG; diff --git a/edje/view/user.edc b/edje/view/user.edc index 8bcd7e3..0566560 100644 --- a/edje/view/user.edc +++ b/edje/view/user.edc @@ -51,9 +51,14 @@ group { font, "TizenSans"; size, 34; } - color, 255 255 255 178; + color, 0 0 0 0; color2, 0 0 0 255; } + description { + state, "show" 0.0; + inherit, "default" 0.0; + color, 255 255 255 178; + } } part { name, "pad.list"; @@ -76,9 +81,24 @@ group { } } part { + name, "clip"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + color, 0 0 0 0; + } + description { + state, "show" 0.0; + inherit, "default" 0.0; + color, 255 255 255 255; + } + } + part { name, PART_USER_BAR; type, SWALLOW; scale, 1; + clip_to, "clip"; description { state, "default" 0.0; rel1 { @@ -89,10 +109,42 @@ group { to, "pad.list"; relative, 1.0 1.0; } - min, 1422 228; + min, 0 228; align, 0.5 0.0; fixed, 1 1; } + description { + state, "show" 0.0; + inherit, "default" 0.0; + min, 1422 228; + } + } + } + programs { + program { + name, "sig,show"; + signal, SIG_SHOW; + source, SRC_PROG; + action, STATE_SET "show" 0.0; + transition, DECEL 0.3; + target, "clip"; + target, PART_USER_BAR; + target, "text"; + } + program { + name, "sig,hide"; + signal, SIG_HIDE; + source, SRC_PROG; + action, STATE_SET "default" 0.0; + transition, DECEL 0.3; + target, "clip"; + target, PART_USER_BAR; + target, "text"; + after, "sig,hide,done"; + } + program { + name, "sig,hide,done"; + action, SIGNAL_EMIT SIG_HIDE_DONE SRC_EDJE; } } } diff --git a/include/defs.h b/include/defs.h index dcb2a0e..bc98de7 100644 --- a/include/defs.h +++ b/include/defs.h @@ -115,6 +115,9 @@ #define SIG_HIDE_RECENT_DONE "sig.hide.recent.done" #define SIG_DISABLE "sig.disable" #define SIG_SHOW_MASK "sig.show.mask" +#define SIG_SHOW "sig.show" +#define SIG_HIDE "sig.hide" +#define SIG_HIDE_DONE "sig.hide.done" #define TITLE_WIDTH "title.width" diff --git a/src/view/view_home.c b/src/view/view_home.c index 3c06565..11dd94d 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -107,7 +107,10 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, viewmgr_push_view(VIEW_RECENT); } else if (!strcmp(ev->keyname, KEY_ENTER) || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { - datamgr_select_item(priv->dm, priv->foc->di); + if (priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) + elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG); + else + datamgr_select_item(priv->dm, priv->foc->di); } else if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) { /* It should be implemented later */ @@ -127,7 +130,10 @@ static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj, bi = data; priv = bi->priv; - datamgr_select_item(priv->dm, priv->foc->di); + if (priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) + elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG); + else + datamgr_select_item(priv->dm, priv->foc->di); break; case INPUT_HANDLER_TYPE_DOWN: viewmgr_push_view(VIEW_RECENT); @@ -290,6 +296,14 @@ static bool _add_home_menu(struct _priv *priv, Evas_Object *base) return true; } +static void _hide_done(void *data, Evas_Object *obj, const char *emission, + const char *source) +{ + struct _priv *priv = data; + + datamgr_select_item(priv->dm, priv->foc->di); +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -334,6 +348,8 @@ static Evas_Object *_create(Evas_Object *win, void *data) viewmgr_set_view_data(VIEW_HOME, priv); inputmgr_add_callback(base, INPUT_HANDLER_TYPE_BASE, &handler, priv); + elm_object_signal_callback_add(base, SIG_HIDE_DONE, SRC_EDJE, + _hide_done, priv); return base; } @@ -353,6 +369,7 @@ static void _show(void *data) evas_object_show(priv->base); elm_object_signal_emit(priv->base, SIG_SHOW_NAVIGATION, SRC_PROG); + elm_object_signal_emit(priv->base, SIG_SHOW, SRC_PROG); if (!priv->foc) priv->foc = eina_list_data_get(priv->list); diff --git a/src/view/view_user.c b/src/view/view_user.c index d13782e..22ad054 100644 --- a/src/view/view_user.c +++ b/src/view/view_user.c @@ -135,19 +135,24 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, priv = data; if (!strcmp(ev->keyname, KEY_ENTER) || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { + if (priv->foc->di->action == ITEM_SELECT_ACTION_POP) { + elm_object_signal_emit(priv->base, SIG_HIDE, + SRC_PROG); + return; + } + if ((priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) && (eina_list_count(priv->list) >= MAX_USER_COUNT)) { _add_popup(priv); return; } - viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_EDIT, NULL); datamgr_select_item(priv->dm, priv->foc->di); } else if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) { - viewmgr_pop_view(); + elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG); } else if (!strcmp(ev->keyname, KEY_DOWN)) { if (priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) return; @@ -175,6 +180,12 @@ static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj, switch (id) { case INPUT_HANDLER_TYPE_BASE: priv = data; + if (priv->foc->di->action == ITEM_SELECT_ACTION_POP) { + elm_object_signal_emit(priv->base, SIG_HIDE, + SRC_PROG); + return; + } + if ((priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) && (eina_list_count(priv->list) >= MAX_USER_COUNT)) { @@ -195,6 +206,12 @@ static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj, } } +static void _hide_done(void *data, Evas_Object *obj, const char *emission, + const char *source) +{ + viewmgr_pop_view(); +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -237,6 +254,8 @@ static Evas_Object *_create(Evas_Object *win, void *data) viewmgr_set_view_data(VIEW_USER, priv); viewmgr_add_view(view_user_edit_get_vclass(), dm); inputmgr_add_callback(base, INPUT_HANDLER_TYPE_BASE, &handler, priv); + elm_object_signal_callback_add(base, SIG_HIDE_DONE, SRC_EDJE, + _hide_done, NULL); return base; } @@ -369,6 +388,7 @@ static void _show(void *data) priv = data; evas_object_show(priv->base); + elm_object_signal_emit(priv->base, SIG_SHOW, SRC_PROG); _add_user(priv); -- 2.7.4 From e676149d7fd56ad16d78c47a34daed2ed246ba74 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Wed, 29 Jul 2015 19:13:00 +0900 Subject: [PATCH 15/16] support mouse handling to enter user edit view from user list Change-Id: I1a79ee5f841cb0e76af35be3f7ee19f647d8c01c Signed-off-by: Soohye Shin --- edje/view/baritem.edc | 18 +++++++++++++++++ edje/view/user.edc | 6 ++++++ include/defs.h | 2 ++ src/view/view_user.c | 56 ++++++++++++++++++++++++++++++++------------------- 4 files changed, 61 insertions(+), 21 deletions(-) diff --git a/edje/view/baritem.edc b/edje/view/baritem.edc index 5cf3693..805ec34 100644 --- a/edje/view/baritem.edc +++ b/edje/view/baritem.edc @@ -158,6 +158,18 @@ group { visible, 1; } } + part { + name, "click_item"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1.to, "pad"; + rel2.to, "pad"; + fixed, 1 1; + color, 0 0 0 0; + } + } } programs { program { @@ -256,5 +268,11 @@ group { set_state(PART:"mask_focus", "show", 0.0); } } + program { + name, "item,clicked"; + source, "click_item"; + signal, "mouse,clicked,1"; + action, SIGNAL_EMIT SIG_CLICK_ITEM SRC_EDJE; + } } } diff --git a/edje/view/user.edc b/edje/view/user.edc index 0566560..b7a8c1e 100644 --- a/edje/view/user.edc +++ b/edje/view/user.edc @@ -363,5 +363,11 @@ group { target, "text"; target, "arrow"; } + program { + name, "arrow,clicked"; + source, "arrow"; + signal, "mouse,clicked,1"; + action, SIGNAL_EMIT SIG_CLICK_ARROW SRC_EDJE; + } } } diff --git a/include/defs.h b/include/defs.h index bc98de7..73d131a 100644 --- a/include/defs.h +++ b/include/defs.h @@ -118,6 +118,8 @@ #define SIG_SHOW "sig.show" #define SIG_HIDE "sig.hide" #define SIG_HIDE_DONE "sig.hide.done" +#define SIG_CLICK_ITEM "sig.click.item" +#define SIG_CLICK_ARROW "sig.click.arrow" #define TITLE_WIDTH "title.width" diff --git a/src/view/view_user.c b/src/view/view_user.c index 22ad054..2557852 100644 --- a/src/view/view_user.c +++ b/src/view/view_user.c @@ -170,33 +170,12 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev) { - struct _priv *priv; - if (!data) { _ERR("Invalid argument"); return; } switch (id) { - case INPUT_HANDLER_TYPE_BASE: - priv = data; - if (priv->foc->di->action == ITEM_SELECT_ACTION_POP) { - elm_object_signal_emit(priv->base, SIG_HIDE, - SRC_PROG); - return; - } - - if ((priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) - && (eina_list_count(priv->list) - >= MAX_USER_COUNT)) { - _add_popup(priv); - return; - } - - viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_EDIT, - NULL); - datamgr_select_item(priv->dm, priv->foc->di); - break; case INPUT_HANDLER_TYPE_BUTTON: inputmgr_remove_callback(obj, &handler); evas_object_del(data); @@ -260,6 +239,38 @@ static Evas_Object *_create(Evas_Object *win, void *data) return base; } +static void _arrow_clicked(void *data, Evas_Object *obj, const char *emission, + const char *source) +{ + struct _priv *priv = data; + + if (priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) + return; + + viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_EDIT, priv->foc->di); + viewmgr_push_view(VIEW_USER_EDIT); +} + +static void _item_clicked(void *data, Evas_Object *obj, const char *emission, + const char *source) +{ + struct _priv *priv = data; + + if (priv->foc->di->action == ITEM_SELECT_ACTION_POP) { + elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG); + return; + } + + if ((priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) + && (eina_list_count(priv->list) >= MAX_USER_COUNT)) { + _add_popup(priv); + return; + } + + viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_EDIT, NULL); + datamgr_select_item(priv->dm, priv->foc->di); +} + static struct _bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, struct datamgr_item *di) { @@ -289,6 +300,8 @@ static struct _bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, PART_BAR_ITEM_TITLE_FOCUS); if (!focus_lbl) goto err; + + elm_object_signal_callback_add(eo, SIG_CLICK_ARROW, SRC_EDJE, _arrow_clicked, priv); } else { eo = utils_add_layout(box, GRP_BAR_ITEM, true, NULL); if (!eo) { @@ -317,6 +330,7 @@ static struct _bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, evas_object_size_hint_align_set(eo, 0.5, 0.0); inputmgr_add_callback(eo, INPUT_HANDLER_TYPE_EO, &handler, bi); + elm_object_signal_callback_add(eo, SIG_CLICK_ITEM, SRC_EDJE, _item_clicked, priv); elm_box_pack_end(box, eo); evas_object_show(eo); -- 2.7.4 From 6abc6143c9af31243c71f6e8b537f58eb31f8c2c Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Wed, 29 Jul 2015 21:23:19 +0900 Subject: [PATCH 16/16] modify settings pkg name in json file Change-Id: I2f576fc6f986d6d7d16d05773c80e63e11297769 Signed-off-by: Soohye Shin --- config/home.json.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/home.json.in b/config/home.json.in index 67d77c8..2bd542f 100644 --- a/config/home.json.in +++ b/config/home.json.in @@ -45,7 +45,7 @@ "icon": "@IMAGEDIR@/btn_menu_setting_nor.png", "focus_icon": "@IMAGEDIR@/btn_menu_setting_foc.png", "select_action": "launch", - "parameter": "org.tizen.settings", + "parameter": "org.tizen.settings-tv-ref", "notification": false } ] -- 2.7.4