From c328cf7f266ee6385c7e42cb16cce7557a975ae7 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Wed, 14 Oct 2015 09:58:08 +0900 Subject: [PATCH 01/16] folderdata: add variable null check (prevent: 483570) Change-Id: I3bc706dcd879ee8c3ab79c53de5453b3b17a364f Signed-off-by: Jehun Lim --- src/data/albumdata.c | 6 +++--- src/data/folderdata.c | 4 ++-- src/data/mediadata.c | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/data/albumdata.c b/src/data/albumdata.c index 9b2ff52..9aa9537 100644 --- a/src/data/albumdata.c +++ b/src/data/albumdata.c @@ -127,7 +127,7 @@ static bool _create_filter(struct albumdata *ad, filter_h *filter, static int _compare_name(struct group_info *gi, struct album_info *ai) { - if (!gi || !gi->data || !ai->name) + if (!gi->data || !ai->name) return -1; return strncasecmp(gi->data, ai->name, 1); @@ -151,7 +151,7 @@ static char *_get_name(struct album_info *ai) static int _compare_artist(struct group_info *gi, struct album_info *ai) { - if (!gi || !gi->data || !ai->artist) + if (!gi->data || !ai->artist) return -1; return strncasecmp(gi->data, ai->artist, 1); @@ -570,7 +570,7 @@ static Eina_List *_get_group(void *handle, int type, void *data) gi = NULL; list = NULL; EINA_LIST_FOREACH(ad->album_list, l, ai) { - if (g_group_info[type].media_cmp(gi, ai)) { + if (!gi || g_group_info[type].media_cmp(gi, ai)) { gi = calloc(1, sizeof(*gi)); if (!gi) { _ERR("failed to create group info"); diff --git a/src/data/folderdata.c b/src/data/folderdata.c index 339af9a..2f1d48f 100644 --- a/src/data/folderdata.c +++ b/src/data/folderdata.c @@ -137,7 +137,7 @@ static int _compare_cb_name(const void *data1, const void *data2) static int _compare_title(struct group_info *gi, app_media_info *mi) { - if (!gi || !gi->data || !mi->title) + if (!gi->data || !mi->title) return -1; return strncasecmp(gi->data, mi->title, 1); @@ -576,7 +576,7 @@ static Eina_List *_get_group(void *handle, int type, void *data) return NULL; } - if (g_group_info[type].media_cmp(gi, mi)) { + if (!gi || g_group_info[type].media_cmp(gi, mi)) { gi = calloc(1, sizeof(*gi)); if (!gi) { _ERR("failed to create group info"); diff --git a/src/data/mediadata.c b/src/data/mediadata.c index 44663ec..3f68f37 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -142,7 +142,7 @@ static char *_get_date_string(struct tm *tm) static int _compare_title(struct group_info *gi, app_media_info *info) { - if (!gi || !gi->data || !info->title) + if (!gi->data || !info->title) return -1; return strncasecmp(gi->data, info->title, 1); @@ -168,7 +168,7 @@ static int _compare_time(struct group_info *gi, app_media_info *info) { struct tm *tm; - if (!gi || !gi->data) + if (!gi->data) return -1; tm = gi->data; @@ -218,7 +218,7 @@ static int _compare_genre(struct group_info *gi, app_media_info *info) genre = _get_genre_string(info); - if (!gi || !gi->data || !genre) + if (!gi->data || !genre) return -1; return strcmp(gi->data, genre); @@ -276,7 +276,7 @@ static void _get_place_string(const char *src, char **city, char **country) static int _compare_place(struct group_info *gi, app_media_info *info) { - if (!gi || !gi->data) + if (!gi->data) return -1; if (!info->location_tag) @@ -305,7 +305,7 @@ static int _compare_type(struct group_info *gi, app_media_info *info) { int *type; - if (!gi || !gi->data) + if (!gi->data) return -1; type = gi->data; @@ -676,7 +676,7 @@ static Eina_List *_get_group(void *handle, int type, void *data) return NULL; } - if (g_group_info[type].media_cmp(gi, info)) { + if (!gi || g_group_info[type].media_cmp(gi, info)) { gi = calloc(1, sizeof(*gi)); if (!gi) { _ERR("failed to create group info"); -- 2.7.4 From f99c5991a89dfd6b88370afff0d802f29aaffff7 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Wed, 14 Oct 2015 10:48:38 +0900 Subject: [PATCH 02/16] use snprintf instead of strcpy (prevent: 486267, 486268, 486269, 486279, 486280, 486281) Change-Id: I52736d3a43543fba5956a92e447805b97035f1fd Signed-off-by: Jehun Lim --- src/data/mediadata.c | 2 +- src/grid/grid_gallery.c | 2 +- src/view/detail.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/mediadata.c b/src/data/mediadata.c index 3f68f37..524da10 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -259,7 +259,7 @@ static void _get_place_string(const char *src, char **city, char **country) return; } - strcpy(str, src); + snprintf(str, sizeof(str), "%s", src); p = strtok_r(str, "/", &tmp); if (!p) diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c index eb39a7b..8ea9d6d 100644 --- a/src/grid/grid_gallery.c +++ b/src/grid/grid_gallery.c @@ -129,7 +129,7 @@ static char *_place_text_get(void *data, Evas_Object *obj, const char *part) snprintf(buf, sizeof(buf), "%d", cnt); return strdup(buf); } else { - strcpy(buf, gi->name); + snprintf(buf, sizeof(buf), "%s", gi->name); city = strtok_r(buf, "/", &tmp); country = strtok_r(tmp, "", &tmp); diff --git a/src/view/detail.c b/src/view/detail.c index 59d77a5..851450f 100644 --- a/src/view/detail.c +++ b/src/view/detail.c @@ -618,7 +618,7 @@ static void _get_place_title(const char *title, char *str, int size) char buf[64], s[64]; char *city, *country, *tmp; - strcpy(buf, title); + snprintf(buf, sizeof(buf), "%s", title); city = strtok_r(buf, "/", &tmp); country = strtok_r(tmp, "", &tmp); -- 2.7.4 From 1365c2d687a0c9b719637c6be26aa0b940f195e8 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Thu, 15 Oct 2015 15:08:31 +0900 Subject: [PATCH 03/16] albumdata/folderdata: fix memory leak (prevent: 485022, 485110, 485150, 485223, 485238, 485279, 486864) Change-Id: I8b432f7f2a4f6620a8c7b1c074e475473a23273f Signed-off-by: Jehun Lim --- src/data/albumdata.c | 20 +++++++++++-------- src/data/folderdata.c | 53 +++++++++++++++++++++++++++------------------------ 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/data/albumdata.c b/src/data/albumdata.c index 9aa9537..a81f3a0 100644 --- a/src/data/albumdata.c +++ b/src/data/albumdata.c @@ -181,17 +181,21 @@ static void _destroy_media_list(Eina_List *list) app_media_destroy(am); } +static void _destroy_album_info(struct album_info *ai) +{ + free(ai->name); + free(ai->artist); + free(ai->album_art); + + free(ai); +} + static void _destroy_album_list(Eina_List *list) { struct album_info *ai; - EINA_LIST_FREE(list, ai) { - free(ai->name); - free(ai->artist); - free(ai->album_art); - - free(ai); - } + EINA_LIST_FREE(list, ai) + _destroy_album_info(ai); } static bool _get_each_media_info(media_info_h media_h, void *data) @@ -276,7 +280,7 @@ static bool _get_each_album_info(media_album_h album, void *data) err: media_filter_destroy(filter); - free(ai); + _destroy_album_info(ai); return false; } diff --git a/src/data/folderdata.c b/src/data/folderdata.c index 2f1d48f..bd9ad40 100644 --- a/src/data/folderdata.c +++ b/src/data/folderdata.c @@ -159,18 +159,22 @@ static char *_get_title(app_media_info *mi) return strndup(mi->title, 1); } +static void _destroy_folder_info(struct folder_info *fi) +{ + free(fi->id); + free(fi->name); + free(fi->path); + free(fi->parent_id); + + free(fi); +} + static void _destroy_folder_list(Eina_List *list) { struct folder_info *fi; - EINA_LIST_FREE(list, fi) { - free(fi->id); - free(fi->name); - free(fi->path); - free(fi->parent_id); - - free(fi); - } + EINA_LIST_FREE(list, fi) + _destroy_folder_info(fi); } static void _destroy_media_list(Eina_List *list) @@ -216,46 +220,40 @@ static bool _get_each_folder_info(media_folder_h folder, void *data) return false; } + if (!_create_filter(fd, &filter, NULL, E_FILTER_MEDIA)) { + _ERR("failed to create filter"); + free(fi); + return false; + } + if (media_folder_get_folder_id(folder, &(fi->id)) != MEDIA_CONTENT_ERROR_NONE) { _ERR("failed to fetch folder id"); - free(fi); - return false; + goto err; } if (media_folder_get_name(folder, &(fi->name)) != MEDIA_CONTENT_ERROR_NONE) { _ERR("failed to fetch folder name"); - free(fi); - return false; + goto err; } if (media_folder_get_path(folder, &(fi->path)) != MEDIA_CONTENT_ERROR_NONE) { _ERR("failed to fetch folder path"); - free(fi); - return false; + goto err; } if (media_folder_get_parent_folder_id(folder, &(fi->parent_id)) != MEDIA_CONTENT_ERROR_NONE) { _ERR("failed to fetch parent folder id"); - free(fi); - return false; - } - - if (!_create_filter(fd, &filter, NULL, E_FILTER_MEDIA)) { - _ERR("failed to create filter"); - free(fi); - return false; + goto err; } if (media_folder_get_media_count_from_db(fi->id, filter, &(fi->count)) != MEDIA_CONTENT_ERROR_NONE) { _ERR("failed to get media count"); - free(fi); - media_filter_destroy(filter); - return false; + goto err; } fd->folder_list = eina_list_append(fd->folder_list, fi); @@ -263,6 +261,11 @@ static bool _get_each_folder_info(media_folder_h folder, void *data) media_filter_destroy(filter); return true; + +err: + media_filter_destroy(filter); + _destroy_folder_info(fi); + return false; } static bool _get_each_media_info(media_info_h media_h, void *data) -- 2.7.4 From cd0e6306b592412059f126b87cc04b1187234640 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Wed, 18 Nov 2015 19:48:05 +0900 Subject: [PATCH 04/16] fix check patch issues Change-Id: Ic9373c5d62251682c808f500e568e117724a5c16 Signed-off-by: Minkyu Kang --- src/grid/grid_gallery.c | 27 ++++++++++++--------------- src/view/action_menu.c | 6 ++++-- src/view/base.c | 2 +- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c index 8ea9d6d..23d69d3 100644 --- a/src/grid/grid_gallery.c +++ b/src/grid/grid_gallery.c @@ -124,27 +124,24 @@ static char *_place_text_get(void *data, Evas_Object *obj, const char *part) gi = data; + snprintf(buf, sizeof(buf), "%s", gi->name); + city = strtok_r(buf, "/", &tmp); + country = strtok_r(tmp, "", &tmp); + if (!strcmp(part, PART_ELM_TEXT_COUNT)) { cnt = eina_list_count(gi->list); snprintf(buf, sizeof(buf), "%d", cnt); return strdup(buf); - } else { - snprintf(buf, sizeof(buf), "%s", gi->name); - - city = strtok_r(buf, "/", &tmp); - country = strtok_r(tmp, "", &tmp); - - if (!strcmp(part, PART_ELM_TEXT_CITY)) { - if (!city) - return NULL; + } else if (!strcmp(part, PART_ELM_TEXT_CITY)) { + if (!city) + return NULL; - return strdup(city); - } else if (!strcmp(part, PART_ELM_TEXT_COUNTRY)) { - if (!country) - return NULL; + return strdup(city); + } else if (!strcmp(part, PART_ELM_TEXT_COUNTRY)) { + if (!country) + return NULL; - return strdup(country); - } + return strdup(country); } return NULL; diff --git a/src/view/action_menu.c b/src/view/action_menu.c index cefee40..210d4f6 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -656,7 +656,8 @@ static bool _draw_menu_area(struct _priv *priv) return false; } - elm_object_part_content_set(priv->content, PART_ACTION_MENU_AREA, table); + elm_object_part_content_set(priv->content, + PART_ACTION_MENU_AREA, table); priv->table = table; @@ -823,7 +824,8 @@ static void _update_favorite_area(struct _priv *priv) elm_gengrid_item_class_free(ic); - count = eina_list_count(priv->favorite_list) / content_info[type].grid_n; + count = eina_list_count(priv->favorite_list) + / content_info[type].grid_n; if (eina_list_count(priv->favorite_list) % content_info[type].grid_n) count++; diff --git a/src/view/base.c b/src/view/base.c index 630925e..c48c22b 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -40,7 +40,7 @@ #define TIME_TOAST_FAVORITE 5.0 -#define ARRAY_SIZE(arr) (sizeof(arr)) / (sizeof((arr)[0])) +#define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0])) enum _object_type { BASE_MENU_BTN = 0, -- 2.7.4 From 0e0216489a6ba1830f612cd8705baa1a8e6d4c00 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Fri, 20 Nov 2015 16:27:37 +0900 Subject: [PATCH 05/16] remove map related codes on edc files Change-Id: I31e2e6cfd001d796c4a07fca1b60efeada2f117a Signed-off-by: Minkyu Kang --- res/edc/widgets/button.edc | 177 ------------------------- res/edc/widgets/gengrid.edc | 307 -------------------------------------------- 2 files changed, 484 deletions(-) diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index 9c9ac6f..eb3cdcc 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -1984,24 +1984,6 @@ group { } } part { - name: "map"; - type: RECT; - scale: 1; - description { - state: "default" 0.0; - perspective { - zplane: 0; - focal: 1000; - } - visible: 0; - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - perspective.zplane: -100; - } - } - part { name: PART_RECENT_CONTENT_THUMBNAIL; type: SWALLOW; scale: 1; @@ -2012,15 +1994,10 @@ group { to: PART_RECENT_CONTENT_TEXTBG; relative: 1.0 0.0; } - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -2040,15 +2017,10 @@ group { image.normal: IMAGE_PREVIEW_PLAY; min: 120 120; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -2085,10 +2057,6 @@ group { align: 1.0 0.0; fixed: 1 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "show" 0.0; @@ -2099,12 +2067,10 @@ group { description { state: "default,selected" 0.0; inherit: "default" 0.0; - map.on: 1; } description { state: "show,selected" 0.0; inherit: "show" 0.0; - map.on: 1; } } part { @@ -2124,15 +2090,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 0 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2162,15 +2123,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2200,15 +2156,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2235,10 +2186,6 @@ group { min: 0 198; align: 0.5 1.0; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } } part { @@ -2250,17 +2197,12 @@ group { rel1.to: PART_RECENT_CONTENT_TEXTBG; rel2.to: PART_RECENT_CONTENT_TEXTBG; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; visible: 1; color: COLOR_ITEM_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -2326,15 +2268,10 @@ group { align: 0.5 0.0; color: COLOR_TEXT_FOCUS; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } description { state: "selected_0" 0.0; @@ -2377,15 +2314,10 @@ group { align: 0.5 0.0; color: COLOR_TEXT_FOCUS; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } description { state: "selected_0" 0.0; @@ -2430,15 +2362,10 @@ group { min: 100 20; align: 0.0 0.0; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } @@ -2461,15 +2388,10 @@ group { min: 100 20; align: 1.0 0.0; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -2502,15 +2424,10 @@ group { min: 0 30; align: 0.5 0.0; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -2631,16 +2548,6 @@ group { name: SIG_BTN_CLICKED; signal: SIG_BTN_CLICKED; source: SIG_SOURCE_SRC; - action: STATE_SET "selected" 0.0; - target: "map"; - transition: TRANSITION_CLICK; - after: "after_selected"; - } - program { - name: "after_selected"; - action: STATE_SET "default" 0.0; - target: "map"; - transition: TRANSITION_CLICK; after: "item_selected"; } program { @@ -2704,24 +2611,6 @@ group { } } part { - name: "map"; - type: RECT; - scale: 1; - description { - state: "default" 0.0; - perspective { - zplane: 0; - focal: 1000; - } - visible: 0; - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - perspective.zplane: -100; - } - } - part { name: PART_PLAYING_CONTENT_THUMBNAIL; type: SWALLOW; scale: 1; @@ -2732,15 +2621,10 @@ group { to: "bg_text"; relative: 1.0 0.0; } - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -2777,10 +2661,6 @@ group { align: 1.0 0.0; fixed: 1 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "show" 0.0; @@ -2791,12 +2671,10 @@ group { description { state: "default,selected" 0.0; inherit: "default" 0.0; - map.on: 1; } description { state: "show,selected" 0.0; inherit: "show" 0.0; - map.on: 1; } } part { @@ -2816,15 +2694,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 0 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2854,15 +2727,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2892,15 +2760,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2928,16 +2791,11 @@ group { align: 0.5 1.0; color: COLOR_ITEM_BG; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_ITEM_FOCUS; - map.on: 1; } } part { @@ -2949,16 +2807,11 @@ group { rel1.to: "defaultbg_text"; rel2.to: "defaultbg_text"; color: COLOR_ITEM_BG; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_ITEM_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -3024,16 +2877,11 @@ group { align: 0.5 0.0; color: COLOR_TEXT_TITLE; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_TEXT_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -3077,16 +2925,11 @@ group { align: 0.5 0.0; color: COLOR_TEXT_INFO; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_TEXT_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -3130,16 +2973,11 @@ group { align: 0.5 0.0; color: COLOR_TEXT_INFO; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_TEXT_FOCUS; - map.on: 1; } description { @@ -3163,15 +3001,10 @@ group { align: 0.5 0.0; color: COLOR_ITEM_BORDER; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -3340,16 +3173,6 @@ group { name: SIG_BTN_CLICKED; signal: SIG_BTN_CLICKED; source: SIG_SOURCE_SRC; - action: STATE_SET "selected" 0.0; - target: "map"; - transition: TRANSITION_CLICK; - after: "after_selected"; - } - program { - name: "after_selected"; - action: STATE_SET "default" 0.0; - target: "map"; - transition: TRANSITION_CLICK; after: "item_selected"; } program { diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc index be7d595..13166fa 100644 --- a/res/edc/widgets/gengrid.edc +++ b/res/edc/widgets/gengrid.edc @@ -34,24 +34,6 @@ group { } } part { - name: "map"; - type: RECT; - scale: 1; - description { - state: "default" 0.0; - perspective { - zplane: 0; - focal: 1000; - } - visible: 0; - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - perspective.zplane: -100; - } - } - part { name: "bg"; type: RECT; scale: 1; @@ -77,15 +59,10 @@ group { relative: 1.0 0.0; } color: 0 0 0 115; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -96,15 +73,10 @@ group { state : "default" 0.0; rel1.to: "defaultbg"; rel2.to: "defaultbg"; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -143,15 +115,10 @@ group { min: 28 28; align: 1.0 0.0; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -171,15 +138,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 0 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -209,15 +171,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -247,15 +204,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -279,10 +231,6 @@ group { min: 0 82; align: 0.5 1.0; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } } part { @@ -295,17 +243,12 @@ group { rel1.to: PART_ELM_SWALLOW_TEXTBG; rel2.to: PART_ELM_SWALLOW_TEXTBG; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; visible: 1; color: COLOR_ITEM_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -368,16 +311,11 @@ group { align: 0.0 0.5; } color: COLOR_TEXT_FOCUS; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_TEXT_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -470,15 +408,10 @@ group { image.normal: IMAGE_PREVIEW_PLAY; min: 80 80; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } } @@ -564,24 +497,6 @@ group { } } part { - name: "map"; - type: RECT; - scale: 1; - description { - state: "default" 0.0; - perspective { - zplane: 0; - focal: 1000; - } - visible: 0; - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - perspective.zplane: -100; - } - } - part { name: "bg"; type: RECT; scale: 1; @@ -604,15 +519,10 @@ group { rel1.to: "bg"; rel2.to: "bg"; color: COLOR_ITEM_DEFAULT; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -632,15 +542,10 @@ group { image.normal: IMAGE_THUMBNAIL_PICTURE; min: 80 80; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -651,15 +556,10 @@ group { state : "default" 0.0; rel1.to: "defaultbg"; rel2.to: "defaultbg"; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -678,15 +578,10 @@ group { } min: 80 80; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -725,15 +620,10 @@ group { min: 28 28; align: 1.0 0.0; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -753,15 +643,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 0 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -791,15 +676,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -826,15 +706,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -864,15 +739,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 0 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -920,15 +790,10 @@ group { align: 1.0 1.0; color: COLOR_TEXT_FOCUS; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } } @@ -1011,24 +876,6 @@ group { } } part { - name: "map"; - type: RECT; - scale: 1; - description { - state: "default" 0.0; - perspective { - zplane: 0; - focal: 1000; - } - visible: 0; - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - perspective.zplane: -100; - } - } - part { name: "bg"; type: RECT; scale: 1; @@ -1054,15 +901,10 @@ group { relative: 0.0 1.0; } color: COLOR_ITEM_DEFAULT; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -1082,15 +924,10 @@ group { image.normal: IMAGE_THUMBNAIL_SONG; min: 80 80; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -1101,15 +938,10 @@ group { state : "default" 0.0; rel1.to: "defaultbg"; rel2.to: "defaultbg"; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -1129,15 +961,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 0 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -1167,15 +994,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -1205,15 +1027,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -1239,16 +1056,11 @@ group { align: 1.0 0.5; color: COLOR_ITEM_BG; fixed: 1 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_ITEM_FOCUS; - map.on: 1; } } part { @@ -1260,16 +1072,11 @@ group { rel1.to: "defaultbg_text"; rel2.to: "defaultbg_text"; color: COLOR_ITEM_BG; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_ITEM_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -1332,16 +1139,11 @@ group { align: 0.5 0.0; color: COLOR_TEXT_TITLE; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_TEXT_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -1384,16 +1186,11 @@ group { align: 0.5 0.0; color: COLOR_TEXT_INFO; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_TEXT_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -1436,16 +1233,11 @@ group { align: 0.5 0.0; color: COLOR_TEXT_INFO; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_TEXT_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -1488,15 +1280,10 @@ group { min: 28 28; align: 1.0 0.0; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -1514,15 +1301,10 @@ group { align: 0.5 0.0; color: COLOR_ITEM_BORDER; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } @@ -1674,15 +1456,10 @@ group { image.normal: IMAGE_THUMBNAIL_SONG; min: 0 0; fixed: 1 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -1701,16 +1478,11 @@ group { relative: 1.0 1.0; } color: COLOR_ITEM_BG; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_ITEM_FOCUS; - map.on: 1; } } part { @@ -1733,15 +1505,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -1803,16 +1570,11 @@ group { align: 0.5 0.0; color: COLOR_TEXT_INFO; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_TEXT_FOCUS; - map.on: 1; } description { state: "selected_0" 0.0; @@ -1892,24 +1654,6 @@ group { } } part { - name: "map"; - type: RECT; - scale: 1; - description { - state: "default" 0.0; - perspective { - zplane: 0; - focal: 1000; - } - visible: 0; - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - perspective.zplane: -100; - } - } - part { name: "bg"; type: RECT; scale: 1; @@ -1932,15 +1676,10 @@ group { rel1.to: "bg"; rel2.to: "bg"; color: COLOR_ITEM_DEFAULT; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -1951,15 +1690,10 @@ group { state : "default" 0.0; rel1.to: "defaultbg"; rel2.to: "defaultbg"; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -1979,15 +1713,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 0 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2017,15 +1746,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2052,15 +1776,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 1 0; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2090,15 +1809,10 @@ group { color: COLOR_ITEM_FOCUS; fixed: 0 1; visible: 0; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; visible: 1; } description { @@ -2163,15 +1877,10 @@ group { align: 0.5 0.5; color: COLOR_TEXT_FOCUS; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -2212,15 +1921,10 @@ group { align: 1.0 1.0; color: COLOR_TEXT_FOCUS; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } } @@ -2342,15 +2046,10 @@ group { align: 0.5 0.0; color: COLOR_TEXT_FOCUS; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } part { @@ -2389,15 +2088,10 @@ group { align: 0.5 0.0; color: 255 255 255 122; fixed: 0 1; - map { - perspective_on: 1; - perspective: "map"; - } } description { state: "selected" 0.0; inherit: "default" 0.0; - map.on: 1; } } } @@ -2529,7 +2223,6 @@ group { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_ITEM_FOCUS; - map.on: 1; } } } -- 2.7.4 From 37f4aea8000a9f41c81d2457f30dfa0fe28deb4d Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Thu, 26 Nov 2015 15:56:49 +0900 Subject: [PATCH 06/16] base: set focus next object for menu button Change-Id: I4291580ea522d578f168624ecf418e610b022118 --- src/view/base.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/view/base.c b/src/view/base.c index c48c22b..4aa3680 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -550,6 +550,29 @@ static bool _draw_title(struct _priv *priv) return true; } +static void _set_menu_focus(struct _priv *priv) +{ + Evas_Object *btn_l, *btn_r; + int i; + + for (i = 0; i < E_LAYOUT_MAX; i++) { + if (i == 0) + btn_l = priv->menu_btn[i]; + else + btn_l = priv->menu_btn[i - 1]; + + if (i == E_LAYOUT_MAX - 1) + btn_r = priv->menu_btn[i]; + else + btn_r = priv->menu_btn[i + 1]; + + elm_object_focus_next_object_set(priv->menu_btn[i], + btn_l, ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(priv->menu_btn[i], + btn_r, ELM_FOCUS_RIGHT); + } +} + static bool _draw_menu_btn(struct _priv *priv) { Evas_Object *box, *btn; @@ -588,16 +611,12 @@ static bool _draw_menu_btn(struct _priv *priv) priv->menu_btn[i] = btn; } + _set_menu_focus(priv); + evas_object_show(box); elm_object_part_content_set(priv->base, PART_BASE_MENU_AREA, box); - elm_object_focus_next_object_set(priv->menu_btn[E_LAYOUT_MAX - 1], - priv->menu_btn[0], ELM_FOCUS_RIGHT); - elm_object_focus_next_object_set(priv->menu_btn[0], - priv->menu_btn[E_LAYOUT_MAX - 1], - ELM_FOCUS_LEFT); - return true; } -- 2.7.4 From e3e8844802cb162ead4415f9b9e9c2abfb1e6aa1 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Thu, 3 Dec 2015 16:26:30 +0900 Subject: [PATCH 07/16] add thumbnail creation routine Change-Id: Ib592348c3acfc57db650ac89b05953d5e7f07917 Signed-off-by: Jehun Lim --- include/util/util.h | 3 +++ src/grid/grid_gallery.c | 29 +++++++++++++++++++++++++++++ src/grid/grid_movie.c | 29 +++++++++++++++++++++++++++++ src/util/listmgr.c | 3 +++ src/util/util.c | 24 ++++++++++++++++++++++++ 5 files changed, 88 insertions(+) diff --git a/include/util/util.h b/include/util/util.h index 2857f20..3c29281 100644 --- a/include/util/util.h +++ b/include/util/util.h @@ -41,5 +41,8 @@ int util_get_media_index(Eina_List *list, void *info); int util_get_media_index_from_id(Eina_List *list, const char *id); app_media *util_find_media_info(Eina_List *list, const char *id); void util_add_to_recent(Eina_List *list, int index); +void util_create_thumbnail(Evas_Object *grid, app_media *am, + void (*completed_cb)(media_content_error_e, + const char *, void *)); #endif /* __AIR_MEDIAHUB_UTIL_H__ */ diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c index 23d69d3..e9de31e 100644 --- a/src/grid/grid_gallery.c +++ b/src/grid/grid_gallery.c @@ -31,6 +31,29 @@ #define STR_PLACE_NAME "City" +static void _create_thumbnail_completed_cb(media_content_error_e err, + const char *path, void *user_data) +{ + Elm_Object_Item *it; + app_media *am; + + if (!user_data) + return; + + it = user_data; + + media_content_connect(); + + am = elm_object_item_data_get(it); + + app_media_update(am); + + elm_gengrid_item_fields_update(it, PART_ELM_SWALLOW_THUMBNAIL, + ELM_GENGRID_ITEM_FIELD_CONTENT); + + media_content_disconnect(); +} + static char *_media_text_get(void *data, Evas_Object *obj, const char *part) { app_media *am; @@ -81,6 +104,12 @@ static Evas_Object *_media_content_get(void *data, eo = NULL; if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) { + if (!info->thumbnail_path) { + util_create_thumbnail(obj, am, + _create_thumbnail_completed_cb); + return NULL; + } + eo = util_add_image(obj, info->thumbnail_path); if (!eo) { _ERR("failed to create image object"); diff --git a/src/grid/grid_movie.c b/src/grid/grid_movie.c index f8bc519..0341f57 100644 --- a/src/grid/grid_movie.c +++ b/src/grid/grid_movie.c @@ -31,6 +31,29 @@ #define STR_GENRE_NAME "Genre" +static void _create_thumbnail_completed_cb(media_content_error_e err, + const char *path, void *user_data) +{ + Elm_Object_Item *it; + app_media *am; + + if (!user_data) + return; + + it = user_data; + + media_content_connect(); + + am = elm_object_item_data_get(it); + + app_media_update(am); + + elm_gengrid_item_fields_update(it, PART_ELM_SWALLOW_THUMBNAIL, + ELM_GENGRID_ITEM_FIELD_CONTENT); + + media_content_disconnect(); +} + static char *_media_text_get(void *data, Evas_Object *obj, const char *part) { app_media *am; @@ -71,6 +94,12 @@ static Evas_Object *_media_content_get(void *data, Evas_Object *obj, eo = NULL; if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) { + if (!info->thumbnail_path) { + util_create_thumbnail(obj, am, + _create_thumbnail_completed_cb); + return NULL; + } + eo = util_add_image(obj, info->thumbnail_path); if (!eo) { _ERR("failed to create image object"); diff --git a/src/util/listmgr.c b/src/util/listmgr.c index ee0d5ec..b3e8d34 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -28,6 +28,7 @@ #include "util/util.h" #define STR_GRID_ID "grid_id" +#define STR_GRID_CONTENT "grid_content" #define MAX_GRID_WIDTH 1858 @@ -450,6 +451,8 @@ static Evas_Object *_add_list_item_grid(struct listmgr *lmgr, inputmgr_add_callback(grid, LISTMGR_GRID, &_grid_handler, lmgr); + evas_object_data_set(grid, STR_GRID_CONTENT, gi->list); + return grid; } diff --git a/src/util/util.c b/src/util/util.c index 80c2328..43daa06 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -23,6 +23,8 @@ #include "define.h" #include "util/util.h" +#define STR_GRID_CONTENT "grid_content" + #define VIDEO_COPYRIGHT "Unknown" /* @@ -395,3 +397,25 @@ void util_add_to_recent(Eina_List *list, int index) app_media_update(am); } + +void util_create_thumbnail(Evas_Object *grid, app_media *am, + void (*completed_cb)(media_content_error_e, + const char *, void *)) +{ + Eina_List *list; + Elm_Object_Item *it; + int index; + int r; + + list = evas_object_data_get(grid, STR_GRID_CONTENT); + index = util_get_media_index(list, am); + + it = elm_gengrid_first_item_get(grid); + while (index--) + it = elm_gengrid_item_next_get(it); + + r = media_info_create_thumbnail(app_media_get_media_handle(am), + completed_cb, it); + if (r != MEDIA_CONTENT_ERROR_NONE) + _ERR("failed to create thumbnail"); +} -- 2.7.4 From 73f71371d7592c0aa5885b8929cb32d203a7dc4f Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Thu, 3 Dec 2015 17:06:31 +0900 Subject: [PATCH 08/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 09/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 10/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 11/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 12/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 13/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 14/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 15/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 16/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