#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;
}
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;
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);
}
}
+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)
Evas_Object *box;
Eina_List *list;
+ struct _bar_item *cur;
struct datamgr *dm;
};
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)
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);
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)
{
}
}
+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
};
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;
}
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);
_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);
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;
}
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)
_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)
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;