From 73f71371d7592c0aa5885b8929cb32d203a7dc4f Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Thu, 3 Dec 2015 17:06:31 +0900 Subject: [PATCH 01/16] disable action menu Change-Id: Ib5815a329b7b3be35eeef4809d06f8fb64c0b387 Signed-off-by: Jehun Lim --- src/util/listmgr.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/src/util/listmgr.c b/src/util/listmgr.c index b3e8d34..99dc3fd 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -120,15 +120,9 @@ static void _view_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *ei) static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { - struct listmgr *lmgr; - struct play_info_data *pdata; - struct grid_data *gdata; - - if (!data || !obj || !ev) + if (!obj || !ev) return; - lmgr = data; - switch (id) { case LISTMGR_INDEX: if (!strcmp(ev->keyname, KEY_BACK) || @@ -139,24 +133,11 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC)) elm_object_focus_next(obj, ELM_FOCUS_UP); - else { - pdata = lmgr->data->pdata; - if (pdata->key_down_cb) - pdata->key_down_cb(pdata->cb_data, obj, ev); - } - break; case LISTMGR_GRID: if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC)) elm_object_focus_next(obj, ELM_FOCUS_UP); - else { - gdata = lmgr->data->gdata; - if (gdata->key_down_cb) - gdata->key_down_cb(gdata->data, - lmgr->focused_it, ev); - } - break; default: break; -- 2.7.4 From 1369e843cb53187d125ff530e5f6540028c96cbc Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Fri, 4 Dec 2015 14:27:35 +0900 Subject: [PATCH 02/16] base: add source button Change-Id: I68b4d7a97ae94bfded5189a2d0effcd895e16baf Signed-off-by: Jehun Lim --- include/view/base.h | 1 + res/edc/view/base.edc | 32 +++++++++++++++++++++++ src/view/base.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 101 insertions(+), 3 deletions(-) diff --git a/include/view/base.h b/include/view/base.h index 22d7073..06b5959 100644 --- a/include/view/base.h +++ b/include/view/base.h @@ -29,6 +29,7 @@ #define PART_BASE_MENU_AREA "part.base_menu_area" #define PART_BASE_THUMBNAIL_AREA "part.base_thumbnail_area" #define PART_BASE_VIEW_MODE "part.base_view_mode" +#define PART_BASE_SOURCE "part.base_source" #define PART_BASE_CONTENT_INFO "part.base_content_info" #define PART_ITEM_TITLE "part.item_title" diff --git a/res/edc/view/base.edc b/res/edc/view/base.edc index 9b4f346..e0290e3 100644 --- a/res/edc/view/base.edc +++ b/res/edc/view/base.edc @@ -221,6 +221,38 @@ group { color: COLOR_TEXT_INDEX; } } + part { + name: "padding_source"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "bottom_area"; + relative: 1.0 0.0; + } + rel2.to: "bottom_area"; + min: 62 0; + align: 1.0 0.5; + fixed: 1 0; + } + } + part { + name: PART_BASE_SOURCE; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "padding_source"; + rel2 { + to: "padding_source"; + relative: 0.0 1.0; + } + min: 218 0; + align: 1.0 0.5; + fixed: 1 0; + } + } /* CURTAIN */ part { diff --git a/src/view/base.c b/src/view/base.c index 4aa3680..111b3ef 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -44,7 +44,8 @@ enum _object_type { BASE_MENU_BTN = 0, - BASE_VIEW_BTN + BASE_VIEW_BTN, + BASE_SOURCE_BTN }; enum _layout_type { @@ -59,6 +60,7 @@ struct _priv { Evas_Object *base; Evas_Object *menu_btn[E_LAYOUT_MAX]; Evas_Object *view_btn; + Evas_Object *source_btn; Evas_Object *focused_btn; @@ -73,6 +75,7 @@ struct _priv { int current_layout; int view_mode[E_LAYOUT_MAX]; + int source_type; }; const char *view_mode_movie[] = { @@ -97,6 +100,11 @@ const char *view_mode_music[] = { "Folder" }; +const char *source[] = { + "TV", + "USB", +}; + struct _menu_item { const char *name; const char *layout_id; @@ -142,6 +150,8 @@ static void _set_current_layout(struct _priv *priv, int layout) elm_object_text_set(priv->view_btn, g_menu_item[layout].text_view_mode[mode]); + elm_object_text_set(priv->source_btn, source[priv->source_type]); + if (priv->focused_btn) elm_object_signal_emit(priv->focused_btn, SIG_BTN_UNSELECTED, SIG_SOURCE_SRC); @@ -197,6 +207,11 @@ static void _view_selected_cb(void *data, int mode) priv->view_mode[cur] = mode; } +static void _source_selected_cb(void *data, int mode) +{ + /* It will be implemented later */ +} + static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { @@ -274,6 +289,30 @@ static void _view_btn_clicked(struct _priv *priv) priv->cpopup = cpopup; } +static void _source_btn_clicked(struct _priv *priv) +{ + struct ctxpopup *cpopup; + int x, y, w, h; + + elm_object_signal_emit(priv->source_btn, SIG_BTN_SELECTED, + SIG_SOURCE_SRC); + + cpopup = ctxpopup_create(priv->base, STYLE_CTXPOPUP_VIEW_MODE, + STYLE_BTN_VIEW_OPTION, source, ARRAY_SIZE(source), + priv->source_type); + if (!cpopup) { + _ERR("failed to create ctxpopup"); + return; + } + + ctxpopup_set_callback(cpopup, _source_selected_cb, priv); + + evas_object_geometry_get(priv->source_btn, &x, &y, &w, &h); + ctxpopup_show(cpopup, x + (w / 2), y); + + priv->cpopup = cpopup; +} + static void _clicked_cb(int id, void *data, Evas_Object *obj) { struct _priv *priv; @@ -289,6 +328,9 @@ static void _clicked_cb(int id, void *data, Evas_Object *obj) case BASE_VIEW_BTN: _view_btn_clicked(priv); break; + case BASE_SOURCE_BTN: + _source_btn_clicked(priv); + break; default: break; } @@ -634,13 +676,33 @@ static bool _draw_view_mode_btn(struct _priv *priv) elm_object_part_content_set(priv->base, PART_BASE_VIEW_MODE, btn); - elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT); - priv->view_btn = btn; return true; } +static bool _draw_source_btn(struct _priv *priv) +{ + Evas_Object *btn; + + btn = util_add_button(priv->base, STYLE_BTN_VIEW_MODE, NULL); + if (!btn) { + _ERR("failed to add button object"); + return false; + } + + inputmgr_add_callback(btn, BASE_SOURCE_BTN, &handler, priv); + + elm_object_part_content_set(priv->base, PART_BASE_SOURCE, btn); + + priv->source_btn = btn; + + elm_object_focus_next_object_set(btn, priv->view_btn, ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(priv->view_btn, btn, ELM_FOCUS_RIGHT); + + return true; +} + static bool _draw_items(struct _priv *priv) { if (!priv) @@ -655,6 +717,9 @@ static bool _draw_items(struct _priv *priv) if (!_draw_view_mode_btn(priv)) return false; + if (!_draw_source_btn(priv)) + return false; + return true; } -- 2.7.4 From ccfa3fff423d1097ae8b3299b33005d5eb304f6f Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Mon, 7 Dec 2015 16:02:08 +0900 Subject: [PATCH 03/16] datamgr: add function to set source type Change-Id: I2ba6f265df4c21b80d909b914a198a0b7b28e073 Signed-off-by: Jehun Lim --- include/data/datamgr.h | 3 ++- src/data/albumdata.c | 35 +++++++++++++++++-------- src/data/folderdata.c | 35 +++++++++++++++++-------- src/data/mediadata.c | 69 +++++++++++++++++++++++++++++++++----------------- 4 files changed, 96 insertions(+), 46 deletions(-) diff --git a/include/data/datamgr.h b/include/data/datamgr.h index 158ace4..d7e30cf 100644 --- a/include/data/datamgr.h +++ b/include/data/datamgr.h @@ -22,7 +22,7 @@ #include "data/folderdata.h" #define MOVIE_MEDIA_COND "media_type=1 AND copyright!=\"Unknown\"" -#define GALLERY_MEDIA_COND "media_type=0 OR (media_type=1 AND copyright=\"Unknown\")" +#define GALLERY_MEDIA_COND "(media_type=0 OR (media_type=1 AND copyright=\"Unknown\"))" #define MUSIC_MEDIA_COND "media_type=3" enum data_type { @@ -46,6 +46,7 @@ struct data_ops { Eina_List *(*get_group)(void *handle, int type, void *data); void (*free_group)(Eina_List *list); int (*get_count)(void *handle, int type); + void (*set_source)(void *handle, int source_type); }; struct datamgr { diff --git a/src/data/albumdata.c b/src/data/albumdata.c index a81f3a0..b3cd8ef 100644 --- a/src/data/albumdata.c +++ b/src/data/albumdata.c @@ -91,23 +91,16 @@ static bool _create_filter(struct albumdata *ad, filter_h *filter, return false; } - snprintf(buf, sizeof(buf), "%s", ad->media_type); + snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", + ad->media_type, ad->source_type); - if (ad->source_type != E_SOURCE_ALL) { + if (cond) { char s1[64]; - snprintf(s1, sizeof(s1), " AND MEDIA_STORAGE_TYPE=%d", - ad->source_type); + snprintf(s1, sizeof(s1), " AND %s", cond); strncat(buf, s1, strlen(s1)); } - if (cond) { - char s2[64]; - - snprintf(s2, sizeof(s2), " AND %s", cond); - strncat(buf, s2, strlen(s2)); - } - media_filter_set_condition(tmp_filter, buf, MEDIA_CONTENT_COLLATE_DEFAULT); @@ -597,6 +590,25 @@ static Eina_List *_get_group(void *handle, int type, void *data) return list; } +static void _set_source(void *handle, int source_type) +{ + struct albumdata *ad; + + if (!handle) { + _ERR("failed to get albumdata handle"); + return; + } + + if (source_type < 0 || source_type >= E_SOURCE_MAX) { + _ERR("invalid argument"); + return; + } + + ad = handle; + + ad->source_type = source_type; +} + static struct data_ops _ops = { .create = _create, .destroy = _destroy, @@ -604,6 +616,7 @@ static struct data_ops _ops = { .get_count = _get_count, .get_group = _get_group, .free_group = _free_group, + .set_source = _set_source, }; struct data_ops *albumdata_get_ops(void) diff --git a/src/data/folderdata.c b/src/data/folderdata.c index bd9ad40..678fb51 100644 --- a/src/data/folderdata.c +++ b/src/data/folderdata.c @@ -88,23 +88,16 @@ static bool _create_filter(struct folderdata *fd, filter_h *filter, media_filter_set_order(tmp_filter, MEDIA_CONTENT_ORDER_ASC, FOLDER_NAME, MEDIA_CONTENT_COLLATE_DEFAULT); } else { - snprintf(buf, sizeof(buf), "%s", fd->media_type); + snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", + fd->media_type, fd->source_type); - if (fd->source_type != E_SOURCE_ALL) { + if (cond) { char s1[256]; - snprintf(s1, sizeof(s1), " AND MEDIA_STORAGE_TYPE=%d", - fd->source_type); + snprintf(s1, sizeof(s1), " AND %s", cond); strncat(buf, s1, strlen(s1)); } - if (cond) { - char s2[256]; - - snprintf(s2, sizeof(s2), " AND %s", cond); - strncat(buf, s2, strlen(s2)); - } - media_filter_set_order(tmp_filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_TITLE, MEDIA_CONTENT_COLLATE_DEFAULT); @@ -599,6 +592,25 @@ static Eina_List *_get_group(void *handle, int type, void *data) return list; } +static void _set_source(void *handle, int source_type) +{ + struct folderdata *fd; + + if (!handle) { + _ERR("failed to get folderdata handle"); + return; + } + + if (source_type < 0 || source_type >= E_SOURCE_MAX) { + _ERR("invalid argument"); + return; + } + + fd = handle; + + fd->source_type = source_type; +} + static struct data_ops _ops = { .create = _create, .destroy = _destroy, @@ -606,6 +618,7 @@ static struct data_ops _ops = { .get_count = _get_count, .get_group = _get_group, .free_group = _free_group, + .set_source = _set_source, }; struct data_ops *folderdata_get_ops(void) diff --git a/src/data/mediadata.c b/src/data/mediadata.c index 524da10..fa4dba9 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -113,15 +113,8 @@ static bool _create_filter(struct mediadata *md, filter_h *filter) return false; } - snprintf(buf, sizeof(buf), "%s", md->media_type); - - if (md->source_type != E_SOURCE_ALL) { - char s[64]; - - snprintf(s, sizeof(s), " AND MEDIA_STORAGE_TYPE=%d", - md->source_type); - strncat(buf, s, strlen(s)); - } + snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", + md->media_type, md->source_type); media_filter_set_condition(tmp_filter, buf, MEDIA_CONTENT_COLLATE_DEFAULT); @@ -485,6 +478,14 @@ static Eina_List *_sort_list(Eina_List *list, int sort) return sorted_list; } +static void _destroy_media_list(Eina_List *list) +{ + app_media *am; + + EINA_LIST_FREE(list, am) + app_media_destroy(am); +} + static bool _get_each_media_info(media_info_h media_h, void *data) { Eina_List **list; @@ -512,6 +513,17 @@ static bool _get_medialist(struct mediadata *md) filter_h filter; int ret; + ret = media_content_connect(); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + _ERR("failed to connect to media content"); + return false; + } + + if (md->media_list) { + _destroy_media_list(md->media_list); + md->media_list = NULL; + } + if (!_create_filter(md, &filter)) { _ERR("failed to create filter"); return false; @@ -530,13 +542,14 @@ static bool _get_medialist(struct mediadata *md) media_filter_destroy(filter); + media_content_disconnect(); + return true; } static void *_create(const char *media_type, int source_type) { struct mediadata *md; - int ret; if (!media_type || source_type < 0 || source_type >= E_SOURCE_MAX) { _ERR("invalid argument"); @@ -552,28 +565,17 @@ static void *_create(const char *media_type, int source_type) md->media_type = media_type; md->source_type = source_type; - ret = media_content_connect(); - if (ret != MEDIA_CONTENT_ERROR_NONE) { - _ERR("failed to connect to media content"); - free(md); - return NULL; - } - if (!_get_medialist(md)) { _ERR("failed to get medialist"); free(md); - media_content_disconnect(); return NULL; } - media_content_disconnect(); - return (void *)md; } static void _destroy(void *handle) { - app_media *am; struct mediadata *md; if (!handle) { @@ -583,8 +585,7 @@ static void _destroy(void *handle) md = handle; - EINA_LIST_FREE(md->media_list, am) - app_media_destroy(am); + _destroy_media_list(md->media_list); free(md); } @@ -698,6 +699,27 @@ static Eina_List *_get_group(void *handle, int type, void *data) return list; } +static void _set_source(void *handle, int source_type) +{ + struct mediadata *md; + + if (!handle) { + _ERR("failed to get mediadata handle"); + return; + } + + if (source_type < 0 || source_type >= E_SOURCE_MAX) { + _ERR("invalid argument"); + return; + } + + md = handle; + + md->source_type = source_type; + + _get_medialist(md); +} + static struct data_ops _ops = { .create = _create, .destroy = _destroy, @@ -705,6 +727,7 @@ static struct data_ops _ops = { .get_count = _get_count, .get_group = _get_group, .free_group = _free_group, + .set_source = _set_source, }; struct data_ops *mediadata_get_ops(void) -- 2.7.4 From f5674be3e2661a02625b97ab55d0ba2ea5b2a56e Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Mon, 7 Dec 2015 16:19:43 +0900 Subject: [PATCH 04/16] base: add source selected callback Change-Id: I0b2500f1d9e1677155099b075ea472cf6d177b2a Signed-off-by: Jehun Lim --- include/data/datamgr.h | 6 ++---- include/view.h | 1 + src/data/albumdata.c | 7 +------ src/data/datamgr.c | 3 +-- src/data/folderdata.c | 7 +------ src/data/mediadata.c | 7 +------ src/layout/gallery.c | 28 +++++++++++++++++++++++++++- src/layout/movie.c | 28 +++++++++++++++++++++++++++- src/layout/music.c | 36 +++++++++++++++++++++++++++++++++++- src/view/base.c | 27 ++++++++++++++++++++++++++- src/view/detail.c | 3 ++- 11 files changed, 124 insertions(+), 29 deletions(-) diff --git a/include/data/datamgr.h b/include/data/datamgr.h index d7e30cf..682eb77 100644 --- a/include/data/datamgr.h +++ b/include/data/datamgr.h @@ -33,10 +33,8 @@ enum data_type { }; enum source_type { - E_SOURCE_INTERNAL = 0, - E_SOURCE_EXTERNAL, - E_SOURCE_ALL, - E_SOURCE_MAX + E_SOURCE_INTERNAL = MEDIA_CONTENT_STORAGE_INTERNAL, + E_SOURCE_EXTERNAL = MEDIA_CONTENT_STORAGE_EXTERNAL_USB }; struct data_ops { diff --git a/include/view.h b/include/view.h index 78c2ed5..1c02d79 100644 --- a/include/view.h +++ b/include/view.h @@ -55,6 +55,7 @@ enum update_type { UPDATE_RECENT, UPDATE_FOCUS_STATE, UPDATE_VIEW_MODE, + UPDATE_SOURCE_TYPE, UPDATE_TOAST }; diff --git a/src/data/albumdata.c b/src/data/albumdata.c index b3cd8ef..8a6acc8 100644 --- a/src/data/albumdata.c +++ b/src/data/albumdata.c @@ -416,7 +416,7 @@ static void *_create(const char *media_type, int source_type) { struct albumdata *ad; - if (!media_type || source_type < 0 || source_type >= E_SOURCE_MAX) { + if (!media_type) { _ERR("invalid argument"); return NULL; } @@ -599,11 +599,6 @@ static void _set_source(void *handle, int source_type) return; } - if (source_type < 0 || source_type >= E_SOURCE_MAX) { - _ERR("invalid argument"); - return; - } - ad = handle; ad->source_type = source_type; diff --git a/src/data/datamgr.c b/src/data/datamgr.c index 162aa28..6108562 100644 --- a/src/data/datamgr.c +++ b/src/data/datamgr.c @@ -44,8 +44,7 @@ struct datamgr *datamgr_create(int data_type, const char *media_type, struct data_ops *ops; void *handle; - if (!media_type || data_type < 0 || data_type >= E_DATA_MAX || - source_type < 0 || source_type >= E_SOURCE_MAX) { + if (!media_type || data_type < 0 || data_type >= E_DATA_MAX) { _ERR("invalid argument"); return NULL; } diff --git a/src/data/folderdata.c b/src/data/folderdata.c index 678fb51..2335653 100644 --- a/src/data/folderdata.c +++ b/src/data/folderdata.c @@ -434,7 +434,7 @@ static void *_create(const char *media_type, int source_type) { struct folderdata *fd; - if (!media_type || source_type < 0 || source_type >= E_SOURCE_MAX) { + if (!media_type) { _ERR("invalid argument"); return NULL; } @@ -601,11 +601,6 @@ static void _set_source(void *handle, int source_type) return; } - if (source_type < 0 || source_type >= E_SOURCE_MAX) { - _ERR("invalid argument"); - return; - } - fd = handle; fd->source_type = source_type; diff --git a/src/data/mediadata.c b/src/data/mediadata.c index fa4dba9..b46a16c 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -551,7 +551,7 @@ static void *_create(const char *media_type, int source_type) { struct mediadata *md; - if (!media_type || source_type < 0 || source_type >= E_SOURCE_MAX) { + if (!media_type) { _ERR("invalid argument"); return NULL; } @@ -708,11 +708,6 @@ static void _set_source(void *handle, int source_type) return; } - if (source_type < 0 || source_type >= E_SOURCE_MAX) { - _ERR("invalid argument"); - return; - } - md = handle; md->source_type = source_type; diff --git a/src/layout/gallery.c b/src/layout/gallery.c index de3bf61..7ba53eb 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -59,6 +59,8 @@ struct _priv { Eina_List *media_list; int view_mode; + int source_type; + struct grid_data *gdata; struct locmgr *locmgr; @@ -126,6 +128,8 @@ static void _clear_content_list(struct _priv *priv) priv->media_list = NULL; } + elm_object_part_text_set(priv->layout, PART_NOCONTENT, ""); + listmgr_clear_content_list(priv->listmgr); } @@ -220,7 +224,7 @@ static bool _create_utils(struct _priv *priv) int i; for (i = 0; i < E_DATA_MAX; i++) { - dmgr = datamgr_create(i, GALLERY_MEDIA_COND, E_SOURCE_ALL); + dmgr = datamgr_create(i, GALLERY_MEDIA_COND, E_SOURCE_INTERNAL); if (!dmgr) { _ERR("failed to create datamgr"); _destroy_datamgr(priv); @@ -380,6 +384,7 @@ static void _update(void *layout_data, int update_type, void *data) { struct view_update_data *vdata; struct _priv *priv; + struct datamgr *dmgr; int mode; if (!layout_data) { @@ -442,6 +447,27 @@ static void _update(void *layout_data, int update_type, void *data) priv->view_mode = mode; _update_content_list(priv); break; + case UPDATE_SOURCE_TYPE: + if (!data) { + _ERR("invalid argument"); + return; + } + + vdata = data; + mode = vdata->index; + + if (mode == priv->source_type) + return; + + priv->source_type = mode; + + dmgr = priv->dmgr[E_DATA_MEDIA]; + dmgr->ops->set_source(dmgr->handle, mode); + + _clear_content_list(priv); + + _update_content_list(priv); + break; default: break; } diff --git a/src/layout/movie.c b/src/layout/movie.c index 3771060..292bef6 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -64,6 +64,8 @@ struct _priv { app_media *recent_info; int view_mode; + int source_type; + struct grid_data *gdata; }; @@ -366,6 +368,8 @@ static void _clear_content_list(struct _priv *priv) priv->media_list = NULL; } + elm_object_part_text_set(priv->layout, PART_NOCONTENT, ""); + listmgr_clear_content_list(priv->listmgr); } @@ -488,7 +492,7 @@ static bool _create_utils(struct _priv *priv) int i; for (i = 0; i < E_DATA_MAX; i++) { - dmgr = datamgr_create(i, MOVIE_MEDIA_COND, E_SOURCE_ALL); + dmgr = datamgr_create(i, MOVIE_MEDIA_COND, E_SOURCE_INTERNAL); if (!dmgr) { _ERR("failed to create datamgr"); _destroy_datamgr(priv); @@ -647,6 +651,7 @@ static void _update(void *layout_data, int update_type, void *data) { struct view_update_data *vdata; struct _priv *priv; + struct datamgr *dmgr; int mode; if (!layout_data) { @@ -714,6 +719,27 @@ static void _update(void *layout_data, int update_type, void *data) priv->view_mode = mode; _update_content_list(priv); break; + case UPDATE_SOURCE_TYPE: + if (!data) { + _ERR("invalid argument"); + return; + } + + vdata = data; + mode = vdata->index; + + if (mode == priv->source_type) + return; + + priv->source_type = mode; + + dmgr = priv->dmgr[E_DATA_MEDIA]; + dmgr->ops->set_source(dmgr->handle, mode); + + _clear_content_list(priv); + + _update_content_list(priv); + break; default: break; } diff --git a/src/layout/music.c b/src/layout/music.c index 30a8826..6a6b8aa 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -60,6 +60,8 @@ struct _priv { app_media *playing_info; int view_mode; + int source_type; + struct grid_data *gdata; }; @@ -318,6 +320,8 @@ static void _clear_content_list(struct _priv *priv) priv->media_list = NULL; } + elm_object_part_text_set(priv->layout, PART_NOCONTENT, ""); + listmgr_clear_content_list(priv->listmgr); } @@ -418,6 +422,17 @@ static void _update_playing_item(struct _priv *priv, const char *id) _ERR("failed to update now playing item"); } +static void _set_source(struct _priv *priv) +{ + struct datamgr *dmgr; + int i; + + for (i = 0; i < E_DATA_MAX; i++) { + dmgr = priv->dmgr[i]; + dmgr->ops->set_source(dmgr->handle, priv->source_type); + } +} + static void _destroy_datamgr(struct _priv *priv) { int i; @@ -443,7 +458,7 @@ static bool _create_utils(struct _priv *priv) int i; for (i = 0; i < E_DATA_MAX; i++) { - dmgr = datamgr_create(i, MUSIC_MEDIA_COND, E_SOURCE_ALL); + dmgr = datamgr_create(i, MUSIC_MEDIA_COND, E_SOURCE_INTERNAL); if (!dmgr) { _ERR("failed to create datamgr"); _destroy_datamgr(priv); @@ -669,6 +684,25 @@ static void _update(void *layout_data, int update_type, void *data) priv->view_mode = mode; _update_content_list(priv); break; + case UPDATE_SOURCE_TYPE: + if (!data) { + _ERR("invalid argument"); + return; + } + + vdata = data; + mode = vdata->index; + + if (mode == priv->source_type) + return; + + priv->source_type = mode; + _set_source(priv); + + _clear_content_list(priv); + + _update_content_list(priv); + break; default: break; } diff --git a/src/view/base.c b/src/view/base.c index 111b3ef..965bb98 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -28,6 +28,7 @@ #include "define.h" #include "layout.h" #include "view.h" +#include "data/datamgr.h" #include "util/ctxpopup.h" #include "util/util.h" @@ -105,6 +106,11 @@ const char *source[] = { "USB", }; +static int source_type[] = { + E_SOURCE_INTERNAL, + E_SOURCE_EXTERNAL +}; + struct _menu_item { const char *name; const char *layout_id; @@ -209,7 +215,26 @@ static void _view_selected_cb(void *data, int mode) static void _source_selected_cb(void *data, int mode) { - /* It will be implemented later */ + struct view_update_data vdata; + struct _priv *priv; + int i; + + if (!data) + return; + + priv = data; + + elm_object_text_set(priv->source_btn, source[mode]); + + vdata.index = source_type[mode]; + + for (i = 0; i < E_LAYOUT_MAX; i++) { + layoutmgr_update_layout(priv->lmgr, + g_menu_item[i].layout_id, + UPDATE_SOURCE_TYPE, &vdata); + } + + priv->source_type = mode; } static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, diff --git a/src/view/detail.c b/src/view/detail.c index 851450f..62547db 100644 --- a/src/view/detail.c +++ b/src/view/detail.c @@ -985,7 +985,8 @@ static Evas_Object *_create(Evas_Object *win, void *data) EVAS_HINT_EXPAND); elm_win_resize_object_add(win, base); - dmgr = datamgr_create(E_DATA_ALBUM, MUSIC_MEDIA_COND, E_SOURCE_ALL); + dmgr = datamgr_create(E_DATA_ALBUM, MUSIC_MEDIA_COND, + E_SOURCE_INTERNAL); if (!dmgr) { _ERR("failed to create datamgr"); free(priv); -- 2.7.4 From ed4e43939d770875ff280f08f2705e3c3d169ae7 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Tue, 8 Dec 2015 16:57:42 +0900 Subject: [PATCH 05/16] viewer: disable rotate button temporary Change-Id: Iaa0d06403b1eea7635f24dcf9fcf12a620544903 Signed-off-by: Minkyu Kang --- src/view/viewer.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/view/viewer.c b/src/view/viewer.c index 457e4a1..20ab723 100644 --- a/src/view/viewer.c +++ b/src/view/viewer.c @@ -47,7 +47,8 @@ #define BTN_LOC_PLAY 2 #define BTN_LOC_NEXT 4 #define BTN_LOC_ROTATE 5 -#define BTN_LOC_ZOOM 6 +#define BTN_LOC_ZOOM 5 +/*#define BTN_LOC_ZOOM 6*/ #define BTN_LOC_SLIDE 8 enum { @@ -120,10 +121,12 @@ static struct _btn_info btn_photo[] = { .name = SRC_BTN_GALLERY_NEXT, .loc = BTN_LOC_NEXT, }, + /* { .name = SRC_BTN_ROTATE, .loc = BTN_LOC_ROTATE, }, + */ { .name = SRC_BTN_ZOOM, .loc = BTN_LOC_ZOOM, @@ -180,7 +183,7 @@ static struct _viewer_info viewer_info[] = { }, { .btns = btn_photo, - .btn_count = 5, + .btn_count = 4, .focus_loc = BTN_LOC_NEXT, .callback = _callback_photo, }, -- 2.7.4 From e1c60d3dc757368e5d34cd66857e1366520f69bb Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Tue, 8 Dec 2015 20:25:36 +0900 Subject: [PATCH 06/16] zoom: use original image instead of thumbnail Change-Id: Ibf097cacdde671e5d3509dd8c66530b90916a219 Signed-off-by: Minkyu Kang --- src/view/zoom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view/zoom.c b/src/view/zoom.c index 446891d..89cd968 100644 --- a/src/view/zoom.c +++ b/src/view/zoom.c @@ -478,7 +478,7 @@ static bool _draw_thumbnail(struct _priv *priv) priv->thumb = obj; evas_object_size_hint_align_set(obj, 1.0, 1.0); - elm_image_file_set(obj, priv->mi->thumbnail_path, NULL); + elm_image_file_set(obj, priv->mi->file_path, NULL); elm_object_part_content_set(priv->base, PART_ZOOM_NAVI, obj); -- 2.7.4 From 1a5a0f308ea0bf0946c1c9c5085dc4905f55646d Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Tue, 8 Dec 2015 21:37:29 +0900 Subject: [PATCH 07/16] datamgr: add source type for all devices Change-Id: I5fc03e1239373dd7eca05d7d5b4ab2a73c6b8fb2 Signed-off-by: Jehun Lim --- include/data/datamgr.h | 3 ++- src/data/albumdata.c | 16 ++++++++++++---- src/data/folderdata.c | 16 ++++++++++++---- src/data/mediadata.c | 12 ++++++++++-- src/layout/gallery.c | 2 +- src/layout/movie.c | 2 +- src/layout/music.c | 2 +- src/view/base.c | 2 ++ src/view/detail.c | 3 +-- 9 files changed, 42 insertions(+), 16 deletions(-) diff --git a/include/data/datamgr.h b/include/data/datamgr.h index 682eb77..3399381 100644 --- a/include/data/datamgr.h +++ b/include/data/datamgr.h @@ -34,7 +34,8 @@ enum data_type { enum source_type { E_SOURCE_INTERNAL = MEDIA_CONTENT_STORAGE_INTERNAL, - E_SOURCE_EXTERNAL = MEDIA_CONTENT_STORAGE_EXTERNAL_USB + E_SOURCE_EXTERNAL = MEDIA_CONTENT_STORAGE_EXTERNAL_USB, + E_SOURCE_ALL }; struct data_ops { diff --git a/src/data/albumdata.c b/src/data/albumdata.c index 8a6acc8..a2448ea 100644 --- a/src/data/albumdata.c +++ b/src/data/albumdata.c @@ -91,16 +91,24 @@ static bool _create_filter(struct albumdata *ad, filter_h *filter, return false; } - snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", - ad->media_type, ad->source_type); + snprintf(buf, sizeof(buf), "%s", ad->media_type); - if (cond) { + if (ad->source_type != E_SOURCE_ALL) { char s1[64]; - snprintf(s1, sizeof(s1), " AND %s", cond); + snprintf(s1, sizeof(s1), " AND MEDIA_STORAGE_TYPE=%d", + ad->source_type); + strncat(buf, s1, strlen(s1)); } + if (cond) { + char s2[64]; + + snprintf(s2, sizeof(s2), " AND %s", cond); + strncat(buf, s2, strlen(s2)); + } + media_filter_set_condition(tmp_filter, buf, MEDIA_CONTENT_COLLATE_DEFAULT); diff --git a/src/data/folderdata.c b/src/data/folderdata.c index 2335653..d956e59 100644 --- a/src/data/folderdata.c +++ b/src/data/folderdata.c @@ -88,16 +88,24 @@ static bool _create_filter(struct folderdata *fd, filter_h *filter, media_filter_set_order(tmp_filter, MEDIA_CONTENT_ORDER_ASC, FOLDER_NAME, MEDIA_CONTENT_COLLATE_DEFAULT); } else { - snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", - fd->media_type, fd->source_type); + snprintf(buf, sizeof(buf), "%s", fd->media_type); - if (cond) { + if (fd->source_type != E_SOURCE_ALL) { char s1[256]; - snprintf(s1, sizeof(s1), " AND %s", cond); + snprintf(s1, sizeof(s1), " AND MEDIA_STORAGE_TYPE=%d", + fd->source_type); + strncat(buf, s1, strlen(s1)); } + if (cond) { + char s2[256]; + + snprintf(s2, sizeof(s2), " AND %s", cond); + strncat(buf, s2, strlen(s2)); + } + media_filter_set_order(tmp_filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_TITLE, MEDIA_CONTENT_COLLATE_DEFAULT); diff --git a/src/data/mediadata.c b/src/data/mediadata.c index b46a16c..39f3638 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -113,8 +113,16 @@ static bool _create_filter(struct mediadata *md, filter_h *filter) return false; } - snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", - md->media_type, md->source_type); + snprintf(buf, sizeof(buf), "%s", md->media_type); + + if (md->source_type != E_SOURCE_ALL) { + char s[64]; + + snprintf(s, sizeof(s), " AND MEDIA_STORAGE_TYPE=%d", + md->source_type); + + strncat(buf, s, strlen(s)); + } media_filter_set_condition(tmp_filter, buf, MEDIA_CONTENT_COLLATE_DEFAULT); diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 7ba53eb..1a77bac 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -224,7 +224,7 @@ static bool _create_utils(struct _priv *priv) int i; for (i = 0; i < E_DATA_MAX; i++) { - dmgr = datamgr_create(i, GALLERY_MEDIA_COND, E_SOURCE_INTERNAL); + dmgr = datamgr_create(i, GALLERY_MEDIA_COND, E_SOURCE_ALL); if (!dmgr) { _ERR("failed to create datamgr"); _destroy_datamgr(priv); diff --git a/src/layout/movie.c b/src/layout/movie.c index 292bef6..1dbefbd 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -492,7 +492,7 @@ static bool _create_utils(struct _priv *priv) int i; for (i = 0; i < E_DATA_MAX; i++) { - dmgr = datamgr_create(i, MOVIE_MEDIA_COND, E_SOURCE_INTERNAL); + dmgr = datamgr_create(i, MOVIE_MEDIA_COND, E_SOURCE_ALL); if (!dmgr) { _ERR("failed to create datamgr"); _destroy_datamgr(priv); diff --git a/src/layout/music.c b/src/layout/music.c index 6a6b8aa..060f688 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -458,7 +458,7 @@ static bool _create_utils(struct _priv *priv) int i; for (i = 0; i < E_DATA_MAX; i++) { - dmgr = datamgr_create(i, MUSIC_MEDIA_COND, E_SOURCE_INTERNAL); + dmgr = datamgr_create(i, MUSIC_MEDIA_COND, E_SOURCE_ALL); if (!dmgr) { _ERR("failed to create datamgr"); _destroy_datamgr(priv); diff --git a/src/view/base.c b/src/view/base.c index 965bb98..38db48c 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -102,11 +102,13 @@ const char *view_mode_music[] = { }; const char *source[] = { + "ALL", "TV", "USB", }; static int source_type[] = { + E_SOURCE_ALL, E_SOURCE_INTERNAL, E_SOURCE_EXTERNAL }; diff --git a/src/view/detail.c b/src/view/detail.c index 62547db..851450f 100644 --- a/src/view/detail.c +++ b/src/view/detail.c @@ -985,8 +985,7 @@ static Evas_Object *_create(Evas_Object *win, void *data) EVAS_HINT_EXPAND); elm_win_resize_object_add(win, base); - dmgr = datamgr_create(E_DATA_ALBUM, MUSIC_MEDIA_COND, - E_SOURCE_INTERNAL); + dmgr = datamgr_create(E_DATA_ALBUM, MUSIC_MEDIA_COND, E_SOURCE_ALL); if (!dmgr) { _ERR("failed to create datamgr"); free(priv); -- 2.7.4 From 07ac2555104e8a5a8e46a63e730a0fa8dfdba605 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Tue, 8 Dec 2015 21:40:27 +0900 Subject: [PATCH 08/16] base: disable source button Change-Id: Icadc966c01a5925770c25d07dd01acd74494058e Signed-off-by: Jehun Lim --- src/view/base.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/view/base.c b/src/view/base.c index 38db48c..24ec536 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -722,11 +722,13 @@ static bool _draw_source_btn(struct _priv *priv) elm_object_part_content_set(priv->base, PART_BASE_SOURCE, btn); - priv->source_btn = btn; - elm_object_focus_next_object_set(btn, priv->view_btn, ELM_FOCUS_LEFT); elm_object_focus_next_object_set(priv->view_btn, btn, ELM_FOCUS_RIGHT); + elm_object_disabled_set(btn, EINA_TRUE); + + priv->source_btn = btn; + return true; } -- 2.7.4 From 0b6311aa5ee9b3ddd8c24faf3bf8543fb2c34dc1 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Wed, 9 Dec 2015 10:05:32 +0900 Subject: [PATCH 09/16] base: remove place and folder view mode Change-Id: I46af11d19eb6473e987bc50944983be4d9638a3c Signed-off-by: Jehun Lim --- include/grid/grid.h | 2 +- src/view/base.c | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/include/grid/grid.h b/include/grid/grid.h index 53b1de5..bc92b73 100644 --- a/include/grid/grid.h +++ b/include/grid/grid.h @@ -27,8 +27,8 @@ enum movie_grid_type { enum gallery_grid_type { E_GALLERY_EVENT, - E_GALLERY_PLACE, E_GALLERY_VIDEO, + E_GALLERY_PLACE, E_GALLERY_FOLDER, E_GALLERY_MAX }; diff --git a/src/view/base.c b/src/view/base.c index 24ec536..c1fee10 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -83,14 +83,11 @@ const char *view_mode_movie[] = { "Name", "Genre", "Date", - "Folder" }; const char *view_mode_gallery[] = { "Event", - "Place", "Video", - "Folder" }; const char *view_mode_music[] = { @@ -98,7 +95,6 @@ const char *view_mode_music[] = { "Album", "Artist", "Genre", - "Folder" }; const char *source[] = { -- 2.7.4 From 833c2d4d5711a90bae23d4a9b4c7344bbe5119a8 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Wed, 9 Dec 2015 10:18:21 +0900 Subject: [PATCH 10/16] modify default bg color of movie item Change-Id: I26d9e374a76d7c3594f8ffedbfcc972617a300a5 Signed-off-by: Jehun Lim --- res/edc/widgets/gengrid.edc | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc index 13166fa..72eee93 100644 --- a/res/edc/widgets/gengrid.edc +++ b/res/edc/widgets/gengrid.edc @@ -58,7 +58,7 @@ group { to: PART_ELM_SWALLOW_TEXTBG; relative: 1.0 0.0; } - color: 0 0 0 115; + color: COLOR_ITEM_DEFAULT; } description { state: "selected" 0.0; @@ -392,6 +392,24 @@ group { } parts { part { + name: "defaultbg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "bg"; + rel2 { + to: PART_ELM_SWALLOW_TEXTBG; + relative: 1.0 0.0; + } + color: 0 0 0 255; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + } + } + part { name: "default_image"; type: IMAGE; scale: 1; -- 2.7.4 From aebde7d87ba0fca4b24c775cc49b79b1b42c95e5 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Wed, 9 Dec 2015 11:33:27 +0900 Subject: [PATCH 11/16] delete default picture image of video item Change-Id: I13d8a6f752038dc50ee74562b31b9ede6feec6be Signed-off-by: Jehun Lim --- include/define.h | 1 + include/view/base.h | 2 +- res/edc/widgets/gengrid.edc | 14 +++++--------- res/{edc => }/images/ic_thumbnail_picture.png | Bin src/grid/grid_gallery.c | 12 ++++++++++++ src/view/action_menu.c | 15 +++++++++++---- src/view/detail.c | 12 ++++++++++++ 7 files changed, 42 insertions(+), 14 deletions(-) rename res/{edc => }/images/ic_thumbnail_picture.png (100%) diff --git a/include/define.h b/include/define.h index 453835e..59c5923 100644 --- a/include/define.h +++ b/include/define.h @@ -73,6 +73,7 @@ #define PART_ELM_TEXT_PLAYTIME "elm.text.playtime" #define PART_ELM_TEXT_COUNT "elm.text.count" #define PART_ELM_SWALLOW_THUMBNAIL "elm.swallow.thumbnail" +#define PART_ELM_SWALLOW_PICTURE "elm.swallow.picture" #define PART_ELM_SWALLOW_VIDEO "elm.swallow.video" #define PART_ELM_SWALLOW_FAVORITE "elm.swallow.favorite" #define PART_ELM_SWALLOW_BG "elm.swallow.bg" diff --git a/include/view/base.h b/include/view/base.h index 06b5959..d658f72 100644 --- a/include/view/base.h +++ b/include/view/base.h @@ -37,7 +37,7 @@ /* images */ #define IMAGE_PREVIEW_PLAY "ic_preview_play.png" -#define IMAGE_THUMBNAIL_PICTURE "ic_thumbnail_picture.png" +#define IMAGE_THUMBNAIL_PICTURE IMAGEDIR"/ic_thumbnail_picture.png" #define IMAGE_THUMBNAIL_SONG "ic_thumbnail_song.png" #define IMAGE_THUMBNAIL_PLAY IMAGEDIR"/ic_thumbnail_play.png" #define IMAGE_THUMBNAIL_FAVORITE IMAGEDIR"/ic_thumbnail_favorite.png" diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc index 72eee93..16cac88 100644 --- a/res/edc/widgets/gengrid.edc +++ b/res/edc/widgets/gengrid.edc @@ -496,11 +496,8 @@ group { name: "elm/gengrid/item/gallery_item/default"; data.item: "selectraise" "on"; data.item: "texts" "elm.text.playtime"; - data.item: "contents" "elm.swallow.thumbnail elm.swallow.video elm.swallow.favorite"; + data.item: "contents" "elm.swallow.thumbnail elm.swallow.picture elm.swallow.video elm.swallow.favorite"; data.item: "focus_highlight" "on"; - images { - image: IMAGE_THUMBNAIL_PICTURE COMP; - } parts { part { name: "elm.padding.bottom_right"; @@ -544,9 +541,9 @@ group { } } part { - name: "default_image"; + name: PART_ELM_SWALLOW_PICTURE; scale: 1; - type: IMAGE; + type: SWALLOW; description { state: "default" 0.0; rel1 { @@ -557,7 +554,6 @@ group { to: "defaultbg"; relative: 0.5 0.5; } - image.normal: IMAGE_THUMBNAIL_PICTURE; min: 80 80; fixed: 1 1; } @@ -831,8 +827,8 @@ group { name: "focus,in,anim"; action: STATE_SET "selected" 0.0; target: "defaultbg"; - target: "default_image"; target: PART_ELM_SWALLOW_THUMBNAIL; + target: PART_ELM_SWALLOW_PICTURE; target: PART_ELM_SWALLOW_VIDEO; target: PART_ELM_SWALLOW_FAVORITE; target: "part_focus1"; @@ -858,10 +854,10 @@ group { name: "focus,out,anim"; action: STATE_SET "default" 0.0; target: PART_ELM_SWALLOW_THUMBNAIL; + target: PART_ELM_SWALLOW_PICTURE; target: PART_ELM_SWALLOW_VIDEO; target: PART_ELM_SWALLOW_FAVORITE; target: "defaultbg"; - target: "default_image"; target: "part_focus1"; target: "part_focus2"; target: "part_focus3"; diff --git a/res/edc/images/ic_thumbnail_picture.png b/res/images/ic_thumbnail_picture.png similarity index 100% rename from res/edc/images/ic_thumbnail_picture.png rename to res/images/ic_thumbnail_picture.png diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c index e9de31e..d579042 100644 --- a/src/grid/grid_gallery.c +++ b/src/grid/grid_gallery.c @@ -115,6 +115,18 @@ static Evas_Object *_media_content_get(void *data, _ERR("failed to create image object"); return NULL; } + } else if (!strcmp(part, PART_ELM_SWALLOW_PICTURE)) { + if (info->media_type != MEDIA_CONTENT_TYPE_IMAGE) + return NULL; + + if (info->thumbnail_path) + return NULL; + + eo = util_add_image(obj, IMAGE_THUMBNAIL_PICTURE); + if (!eo) { + _ERR("failed to create image object"); + return NULL; + } } else if (!strcmp(part, PART_ELM_SWALLOW_VIDEO)) { if (info->media_type != MEDIA_CONTENT_TYPE_VIDEO) return NULL; diff --git a/src/view/action_menu.c b/src/view/action_menu.c index 210d4f6..dbed15a 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -463,8 +463,16 @@ static Evas_Object *_grid_content_get(void *data, content = util_add_image(obj, info->thumbnail_path); if (!content) goto err; + } else if (!strcmp(part, PART_ELM_SWALLOW_PICTURE)) { + if (info->media_type != MEDIA_CONTENT_TYPE_IMAGE) + return NULL; - evas_object_show(content); + if (info->thumbnail_path) + return NULL; + + content = util_add_image(obj, IMAGE_THUMBNAIL_PICTURE); + if (!content) + goto err; } else if (!strcmp(part, PART_ELM_SWALLOW_VIDEO)) { if (info->media_type != MEDIA_CONTENT_TYPE_VIDEO) return NULL; @@ -472,8 +480,6 @@ static Evas_Object *_grid_content_get(void *data, content = util_add_image(obj, IMAGE_THUMBNAIL_PLAY); if (!content) goto err; - - evas_object_show(content); } else if (!strcmp(part, PART_ELM_SWALLOW_TEXTBG)) { content = evas_object_rectangle_add(obj); if (!content) @@ -481,9 +487,10 @@ static Evas_Object *_grid_content_get(void *data, app_contents_get_color(info->title, NULL, &bg); evas_object_color_set(content, bg.r, bg.g, bg.b, bg.a); + } + if (content) evas_object_show(content); - } return content; diff --git a/src/view/detail.c b/src/view/detail.c index 851450f..05a0326 100644 --- a/src/view/detail.c +++ b/src/view/detail.c @@ -465,6 +465,18 @@ static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, app_contents_get_color(mi->title, NULL, &bg); evas_object_color_set(eo, bg.r, bg.g, bg.b, bg.a); + } else if (!strcmp(part, PART_ELM_SWALLOW_PICTURE)) { + if (mi->media_type != MEDIA_CONTENT_TYPE_IMAGE) + return NULL; + + if (mi->thumbnail_path) + return NULL; + + eo = util_add_image(obj, IMAGE_THUMBNAIL_PICTURE); + if (!eo) { + _ERR("failed to create image object"); + return NULL; + } } else if (!strcmp(part, PART_ELM_SWALLOW_VIDEO)) { if (mi->media_type != MEDIA_CONTENT_TYPE_VIDEO) return NULL; -- 2.7.4 From 8600bef0fc2b40e25d84afc9edcd452e6165b8fc Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Wed, 9 Dec 2015 14:48:43 +0900 Subject: [PATCH 12/16] layout: set disabled state of view mode button Change-Id: I5df34b9f0aaff656caeddf55c656ab81711b34b4 Signed-off-by: Jehun Lim --- res/edc/widgets/button.edc | 13 +++++++++++++ src/layout/gallery.c | 27 ++++++++++++++++----------- src/layout/movie.c | 27 ++++++++++++++++----------- src/layout/music.c | 26 ++++++++++++++++---------- 4 files changed, 61 insertions(+), 32 deletions(-) diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index eb3cdcc..dbeb890 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -4171,6 +4171,19 @@ group { transition: TRANSITION_FOCUS; } program { + name: "enabled"; + signal: SIG_ELM_ENABLED; + source: SIG_SOURCE_ELM; + action: STATE_SET "default" 0.0;; + target: "bg"; + target: "border_top"; + target: "border_left"; + target: "border_right"; + target: "border_bottom"; + target: "elm.text"; + target: "part_arrow"; + } + program { name: "disabled"; signal: SIG_ELM_DISABLED; source: SIG_SOURCE_ELM; diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 1a77bac..7c6aad9 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -106,11 +106,18 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) return data; } -static void _update_content_info(struct _priv *priv) +static void _update_bottom_area(struct _priv *priv) { struct datamgr *dmgr; char buf[128]; + /* update view mode button state */ + if (priv->media_list) + elm_object_disabled_set(priv->view_btn, EINA_FALSE); + else + elm_object_disabled_set(priv->view_btn, EINA_TRUE); + + /* update content info */ dmgr = priv->dmgr[E_DATA_MEDIA]; if (!dmgr) return; @@ -135,10 +142,8 @@ static void _clear_content_list(struct _priv *priv) static void _update_content_list(struct _priv *priv) { - Eina_List *list; - if (priv->media_list) { - _update_content_info(priv); + _update_bottom_area(priv); return; } @@ -149,8 +154,11 @@ static void _update_content_list(struct _priv *priv) return; } - list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]); - if (!list) { + priv->media_list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]); + + _update_bottom_area(priv); + + if (!priv->media_list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; @@ -158,12 +166,9 @@ static void _update_content_list(struct _priv *priv) priv->gdata->data = priv->dmgr[E_DATA_MEDIA]; - if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) + if (!listmgr_update_content_list(priv->listmgr, + priv->media_list, priv->gdata)) _ERR("failed to update list area"); - - priv->media_list = list; - - _update_content_info(priv); } static void _destroy_datamgr(struct _priv *priv) diff --git a/src/layout/movie.c b/src/layout/movie.c index 1dbefbd..59a6249 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -346,11 +346,18 @@ err: return NULL; } -static void _update_content_info(struct _priv *priv) +static void _update_bottom_area(struct _priv *priv) { struct datamgr *dmgr; char buf[128]; + /* update view mode button state */ + if (priv->media_list) + elm_object_disabled_set(priv->view_btn, EINA_FALSE); + else + elm_object_disabled_set(priv->view_btn, EINA_TRUE); + + /* update content info */ dmgr = priv->dmgr[E_DATA_MEDIA]; if (!dmgr) return; @@ -375,10 +382,8 @@ static void _clear_content_list(struct _priv *priv) static void _update_content_list(struct _priv *priv) { - Eina_List *list; - if (priv->media_list) { - _update_content_info(priv); + _update_bottom_area(priv); return; } @@ -389,8 +394,11 @@ static void _update_content_list(struct _priv *priv) return; } - list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]); - if (!list) { + priv->media_list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]); + + _update_bottom_area(priv); + + if (!priv->media_list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; @@ -398,14 +406,11 @@ static void _update_content_list(struct _priv *priv) priv->gdata->data = priv->dmgr[E_DATA_MEDIA]; - if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) { + if (!listmgr_update_content_list(priv->listmgr, + priv->media_list, priv->gdata)) { _ERR("failed to update list area"); return; } - - priv->media_list = list; - - _update_content_info(priv); } static app_media *_get_recent_item(Eina_List *list) diff --git a/src/layout/music.c b/src/layout/music.c index 060f688..7c915d2 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -293,11 +293,18 @@ static struct datamgr *_get_datamgr(struct _priv *priv) return dmgr; } -static void _update_content_info(struct _priv *priv) +static void _update_bottom_area(struct _priv *priv) { struct datamgr *dmgr; char buf[128]; + /* update view mode button state */ + if (priv->media_list) + elm_object_disabled_set(priv->view_btn, EINA_FALSE); + else + elm_object_disabled_set(priv->view_btn, EINA_TRUE); + + /* update content info */ dmgr = _get_datamgr(priv); if (!dmgr) return; @@ -327,11 +334,10 @@ static void _clear_content_list(struct _priv *priv) static void _update_content_list(struct _priv *priv) { - Eina_List *list; struct datamgr *dmgr; if (priv->media_list) { - _update_content_info(priv); + _update_bottom_area(priv); return; } @@ -346,8 +352,11 @@ static void _update_content_list(struct _priv *priv) if (!dmgr) return; - list = priv->gdata->get_item_list(dmgr); - if (!list) { + priv->media_list = priv->gdata->get_item_list(dmgr); + + _update_bottom_area(priv); + + if (!priv->media_list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; @@ -355,12 +364,9 @@ static void _update_content_list(struct _priv *priv) priv->gdata->data = dmgr; - if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) + if (!listmgr_update_content_list(priv->listmgr, + priv->media_list, priv->gdata)) _ERR("failed to update list area"); - - priv->media_list = list; - - _update_content_info(priv); } static app_media *_get_playing_item(Eina_List *list) -- 2.7.4 From 99e22c7d4cb65273103b802d5f226cc7687ed1ee Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Wed, 9 Dec 2015 18:58:00 +0900 Subject: [PATCH 13/16] util: fix crash issue Change-Id: I61c3b278a8c9e600a2405043a646d4b9b49117ae Signed-off-by: Minkyu Kang --- src/util/util.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/util/util.c b/src/util/util.c index 43daa06..d44205d 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -33,6 +33,9 @@ */ bool util_check_movie_type(const char *str) { + if (!str) + return false; + return strcmp(str, VIDEO_COPYRIGHT); } -- 2.7.4 From c60e81353cedbb0ea44b662e3855b6f900e16c40 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Thu, 10 Dec 2015 11:19:03 +0900 Subject: [PATCH 14/16] viewer: don't start the progressbar if failed to play Change-Id: I356c5dda3856dff8f3e8f80221a09d7fc01dcd62 Signed-off-by: Minkyu Kang --- src/view/viewer.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/view/viewer.c b/src/view/viewer.c index 20ab723..61cc384 100644 --- a/src/view/viewer.c +++ b/src/view/viewer.c @@ -824,6 +824,7 @@ static void _player_play_pause(struct _priv *priv) { app_media_info *mi; player_state_e state; + bool r; playermgr_get_state(priv->player, &state); @@ -847,11 +848,12 @@ static void _player_play_pause(struct _priv *priv) _remove_thumbnail(priv); _update_to_player(priv); - progressbar_start(priv->progress); - playermgr_play(priv->player, mi->file_path, + r = playermgr_play(priv->player, mi->file_path, mi->video->position); - - _update_info(priv, mi); + if (r) { + progressbar_start(priv->progress); + _update_info(priv, mi); + } break; default: @@ -865,6 +867,7 @@ static void _player_play(struct _priv *priv) app_media_info *mi; player_state_e state; struct controller *ctl; + bool r; playermgr_get_state(priv->player, &state); @@ -886,11 +889,12 @@ static void _player_play(struct _priv *priv) _remove_thumbnail(priv); _update_to_player(priv); - progressbar_start(priv->progress); - playermgr_play(priv->player, mi->file_path, + r = playermgr_play(priv->player, mi->file_path, mi->video->position); - - _update_info(priv, mi); + if (r) { + progressbar_start(priv->progress); + _update_info(priv, mi); + } break; default: -- 2.7.4 From fb1b7fe7db7457539d0949ee0eae5cdc646aaaed Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Thu, 10 Dec 2015 15:33:06 +0900 Subject: [PATCH 15/16] viewer: modify _set_image_orientation routine Change-Id: I48238231d519f7f65e2cde14d825120be1cec593 Signed-off-by: Minkyu Kang --- src/view/viewer.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/view/viewer.c b/src/view/viewer.c index 61cc384..4968fc4 100644 --- a/src/view/viewer.c +++ b/src/view/viewer.c @@ -471,7 +471,9 @@ static void _set_image_orientation(struct _priv *priv) { app_media *am; app_media_info *mi; - Evas_Object *image, *obj; + image_meta_h image; + media_content_orientation_e orient; + int r; if (priv->viewer.cur != VIEWER_PHOTO) return; @@ -488,24 +490,40 @@ static void _set_image_orientation(struct _priv *priv) return; } - image = elm_image_add(priv->base); + image = app_media_get_image_handle(am); if (!image) { - _ERR("failed to add image"); + _ERR("failed to getting image handle"); return; } - elm_image_file_set(image, mi->file_path, NULL); - elm_image_orient_set(image, ELM_IMAGE_ROTATE_270); - - obj = elm_image_object_get(image); - if (!obj) { - _ERR("failed to get image object"); + switch (mi->image->orientation) { + case MEDIA_CONTENT_ORIENTATION_NORMAL: + orient = MEDIA_CONTENT_ORIENTATION_ROT_270; + break; + case MEDIA_CONTENT_ORIENTATION_ROT_90: + orient = MEDIA_CONTENT_ORIENTATION_NORMAL; + break; + case MEDIA_CONTENT_ORIENTATION_ROT_180: + orient = MEDIA_CONTENT_ORIENTATION_ROT_90; + break; + case MEDIA_CONTENT_ORIENTATION_ROT_270: + orient = MEDIA_CONTENT_ORIENTATION_ROT_180; + break; + default: return; } - evas_object_image_save(obj, mi->file_path, NULL, "quality=100"); + r = image_meta_set_orientation(image, orient); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("failed to set played position"); + return; + } - media_info_refresh_metadata_to_db(mi->media_id); + r = image_meta_update_to_db(image); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("failed to update db"); + return; + } app_media_update(am); } -- 2.7.4 From c661dcbac8ed9ef252a29d706daf260bd6a2162c Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Thu, 10 Dec 2015 19:16:24 +0900 Subject: [PATCH 16/16] movie: set default thumbnail bg color for recently watched item Change-Id: I3e6ba7f5e81b454f7e5f2c8b470772bcf83e5843 Signed-off-by: Jehun Lim --- include/layout/movie.h | 1 + res/edc/widgets/button.edc | 10 ++++++++++ src/layout/movie.c | 31 +++++++++++++++++++++++-------- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/include/layout/movie.h b/include/layout/movie.h index 2de9449..7feba61 100644 --- a/include/layout/movie.h +++ b/include/layout/movie.h @@ -28,6 +28,7 @@ #define PART_CONTENT "part.content" #define PART_NOCONTENT "part.nocontent" #define PART_RECENT_CONTENT_TEXTBG "part.recent_content_textbg" +#define PART_RECENT_CONTENT_IMGBG "part.recent_content_imgbg" #define PART_RECENT_CONTENT_THUMBNAIL "part.recent_content_thumbnail" #define PART_RECENT_CONTENT_FAVORITE "part.recent_content_favorite" #define PART_RECENT_CONTENT_TITLE "part.recent_content_title" diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index dbeb890..c9a2648 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -2001,6 +2001,16 @@ group { } } part { + name: PART_RECENT_CONTENT_IMGBG; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: PART_RECENT_CONTENT_THUMBNAIL; + rel2.to: PART_RECENT_CONTENT_THUMBNAIL; + } + } + part { name: "default_image"; type: IMAGE; scale: 1; diff --git a/src/layout/movie.c b/src/layout/movie.c index 59a6249..efefa0c 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -71,27 +71,35 @@ struct _priv { static bool _update_recent_info(Evas_Object *base, app_media_info *info) { - Evas_Object *image, *text_bg; + Evas_Object *img, *img_bg, *text_bg; struct color_data bg; struct tm tm; char buf[32]; - image = elm_object_part_content_get(base, + img = elm_object_part_content_get(base, PART_RECENT_CONTENT_THUMBNAIL); - if (!image) { - _ERR("failed to get image object"); + img_bg = elm_object_part_content_get(base, + PART_RECENT_CONTENT_IMGBG); + + if (!img || !img_bg) { + _ERR("failed to get object"); return false; } + if (info->thumbnail_path) { + elm_image_file_set(img, info->thumbnail_path, NULL); + elm_image_aspect_fixed_set(img, EINA_FALSE); + + evas_object_color_set(img_bg, 0, 0, 0, 0); + } else + evas_object_color_set(img_bg, 0, 0, 0, 255); + text_bg = elm_object_part_content_get(base, PART_RECENT_CONTENT_TEXTBG); if (!text_bg) { _ERR("failed to get textbg part"); return false; } - elm_image_file_set(image, info->thumbnail_path, NULL); - elm_image_aspect_fixed_set(image, EINA_FALSE); - app_contents_get_color(info->title, NULL, &bg); evas_object_color_set(text_bg, bg.r, bg.g, bg.b, bg.a); @@ -170,7 +178,7 @@ static bool _draw_recent_title(Evas_Object *base) static bool _draw_recent_content(struct _priv *priv, Evas_Object *base) { - Evas_Object *btn, *image, *text_bg; + Evas_Object *btn, *image, *img_bg, *text_bg; struct progressbar *prog; btn = elm_button_add(base); @@ -187,6 +195,12 @@ static bool _draw_recent_content(struct _priv *priv, Evas_Object *base) return false; } + img_bg = evas_object_rectangle_add(btn); + if (!img_bg) { + _ERR("failed to create rectangle object"); + return false; + } + text_bg = evas_object_rectangle_add(btn); if (!text_bg) { _ERR("failed to create rectangle object"); @@ -194,6 +208,7 @@ static bool _draw_recent_content(struct _priv *priv, Evas_Object *base) } elm_object_part_content_set(btn, PART_RECENT_CONTENT_THUMBNAIL, image); + elm_object_part_content_set(btn, PART_RECENT_CONTENT_IMGBG, img_bg); elm_object_part_content_set(btn, PART_RECENT_CONTENT_TEXTBG, text_bg); elm_object_part_content_set(base, PART_ITEM_CONTENT, btn); -- 2.7.4