From 076bd48bb59327b16e49aa583ac28936dc5750df Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 30 Jun 2015 17:00:10 +0900 Subject: [PATCH] enable to clear recent app item - add key and focus input handler - modify recent delete edc for swallow icon - draw no contents when there is no recent item Change-Id: Ia374b6945b5103437bf09b25c51c6b0cf9d67458 Signed-off-by: Soohye Shin --- edje/view/recent.edc | 59 ++++++++++++-- images/btn_bar_clearall_dis.png | Bin 0 -> 3429 bytes images/btn_bar_clearall_foc.png | Bin 0 -> 3423 bytes images/btn_bar_clearall_nor.png | Bin 0 -> 3450 bytes include/datamgr.h | 2 + include/defs.h | 6 ++ src/data/data_recent.c | 27 +++++-- src/data/datamgr.c | 13 +++ src/view/view_recent.c | 174 ++++++++++++++++++++++++++++++---------- 9 files changed, 227 insertions(+), 54 deletions(-) create mode 100644 images/btn_bar_clearall_dis.png create mode 100644 images/btn_bar_clearall_foc.png create mode 100644 images/btn_bar_clearall_nor.png diff --git a/edje/view/recent.edc b/edje/view/recent.edc index b6d8352..aba105f 100644 --- a/edje/view/recent.edc +++ b/edje/view/recent.edc @@ -230,9 +230,6 @@ group { group { name, GRP_RECENT_DELETE; - images { - image, "btn_bar_clearall_nor.png" COMP; - } parts { part { name, "bg"; @@ -241,20 +238,68 @@ group { description { state, "default" 0.0; min, 82 104; - visible, 0; + color, 255 255 255 255; + } + description { + state, "focus" 0.0; + inherit, "default" 0.0; + color, 0 119 246 255; } } part { - name, "ico"; - type, IMAGE; + name, "clip"; + type, RECT; + description { + state, "default" 0.0; + color, 0 0 0 0; + } + description { + state, "focus" 0.0; + inherit, "default" 0.0; + color, 255 255 255 255; + } + } + part { + name, PART_RECENT_DELETE; + type, SWALLOW; scale, 1; description { state, "default" 0.0; rel1.to, "bg"; rel2.to, "bg"; - image.normal, "btn_bar_clearall_nor.png"; } } + part { + name, PART_RECENT_DELETE_FOCUS; + type, SWALLOW; + scale, 1; + clip_to, "clip"; + description { + state, "default" 0.0; + rel1.to, PART_RECENT_DELETE; + rel2.to, PART_RECENT_DELETE; + } + } + } + programs { + program { + name, "sig,focus"; + signal, SIG_FOCUS; + source, SRC_PROG; + action, STATE_SET "focus" 0.0; + transition, LINEAR 0.5; + target, "bg"; + target, "clip"; + } + program { + name, "sig,unfocus"; + signal, SIG_UNFOCUS; + source, SRC_PROG; + action, STATE_SET "default" 0.0; + transition, LINEAR 0.5; + target, "bg"; + target, "clip"; + } } } diff --git a/images/btn_bar_clearall_dis.png b/images/btn_bar_clearall_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..fb138eab9cc9ac2451abdfb0d0e2e252509a9174 GIT binary patch literal 3429 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 bIgtmBzlsG2JHo#&a}4ygO|+_^4ln)#q%C3b literal 0 HcmV?d00001 diff --git a/images/btn_bar_clearall_foc.png b/images/btn_bar_clearall_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..950c90178d54fd48abd3686fa2c0a4f0b134ddac GIT binary patch literal 3423 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 TT@ikAd)$DQn!aic%r@*lW>IS4 literal 0 HcmV?d00001 diff --git a/include/datamgr.h b/include/datamgr.h index ef0a272..853f14c 100644 --- a/include/datamgr.h +++ b/include/datamgr.h @@ -57,6 +57,7 @@ struct data_class { void (*fini)(struct datamgr *dm); void (*select)(struct datamgr_item *di); Eina_List *(*get_items)(struct datamgr *dm); + void (*clear)(struct datamgr *dm); /* It should be added later */ }; @@ -64,5 +65,6 @@ struct datamgr *datamgr_init(struct data_class *dclass, const char *view_id); void datamgr_fini(struct datamgr *dm); Eina_List *datamgr_get_items(struct datamgr *dm); void datamgr_select_item(struct datamgr *dm, struct datamgr_item *di); +void datamgr_clear_item(struct datamgr *dm); #endif /* __AIR_HOME_DATAMGR_H__ */ diff --git a/include/defs.h b/include/defs.h index cf2a209..b817842 100644 --- a/include/defs.h +++ b/include/defs.h @@ -58,6 +58,8 @@ #define PART_RECENT_THUMBNAIL "part.recent.thumbnail" #define PART_RECENT_ICON "part.recent.icon" #define PART_RECENT_FAVORITE "part.recent.favorite" +#define PART_RECENT_DELETE "part.recent.delete" +#define PART_RECENT_DELETE_FOCUS "part.recent.delete.focus" #define PART_USER_EDIT_TITLE "part.user.edit.title" #define PART_USER_EDIT_BTN_DONE "part.user.edit.btn.done" #define PART_USER_EDIT_BTN_CANCEL "part.user.edit.btn.cancel" @@ -132,5 +134,9 @@ #define IMAGE_USER_DEFAULT_07_FOCUS IMAGEDIR"/ic_user_07_foc.png" #define IMAGE_USER_CURRENT_DEFAULT IMAGEDIR"/ic_user_profile_current_01_nor.png" #define IMAGE_USER_CURRENT_DEFAULT_FOCUS IMAGEDIR"/ic_user_profile_current_01_foc.png" +#define IMAGE_RECENT_DELETE_NOR IMAGEDIR"/btn_bar_clearall_nor.png" +#define IMAGE_RECENT_DELETE_FOC IMAGEDIR"/btn_bar_clearall_foc.png" +#define IMAGE_RECENT_DELETE_DIS IMAGEDIR"/btn_bar_clearall_dis.png" +#define IMAGE_RECENT_APP IMAGEDIR"/ic_thumbnail_app.png" #endif /* __AIR_HOME_DEFS_H__ */ diff --git a/src/data/data_recent.c b/src/data/data_recent.c index 460a06a..7a3c84d 100644 --- a/src/data/data_recent.c +++ b/src/data/data_recent.c @@ -24,12 +24,13 @@ #include "data_recent.h" #include "datamgr.h" #include "utils.h" +#include "defs.h" /* FIXME: change default thumbnail */ #define THUMB_DEFAULT "/usr/share/icons/default/small/apps_img_app_default_4x2.png" -static struct datamgr_item *_new_datamgr_item(char *title, char *icon, - char *parameter, enum recent_item_type type) +static struct datamgr_item *_new_datamgr_item(char *title, char *thumb, + char *parameter, char *icon, enum recent_item_type type) { struct datamgr_item *di; @@ -40,7 +41,8 @@ static struct datamgr_item *_new_datamgr_item(char *title, char *icon, } di->title = strdup(title); - di->icon = strdup(icon); + di->icon = strdup(thumb); + di->focus_icon = strdup(icon); di->rtype = type; di->parameter = strdup(parameter); di->action = ITEM_SELECT_ACTION_LAUNCH; @@ -87,7 +89,8 @@ static void _app_list_foreach(gpointer data, gpointer user_data) if (!strcmp(thumb_land, "")) thumb_land = THUMB_DEFAULT; - di = _new_datamgr_item(label, thumb_land, rdata->id, RECENT_ITEM_ICON); + di = _new_datamgr_item(label, thumb_land, rdata->id, IMAGE_RECENT_APP, + RECENT_ITEM_ICON); if (di) dm->list = eina_list_append(dm->list, di); @@ -181,11 +184,25 @@ static void _select(struct datamgr_item *di) } } +void _clear(struct datamgr *dm) +{ + int r; + + r = app_contents_recent_clear(CONTENTS_APP); + if (r != APP_CONTENTS_ERROR_NONE) { + _ERR("failed to clear app recent"); + return; + } + + /* It should be implemeted later about media contents */ +} + static struct data_class dclass = { .init = _init, .fini = _fini, .get_items = _get_items, - .select = _select + .select = _select, + .clear = _clear }; struct data_class *datamgr_recent_get_dclass(void) diff --git a/src/data/datamgr.c b/src/data/datamgr.c index a9d398b..ac19f2d 100644 --- a/src/data/datamgr.c +++ b/src/data/datamgr.c @@ -85,3 +85,16 @@ void datamgr_select_item(struct datamgr *dm, struct datamgr_item *di) dm->dclass->select(di); } + +void datamgr_clear_item(struct datamgr *dm) +{ + if (!dm || !dm->dclass) { + _ERR("Invalid argument"); + return; + } + + if (!dm->dclass->clear) + return; + + dm->dclass->clear(dm); +} diff --git a/src/view/view_recent.c b/src/view/view_recent.c index cbc981f..c644ce2 100644 --- a/src/view/view_recent.c +++ b/src/view/view_recent.c @@ -37,6 +37,7 @@ struct _priv { Evas_Object *box; Eina_List *list; + struct _bar_item *cur; struct datamgr *dm; }; @@ -47,26 +48,106 @@ struct _bar_item { struct _priv *priv; }; -static bool _add_delete_btn(struct _priv *priv, Evas_Object *base) +static void _btn_focused(int id, void *data, Evas_Object *obj, + Elm_Object_Item *item) +{ + elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG); +} + +static void _unfocused(int id, void *data, Evas_Object *obj, + Elm_Object_Item *item) +{ + elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG); +} + +static void _hide_done(void *data, Evas_Object *obj, const char *emission, + const char *source) +{ + viewmgr_pop_view(); +} + +static void _dis_btn_key_down(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + struct _priv *priv; + + if (!data) + return; + + priv = data; + + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE) || + !strcmp(ev->keyname, KEY_DOWN)) { + elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); + } +} + +static input_handler dis_btn_handler = { + .key_down = _dis_btn_key_down +}; + +static void _btn_key_down(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + struct _priv *priv; + + if (!data) + return; + + priv = data; + + 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) || + !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { + datamgr_clear_item(priv->dm); + elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); + } else if (!strcmp(ev->keyname, KEY_DOWN)) { + if (!priv->cur) + priv->cur = eina_list_data_get(priv->list); + elm_object_focus_set(priv->cur->eo, EINA_TRUE); + } +} + +static input_handler btn_handler = { + .focused = _btn_focused, + .unfocused = _unfocused, + .key_down = _btn_key_down +}; + +static void _add_delete_btn(struct _priv *priv, const char *ic_image, + const char *focus_ic_image, input_handler *handler) { - Evas_Object *btn; + Evas_Object *btn, *ic, *focus_ic; - btn = utils_add_layout(base, GRP_RECENT_DELETE, true, + btn = utils_add_layout(priv->base, GRP_RECENT_DELETE, true, PART_RECENT_DELETE_ICON); if (!btn) { _ERR("failed to add delete icon"); - return false; + return; } + evas_object_show(btn); - priv->del_btn = btn; + ic = utils_add_icon(btn, ic_image, PART_RECENT_DELETE); + if (!ic) { + _ERR("failed to add icon"); + evas_object_del(btn); + return; + } - return true; -} + focus_ic = utils_add_icon(btn, focus_ic_image, + PART_RECENT_DELETE_FOCUS); + if (!focus_ic) { + _ERR("failed to add focus icon"); + evas_object_del(btn); + return; + } -static void _hide_done(void *data, Evas_Object *obj, const char *emission, - const char *source) -{ - viewmgr_pop_view(); + inputmgr_add_callback(btn, 0, handler, priv); + + priv->del_btn = btn; } static Evas_Object *_create(Evas_Object *win, void *data) @@ -108,14 +189,6 @@ static Evas_Object *_create(Evas_Object *win, void *data) priv->base = base; priv->dm = dm; - if (!_add_delete_btn(priv, base)) { - _ERR("failed to add recent"); - evas_object_del(base); - datamgr_fini(dm); - free(priv); - return NULL; - } - viewmgr_set_view_data(VIEW_RECENT, priv); elm_object_signal_callback_add(base, SIG_HIDE_RECENT_DONE, SRC_EDJE, _hide_done, NULL); @@ -123,18 +196,6 @@ static Evas_Object *_create(Evas_Object *win, void *data) return base; } -static void _focused(int id, void *data, Evas_Object *obj, - Elm_Object_Item *item) -{ - elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG); -} - -static void _unfocused(int id, void *data, Evas_Object *obj, - Elm_Object_Item *item) -{ - elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG); -} - static void _eo_key_down(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { @@ -156,8 +217,22 @@ static void _eo_key_down(int id, void *data, Evas *e, Evas_Object *obj, } } +static void _eo_focused(int id, void *data, Evas_Object *obj, + Elm_Object_Item *item) +{ + struct _bar_item *bi; + + if (!data) + return; + + elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG); + + bi = data; + bi->priv->cur = bi; +} + static input_handler eo_handler = { - .focused = _focused, + .focused = _eo_focused, .unfocused = _unfocused, .key_down = _eo_key_down }; @@ -165,7 +240,7 @@ static input_handler eo_handler = { static struct _bar_item *_pack_item(struct _priv *priv, Evas_Object *box, struct datamgr_item *di) { - Evas_Object *eo, *lbl, *sub_lbl, *ic; + Evas_Object *eo, *lbl, *sub_lbl, *thumb, *ic; struct _bar_item *bi; const char *group; @@ -194,14 +269,18 @@ static struct _bar_item *_pack_item(struct _priv *priv, Evas_Object *box, } evas_object_show(eo); - ic = utils_add_icon(eo, di->icon, PART_RECENT_THUMBNAIL); - if (!ic) { - _ERR("failed to add icon"); + thumb = utils_add_icon(eo, di->icon, PART_RECENT_THUMBNAIL); + if (!thumb) { + _ERR("failed to add thumb"); evas_object_del(eo); free(bi); return NULL; } - elm_image_fill_outside_set(ic, EINA_TRUE); + elm_image_fill_outside_set(thumb, EINA_TRUE); + + ic = utils_add_icon(eo, di->focus_icon, PART_RECENT_ICON); + if (!ic) + _ERR("failed to add icon"); lbl = utils_add_label(eo, di->title, STYLE_LABEL_RECENT_TITLE, PART_RECENT_TITLE); @@ -220,6 +299,7 @@ static struct _bar_item *_pack_item(struct _priv *priv, Evas_Object *box, _ERR("failed to add sub title"); } + elm_object_focus_next_object_set(eo, priv->del_btn, ELM_FOCUS_UP); inputmgr_add_callback(eo, 0, &eo_handler, bi); elm_box_pack_end(box, eo); @@ -240,6 +320,8 @@ static void _load_recent(struct _priv *priv) if (!list) { elm_object_part_text_set(priv->base, PART_RECENT_NO_CONTENTS, MESSAGE_NO_CONTENTS); + _add_delete_btn(priv, IMAGE_RECENT_DELETE_DIS, + IMAGE_RECENT_DELETE_DIS, &dis_btn_handler); return; } @@ -260,6 +342,9 @@ static void _load_recent(struct _priv *priv) elm_object_part_text_set(priv->base, PART_RECENT_NO_CONTENTS, ""); elm_box_padding_set(box, PADDING_BOX * elm_config_scale_get(), 0); + _add_delete_btn(priv, IMAGE_RECENT_DELETE_NOR, IMAGE_RECENT_DELETE_FOC, + &btn_handler); + EINA_LIST_FOREACH(list, l, di) { bi = _pack_item(priv, box, di); if (!bi) @@ -289,11 +374,12 @@ static void _show(void *data) _load_recent(priv); - if (!priv->list) - return; - - bi = eina_list_data_get(priv->list); - elm_object_focus_set(bi->eo, EINA_TRUE); + if (!priv->list) { + elm_object_focus_set(priv->del_btn, EINA_TRUE); + } else { + bi = eina_list_data_get(priv->list); + elm_object_focus_set(bi->eo, EINA_TRUE); + } } static void _unload_recent(struct _priv *priv) @@ -308,6 +394,10 @@ static void _unload_recent(struct _priv *priv) elm_box_clear(priv->box); evas_object_del(priv->scr); + inputmgr_remove_callback(priv->del_btn, &btn_handler); + evas_object_del(priv->del_btn); + + priv->del_btn = NULL; priv->box = NULL; priv->scr = NULL; priv->list = NULL; -- 2.7.4