Add key event support 44/42944/2
authorjinwoo.shin <jw0227.shin@samsung.com>
Mon, 6 Jul 2015 07:33:07 +0000 (16:33 +0900)
committerjinwoo.shin <jw0227.shin@samsung.com>
Mon, 6 Jul 2015 11:03:00 +0000 (20:03 +0900)
Change-Id: Ibca35a28730f4af9b355ec167ce36b9bece24983
Signed-off-by: jinwoo.shin <jw0227.shin@samsung.com>
include/view_channelinfo.h
src/layout_channelinfo_list.c
src/layout_channelinfo_search.c
src/main.c
src/view_channelinfo.c

index f9e5068..6ced573 100644 (file)
 #ifndef __LIVETV_VIEW_CHANNELINFO_H__
 #define __LIVETV_VIEW_CHANNELINFO_H__
 
+enum _update_type {
+       UPDATE_TYPE_TIMER,
+       UPDATE_TYPE_INPUT,
+};
+
 void draw_channel_info(Evas_Object *obj, const struct tv_channel_info *channel_info);
 
 view_class *view_channelinfo_get_vclass(void);
index 61c85f1..03249a5 100644 (file)
@@ -157,6 +157,32 @@ static void _hide(void *layout_data)
 
 static void _update(void *layout_data, int update_type, void *data)
 {
+       Evas_Event_Key_Down *ev = data;
+       struct _priv *priv;
+       int r;
+
+       if (!layout_data || !ev) {
+               _ERR("failed to get layout_data and ev");
+               return;
+       }
+
+       priv = layout_data;
+
+       if (!strcmp(ev->keyname, KEY_CHANNELUP) ||
+                       !strcmp(ev->keyname, KEY_CHANNELUP_REMOTE)) {
+               r = tv_channel_next();
+               if (r < 0)
+                       _ERR("failed to tune next channel");
+
+               _update_channel_info(priv);
+       } else if (!strcmp(ev->keyname, KEY_CHANNELDOWN) ||
+                       !strcmp(ev->keyname, KEY_CHANNELDOWN_REMOTE)) {
+               r = tv_channel_prev();
+               if (r < 0)
+                       _ERR("failed to tune next channel");
+
+               _update_channel_info(priv);
+       }
 }
 
 static layout_class lclass = {
index 315f35d..ba04001 100644 (file)
@@ -74,7 +74,6 @@ static void _load_channel_list(struct _priv *priv, Eina_List *channel_list)
                        continue;
                elm_object_focus_allow_set(ly, EINA_TRUE);
                draw_channel_info(ly, channel_info);
-
                elm_box_pack_end(priv->box, ly);
 
                if (eina_list_next(l))
@@ -127,9 +126,6 @@ static bool _create(layoutmgr *lmgr, void *data)
                goto error;
        }
        elm_box_align_set(priv->box, 0.0, 0.5);
-       elm_box_padding_set(priv->box, 0, DIVIDER_HEIGHT);
-       evas_object_color_set(priv->box, DIVIDER_COLOR_R,
-                       DIVIDER_COLOR_G, DIVIDER_COLOR_B, DIVIDER_COLOR_A);
 
        priv->lmgr = lmgr;
 
index e3acd73..5b35c61 100644 (file)
@@ -36,22 +36,23 @@ struct _appdata {
 };
 
 struct key_map {
-    const char *view;
-    const char *key[KEY_MAX];
+       const char *view;
+       const char *key[KEY_MAX];
 };
 
 static struct key_map g_kmap[] = {
        {
                VIEW_CHANNELINFO,
                {
-                       KEY_ENTER, KEY_ENTER_REMOTE, KEY_CHANNELUP,
-                       KEY_CHANNELUP_REMOTE, KEY_CHANNELDOWN, KEY_CHANNELDOWN_REMOTE
+                       KEY_ENTER, KEY_ENTER_REMOTE,
+                       KEY_CHANNELUP, KEY_CHANNELUP_REMOTE,
+                       KEY_CHANNELDOWN, KEY_CHANNELDOWN_REMOTE
                }
        },
 };
 
