summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-08-24 15:09:37 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-08-24 19:46:34 +0900
commitf96da25b729ccd1d209ad3ac12bffeee2f0c419b (patch)
tree6f3352b4d936aa70e4518dbcb3a701caf258e5a9 /src
parentafccb100c00d0f9afe185ac2595ff01c3284f32b (diff)
downloadair_mediahub-f96da25b729ccd1d209ad3ac12bffeee2f0c419b.tar.gz
air_mediahub-f96da25b729ccd1d209ad3ac12bffeee2f0c419b.tar.bz2
air_mediahub-f96da25b729ccd1d209ad3ac12bffeee2f0c419b.zip
action_view: update grid item in base view when favorite value is changed
Change-Id: I20b96ef4cd3599563c84b9061ff3360ef0e746ec Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
Diffstat (limited to 'src')
-rw-r--r--src/layout/gallery.c3
-rw-r--r--src/layout/movie.c3
-rw-r--r--src/layout/music.c3
-rw-r--r--src/util/listmgr.c58
-rw-r--r--src/view/action_menu.c48
-rw-r--r--src/view/base.c23
6 files changed, 119 insertions, 19 deletions
diff --git a/src/layout/gallery.c b/src/layout/gallery.c
index d701a2c..46fcc00 100644
--- a/src/layout/gallery.c
+++ b/src/layout/gallery.c
@@ -455,6 +455,9 @@ static void _update(void *layout_data, int update_type, void *data)
case UPDATE_CONTENT:
_update_content_list(priv);
break;
+ case UPDATE_CONTENT_ITEM:
+ listmgr_update_content_item(priv->listmgr);
+ break;
case UPDATE_FOCUS:
if (!data) {
_ERR("invalid argument");
diff --git a/src/layout/movie.c b/src/layout/movie.c
index 59589f8..475db18 100644
--- a/src/layout/movie.c
+++ b/src/layout/movie.c
@@ -716,6 +716,9 @@ static void _update(void *layout_data, int update_type, void *data)
_update_content_list(priv);
_update_recent_item(priv, -1);
break;
+ case UPDATE_CONTENT_ITEM:
+ listmgr_update_content_item(priv->listmgr);
+ break;
case UPDATE_FOCUS:
if (!data) {
_ERR("invalid argument");
diff --git a/src/layout/music.c b/src/layout/music.c
index 0920703..f3ce0b1 100644
--- a/src/layout/music.c
+++ b/src/layout/music.c
@@ -643,6 +643,9 @@ static void _update(void *layout_data, int update_type, void *data)
_update_content_list(priv);
_update_playing_item(priv, -1);
break;
+ case UPDATE_CONTENT_ITEM:
+ listmgr_update_content_item(priv->listmgr);
+ break;
case UPDATE_PLAY_INFO:
if (!data) {
_ERR("invalid argument");
diff --git a/src/util/listmgr.c b/src/util/listmgr.c
index 65af1d6..0f8b84b 100644
--- a/src/util/listmgr.c
+++ b/src/util/listmgr.c
@@ -256,6 +256,18 @@ static void _item_focused_cb(void *data, Elm_Object_Item *it,
lmgr->focused_it = it;
}
+static void _add_grid_item_callback(Elm_Object_Item *it, void *data)
+{
+ elm_object_item_signal_callback_add(it, SIG_ITEM_FOCUSED,
+ SIG_SOURCE_EDC, _item_focused_cb, data);
+}
+
+static void _delete_grid_item_callback(Elm_Object_Item *it)
+{
+ elm_object_item_signal_callback_del(it, SIG_ITEM_FOCUSED,
+ SIG_SOURCE_EDC, _item_focused_cb);
+}
+
static void _realized_cb(int id, void *data, Evas_Object *obj,
Elm_Object_Item *it)
{
@@ -266,8 +278,7 @@ static void _realized_cb(int id, void *data, Evas_Object *obj,
lmgr = data;
- elm_object_item_signal_callback_add(it, SIG_ITEM_FOCUSED,
- SIG_SOURCE_EDC, _item_focused_cb, lmgr);
+ _add_grid_item_callback(it, lmgr);
}
static void _unrealized_cb(int id, void *data, Evas_Object *obj,
@@ -276,8 +287,7 @@ static void _unrealized_cb(int id, void *data, Evas_Object *obj,
if (!it)
return;
- elm_object_item_signal_callback_del(it, SIG_ITEM_FOCUSED,
- SIG_SOURCE_EDC, _item_focused_cb);
+ _delete_grid_item_callback(it);
}
static input_handler _grid_handler = {
@@ -519,6 +529,46 @@ bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update)
return true;
}
+void _update_grid_realized_items(struct listmgr *lmgr, Eina_List *list)
+{
+ Eina_List *l;
+ Elm_Object_Item *it;
+
+ EINA_LIST_FOREACH(list, l, it) {
+ _delete_grid_item_callback(it);
+
+ elm_gengrid_item_update(it);
+ _add_grid_item_callback(it, lmgr);
+ }
+}
+
+bool listmgr_update_content_item(struct listmgr *lmgr)
+{
+ Eina_List *box_item, *grid_realized;
+ Eina_List *l;
+ Evas_Object *ly, *grid;
+
+ if (!lmgr) {
+ _ERR("failed to get listmgr");
+ return false;
+ }
+
+ box_item = elm_box_children_get(lmgr->box);
+
+ EINA_LIST_FOREACH(box_item, l, ly) {
+ grid = elm_object_part_content_get(ly, PART_ITEM_CONTENT);
+ if (!grid) {
+ _ERR("failed to get grid object");
+ return false;
+ }
+
+ grid_realized = elm_gengrid_realized_items_get(grid);
+ _update_grid_realized_items(lmgr, grid_realized);
+ }
+
+ return true;
+}
+
bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list)
{
Evas_Object *ly, *btn, *grid;
diff --git a/src/view/action_menu.c b/src/view/action_menu.c
index 34b682d..b8b899a 100644
--- a/src/view/action_menu.c
+++ b/src/view/action_menu.c
@@ -63,7 +63,7 @@ struct _priv {
Eina_List *favorite_list;
- app_media_info *mi;
+ app_media *am;
int content_type;
};
@@ -132,25 +132,46 @@ struct _content_info content_info[] = {
static bool _favorite_clicked(struct _priv *priv, Evas_Object *obj)
{
+ app_media_info *mi;
int r;
bool favorite;
+ r = media_content_connect();
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("failed to connect to media content");
+ return false;
+ }
+
+ mi = app_media_get_info(priv->am);
+ if (!mi) {
+ _ERR("failed to get app media info");
+ media_content_disconnect();
+ return false;
+ }
+
r = app_contents_favorite_check(CONTENTS_MEDIA,
- priv->mi->media_id, &favorite);
+ mi->media_id, &favorite);
if (r != APP_CONTENTS_ERROR_NONE) {
_ERR("failed to check favorite");
+ media_content_disconnect();
return false;
}
r = app_contents_favorite_set(CONTENTS_MEDIA,
- priv->mi->media_id, !favorite);
+ mi->media_id, !favorite);
if (r != APP_CONTENTS_ERROR_NONE) {
_ERR("failed to set favorite");
+ media_content_disconnect();
return false;
}
+ app_media_update(priv->am);
+
+ viewmgr_update_view(VIEW_BASE, UPDATE_CONTENT_ITEM, NULL);
viewmgr_hide_view(VIEW_ACTION_MENU);
+ media_content_disconnect();
+
return true;
}
@@ -587,11 +608,18 @@ static void _set_menu_state(Evas_Object *btn, int idx, const char *id)
static void _update_menu_area(struct _priv *priv)
{
Evas_Object *btn;
+ app_media_info *mi;
int i;
int col, row;
elm_table_clear(priv->table, EINA_TRUE);
+ mi = app_media_get_info(priv->am);
+ if (!mi) {
+ _ERR("failed to get app media info");
+ return;
+ }
+
for (i = 0; i < NUM_MENU_BTN; i++) {
btn = elm_button_add(priv->base);
if (!btn) {
@@ -602,7 +630,7 @@ static void _update_menu_area(struct _priv *priv)
elm_object_style_set(btn, menu_info[i].style);
elm_object_text_set(btn, menu_info[i].title);
- _set_menu_state(btn, i, priv->mi->media_id);
+ _set_menu_state(btn, i, mi->media_id);
evas_object_show(btn);
@@ -682,21 +710,21 @@ static bool _draw_items(struct _priv *priv)
static bool _update_items(struct _priv *priv, struct view_update_data *vdata)
{
- app_media *am;
+ app_media_info *mi;
- am = eina_list_nth(vdata->list, vdata->index);
- if (!am) {
+ priv->am = eina_list_nth(vdata->list, vdata->index);
+ if (!priv->am) {
_ERR("failed to get app media");
return false;
}
- priv->mi = app_media_get_info(am);
- if (!priv->mi) {
+ mi = app_media_get_info(priv->am);
+ if (!mi) {
_ERR("failed to get app media info");
return false;
}
- priv->content_type = _get_content_type(priv->mi);
+ priv->content_type = _get_content_type(mi);
_update_menu_area(priv);
_update_favorite_area(priv);
diff --git a/src/view/base.c b/src/view/base.c
index b1998b6..92a1cea 100644
--- a/src/view/base.c
+++ b/src/view/base.c
@@ -565,31 +565,44 @@ static void _update(void *view_data, int update_type, void *data)
return;
}
- if (!data) {
- _ERR("invalid argument");
- return;
- }
-
priv = view_data;
switch (update_type) {
case UPDATE_FOCUS:
case UPDATE_PLAY_INFO:
+ if (!data)
+ goto err;
+
vdata = data;
layoutmgr_update_layout(priv->lmgr,
g_menu_item[priv->current_layout].layout_id,
update_type, vdata);
break;
+ case UPDATE_CONTENT_ITEM:
+ layoutmgr_update_layout(priv->lmgr,
+ g_menu_item[priv->current_layout].layout_id,
+ update_type, NULL);
+ break;
case UPDATE_FAVORITE:
+ if (!data)
+ goto err;
+
_update_favorite_view(priv, data);
break;
case UPDATE_RECENT:
+ if (!data)
+ goto err;
+
_update_recent_view(priv, data);
break;
default:
break;
}
+
+ return;
+err:
+ _ERR("invalid argument");
}
static void _pause(void *view_data)