View: Apply animation to show/hide of action menu view 36/47936/4
authorHyojung Jo <hj903.jo@samsung.com>
Thu, 10 Sep 2015 07:19:25 +0000 (16:19 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Fri, 11 Sep 2015 01:51:49 +0000 (10:51 +0900)
Change-Id: Id7db6ca32a75c6269f5a2ae651ac5486f7a9f53c
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
include/data/app.h
include/define.h
res/view/action_menu.edc
src/data/app.c
src/view/view_action_menu.c
src/view/view_base.c

index 9ba812c..d71e112 100644 (file)
@@ -41,7 +41,7 @@ bool get_app_icon_bg_color(struct app_data *adata,
 bool get_app_text_bg_color(struct app_data *adata,
                int *r, int *g, int *b, int *a);
 Eina_List *get_app_list(void);
-Eina_List *get_app_favorite_list(void);
+Eina_List *get_app_favorite_list(Eina_List *list);
 bool get_sorted_app_list(Eina_List **list, enum sort_type type);
 void free_app_list(Eina_List *list);
 
index b164057..30ca3ef 100644 (file)
@@ -77,6 +77,9 @@
 #define SIG_NO_CONTENT "no.content"
 #define SIG_CONTENT "content"
 #define SIG_TIMEOUT "timeout"
+#define SIG_SHOW "show"
+#define SIG_HIDE "hide"
+#define SIG_HIDE_DONE "hide.done"
 
 /* Signal Source */
 #define SRC_MYAPPS "source.myapps"
 /* Transition */
 #define TRANSITION_FOCUS DECELERATE 0.20
 #define TRANSITION_CLICK DECELERATE 0
+#define TRANSITION_MENU_SHOW SIN 0.45
+#define TRANSITION_MENU_HIDE DECEL 0.3
 
 /* Color */
 #define COLOR_ITEM_FOCUS 0 119 246 255
index 3302c5d..c371701 100644 (file)
@@ -18,6 +18,25 @@ group {
        name, GRP_VIEW_ACTION_MENU;
        parts {
                part {
+                       name, "reference";
+                       type, RECT;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 500 0;
+                               rel1.relative, 1.0 0.0;
+                               align, 0.0 0.5;
+                               fixed, 1 0;
+                               visible, 0;
+                       }
+                       description {
+                               state, "show" 0.0;
+                               inherit, "default" 0.0;
+                               min, 0 0;
+                       }
+               }
+
+               part {
                        name, "bg.dark";
                        type, RECT;
                        scale, 1;
@@ -34,11 +53,19 @@ group {
                        description {
                                state, "default" 0.0;
                                color, 255 255 255 255;
-                               rel1.relative, 1.0 0.0;
+                               rel1 {
+                                       to, "reference";
+                                       relative, 1.0 0.0;
+                               }
+                               rel2.to, "reference";
                                min, 500 0;
                                align, 1.0 0.5;
                                fixed, 1 0;
                        }
+                       description {
+                               state, "show" 0.0;
+                               inherit, "default" 0.0;
+                       }
                }
 
                part {
@@ -70,6 +97,34 @@ group {
                        }
                }
        }
+
+       programs {
+               program {
+                       name, SIG_SHOW;
+                       signal, SIG_SHOW;
+                       source, SIG_SOURCE_EDC;
+                       action, STATE_SET "show" 0.0;
+                       transition, TRANSITION_MENU_SHOW;
+                       target, "reference";
+                       target, "bg";
+               }
+
+               program {
+                       name, SIG_HIDE;
+                       signal, SIG_HIDE;
+                       source, SIG_SOURCE_EDC;
+                       action, STATE_SET "default" 0.0;
+                       transition, TRANSITION_MENU_HIDE;
+                       target, "reference";
+                       target, "bg";
+                       after, SIG_HIDE_DONE;
+               }
+
+               program {
+                       name, SIG_HIDE_DONE;
+                       action, SIGNAL_EMIT SIG_HIDE_DONE SIG_SOURCE_EDC;
+               }
+       }
 }
 
 group {
@@ -270,6 +325,7 @@ group {
                                        relative, 0.0 0.0;
                                }
                                visible, 0;
+                               fixed, 1 1;
                        }
                        description {
                                state, "visible" 0.0;
@@ -312,9 +368,7 @@ group {
                        target, "part.no.content.bg";
                        target, "part.no.content.text";
                }
-       }
 
-       programs {
                program {
                        name, SIG_CONTENT;
                        signal, SIG_CONTENT;
index 5233d7d..009b354 100644 (file)
@@ -258,13 +258,12 @@ void free_app_list(Eina_List *list)
        }
 }
 
-Eina_List *get_app_favorite_list(void)
+Eina_List *get_app_favorite_list(Eina_List *list)
 {
-       Eina_List *list = NULL, *l = NULL, *fav_list = NULL;
+       Eina_List *l, *fav_list = NULL;
        struct app_data *adata;
        bool isfavorite;
 
-       list = get_app_list();
        if (!list)
                return NULL;
 
index 792852b..0a47f80 100644 (file)
@@ -81,14 +81,14 @@ static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
                elm_object_focus_set(obj, EINA_TRUE);
 }
 
-static void _livetv_selected(void)
+static void _livetv_selected(struct _priv *priv)
 {
        if (!utils_launch_app(APP_ID_LIVETV)) {
                _ERR("Launch live tv failed.");
                return;
        }
 
-       viewmgr_hide_view(VIEW_ACTION_MENU);
+       elm_object_signal_emit(priv->base, SIG_HIDE, SIG_SOURCE_EDC);
 }
 
 static void _favorite_selected(struct _priv *priv)
@@ -114,7 +114,7 @@ static void _favorite_selected(struct _priv *priv)
                viewmgr_update_view(VIEW_BASE, UPDATE_SHOW_TOAST,
                                STR_ADD_FAVORITE);
 
-       viewmgr_hide_view(VIEW_ACTION_MENU);
+       elm_object_signal_emit(priv->base, SIG_HIDE, SIG_SOURCE_EDC);
 }
 
 static void _uninstall_selected(struct _priv *priv)
@@ -133,7 +133,7 @@ static void _uninstall_selected(struct _priv *priv)
                set_app_favorite(adata, false);
 
        viewmgr_update_view(VIEW_BASE, UPDATE_GRID, adata);
-       viewmgr_hide_view(VIEW_ACTION_MENU);
+       elm_object_signal_emit(priv->base, SIG_HIDE, SIG_SOURCE_EDC);
 }
 
 static void _popup_clicked_cb(int id, void *data, Evas_Object *obj)