-static void _key_up_cb(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Up *ev)
+static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Down *ev)
 {
        size_t i, j;
 
@@ -60,7 +61,8 @@ static void _key_up_cb(int id, void *data, Evas *e, Evas_Object *obj,
                while (g_kmap[i].key[j]) {
                        if (!strcmp(ev->keyname, g_kmap[i].key[j])) {
                                viewmgr_show_view(g_kmap[i].view);
-                               viewmgr_update_view(g_kmap[i].view, ev);
+                               viewmgr_update_view(g_kmap[i].view,
+                                               UPDATE_TYPE_INPUT, ev);
                                return;
                        }
                        j++;
@@ -69,7 +71,7 @@ static void _key_up_cb(int id, void *data, Evas *e, Evas_Object *obj,
 }
 
 static input_handler key_handler = {
-       .key_up = _key_up_cb,
+       .key_down = _key_down_cb,
 };
 
 static Evas_Object *_add_win(const char *name)
index cf5396c..bcd8488 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "define.h"
 #include "tv.h"
+#include "view_channelinfo.h"
 #include "layout_channelinfo.h"
 #include "layout_channelinfo_list.h"
 #include "layout_channelinfo_search.h"
@@ -30,7 +31,7 @@
 #define BUF_MAX 128
 #define STATUS_BOX_PADDING 10
 
-enum _update_type {
+enum _update_op {
        START_HIDE_TIMER,
        STOP_HIDE_TIMER
 };
@@ -38,6 +39,7 @@ enum _update_type {
 struct _priv {
        Evas_Object *base;
        Ecore_Timer *hide_timer;
+       const char *current_layout;
 
        layoutmgr *lmgr;
 };
@@ -204,7 +206,8 @@ static void _tv_program_cb(Eina_List *prog_list, void *data)
        else
                _ERR("failed to get tv_program_info");
 
-       viewmgr_update_view(VIEW_CHANNELINFO, START_HIDE_TIMER);
+       viewmgr_update_view(VIEW_CHANNELINFO,
+                       UPDATE_TYPE_TIMER, START_HIDE_TIMER);
 }
 
 void draw_channel_info(Evas_Object *obj,
@@ -224,7 +227,8 @@ void draw_channel_info(Evas_Object *obj,
        if (r < 0)
                current_service = -1;
 
-       viewmgr_update_view(VIEW_CHANNELINFO, (void *) STOP_HIDE_TIMER);
+       viewmgr_update_view(VIEW_CHANNELINFO,
+                       UPDATE_TYPE_TIMER, (void *)STOP_HIDE_TIMER);
 
        _load_channel_text(obj, channel_info);
        _pack_icon_box(obj, channel_info);
@@ -241,7 +245,29 @@ void draw_channel_info(Evas_Object *obj,
 
        if (r < 0)
                viewmgr_update_view(VIEW_CHANNELINFO,
-                               (void *) START_HIDE_TIMER);
+                               UPDATE_TYPE_TIMER, START_HIDE_TIMER);
+}
+
+static void _hide_current_layout(struct _priv *priv)
+{
+       if (!priv->current_layout)
+               return;
+
+       layoutmgr_hide_layout(priv->lmgr, priv->current_layout);
+       priv->current_layout = NULL;
+}
+
+static void _set_current_layout(struct _priv *priv, const char *layout_id)
+{
+       if (priv->current_layout && layout_id &&
+                       !strcmp(priv->current_layout, layout_id))
+               return;
+
+       if (priv->current_layout)
+               layoutmgr_hide_layout(priv->lmgr, priv->current_layout);
+
+       layoutmgr_show_layout(priv->lmgr, layout_id);
+       priv->current_layout = layout_id;
 }
 
 static Evas_Object *_create(Evas_Object *win, void *data)
@@ -294,8 +320,6 @@ static void _show(void *view_data)
 
        priv = view_data;
 
-       layoutmgr_show_layout(priv->lmgr, LAYOUT_CHANNELINFO);
-
        evas_object_show(priv->base);
 }
 
@@ -310,6 +334,8 @@ static void _hide(void *view_data)
 
        priv = view_data;
 
+       _hide_current_layout(priv);
+
        evas_object_hide(priv->base);
 }
 
@@ -334,9 +360,10 @@ static void _destroy(void *view_data)
        free(priv);
 }
 
-static void _update(void *view_data, void *data)
+static void _update(void *view_data, int type, void *data)
 {
        struct _priv *priv;
+       Evas_Event_Key_Down *ev;
 
        if (!view_data) {
                _ERR("failed to get view data");
@@ -345,13 +372,37 @@ static void _update(void *view_data, void *data)
 
        priv = view_data;
 
-       switch ((int) data) {
-       case START_HIDE_TIMER:
-               _start_hide_timer(priv);
-               break;
-       case STOP_HIDE_TIMER:
-               _stop_hide_timer(priv);
-               break;
+       if (type == UPDATE_TYPE_TIMER) {
+               switch ((int) data) {
+               case START_HIDE_TIMER:
+                       _start_hide_timer(priv);
+                       break;
+               case STOP_HIDE_TIMER:
+                       _stop_hide_timer(priv);
+                       break;
+               }
+       } else if (type == UPDATE_TYPE_INPUT) {
+               ev = data;
+               if (!ev) {
+                       _ERR("failed to get ev");
+                       return;
+               }
+
+               if (!strcmp(ev->keyname, KEY_ENTER) ||
+                               !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+                       if (!priv->current_layout)
+                               _set_current_layout(priv, LAYOUT_CHANNELINFO);
+                       else
+                               _set_current_layout(priv,
+                                               LAYOUT_CHANNELINFO_SEARCH);
+               } else if (!strcmp(ev->keyname, KEY_CHANNELUP) ||
+                               !strcmp(ev->keyname, KEY_CHANNELUP_REMOTE) ||
+                               !strcmp(ev->keyname, KEY_CHANNELDOWN) ||
+                               !strcmp(ev->keyname, KEY_CHANNELDOWN_REMOTE)) {
+                       _set_current_layout(priv, LAYOUT_CHANNELINFO_LIST);
+                       layoutmgr_update_layout(priv->lmgr,
+                                       LAYOUT_CHANNELINFO_LIST, 0, ev);
+               }
        }
 }