@@ -224,7 +224,7 @@ static void _clicked_cb(int id, void *data, Evas_Object *obj)
 
        switch (id) {
        case BTN_LIVETV:
-               _livetv_selected();
+               _livetv_selected(priv);
                break;
 
        case BTN_FAVORITE:
@@ -243,14 +243,17 @@ static void _clicked_cb(int id, void *data, Evas_Object *obj)
 static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev)
 {
-       if (!ev) {
+       struct _priv *priv;
+
+       if (!data || !ev) {
                _ERR("Invalid argument.");
                return;
        }
+       priv = data;
 
        if (!strcmp(ev->keyname, KEY_BACK)
                        || !strcmp(ev->keyname, KEY_BACK_REMOTE))
-               viewmgr_hide_view(VIEW_ACTION_MENU);
+               elm_object_signal_emit(priv->base, SIG_HIDE, SIG_SOURCE_EDC);
 }
 
 static void _grid_mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
@@ -313,19 +316,6 @@ static void _grid_unrealized_cb(int id, void *data, Evas_Object *obj,
                        SIG_SOURCE_EDC, _grid_item_selected_cb);
 }
 
-static void _grid_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       if (!ev) {
-               _ERR("Invalid argument.");
-               return;
-       }
-
-       if (!strcmp(ev->keyname, KEY_BACK)
-                       || !strcmp(ev->keyname, KEY_BACK_REMOTE))
-               viewmgr_hide_view(VIEW_ACTION_MENU);
-}
-
 static input_handler _btn_input_handler = {
        .mouse_move = _mouse_move_cb,
        .clicked = _clicked_cb,
@@ -336,7 +326,7 @@ static input_handler _grid_input_handler = {
        .mouse_move = _grid_mouse_move_cb,
        .realized = _grid_realized_cb,
        .unrealized = _grid_unrealized_cb,
-       .key_down = _grid_key_down_cb
+       .key_down = _key_down_cb
 };
 
 static bool _draw_livetv_area(struct _priv *priv)
@@ -450,8 +440,7 @@ static void _set_focus_policy(struct _priv *priv)
 
 static int _get_favorite_grid_height(int cnt)
 {
-       int height;
-       int col;
+       int height, col;
 
        if (cnt % SIZE_FAVORITE_COL_MAX == 0)
                col = cnt / SIZE_FAVORITE_COL_MAX;
@@ -467,7 +456,6 @@ static bool _draw_favorite_area(struct _priv *priv)
 {
        int cnt;
 
-       priv->fav_list = get_app_favorite_list();
        if (!priv->fav_list) {
                elm_object_signal_emit(priv->menu_area,
                                SIG_NO_CONTENT, SRC_FAVORITE_AREA);
@@ -526,6 +514,12 @@ static Evas_Object *_add_grid(struct _priv *priv)
        return grid;
 }
 
+static void _hide_done_cb(void *data, Evas_Object *obj,
+               const char *emission, const char *source)
+{
+       viewmgr_hide_view(VIEW_ACTION_MENU);
+}
+
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv;
@@ -588,6 +582,9 @@ static Evas_Object *_create(Evas_Object *win, void *data)
                goto end;
        }
 
+       elm_object_signal_callback_add(base, SIG_HIDE_DONE, SIG_SOURCE_EDC,
+                       _hide_done_cb, NULL);
+
        return base;
 
 end:
@@ -619,6 +616,7 @@ static void _show(void *data)
 
        _draw_action_menu(priv);
 
+       elm_object_signal_emit(priv->base, SIG_SHOW, SIG_SOURCE_EDC);
        elm_object_focus_set(priv->live_btn, EINA_TRUE);
 }
 
@@ -651,6 +649,8 @@ static void _update(void *view_data, int update_type, void *data)
                        return;
 
                priv->adata = data;
+       } else if (update_type == UPDATE_FAVORITE) {
+               priv->fav_list = data;
        }
 }
 
@@ -670,6 +670,9 @@ static void _destroy(void *data)
        if (priv->base)
                evas_object_del(priv->base);
 
+       if (priv->fav_list)
+               free_app_list(priv->fav_list);
+
        free(priv);
 }
 
index 652ee00..b783014 100644 (file)
@@ -453,6 +453,7 @@ static void _grid_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
 {
        struct _priv *priv;
        struct app_data *adata;
+       Eina_List *list;
 
        if (!data || !ev) {
                _ERR("Invalid argument.");
@@ -470,6 +471,10 @@ static void _grid_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
                        return;
 
                viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_ID, adata);
+
+               list = get_app_favorite_list(priv->app_list);
+               viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_FAVORITE, list);
+
                viewmgr_show_view(VIEW_ACTION_MENU);
        }
 }