Fix problem sw keyboard cover time widgets in clock 25/91925/1 accepted/tizen/tv/20161012.113826 submit/tizen/20161012.074203
authorkiso.chang <kiso.chang@samsung.com>
Wed, 12 Oct 2016 07:34:16 +0000 (16:34 +0900)
committerkiso.chang <kiso.chang@samsung.com>
Wed, 12 Oct 2016 07:36:20 +0000 (16:36 +0900)
Change-Id: I6456933afdd5d623fc66091c61016c1ec1bef26b
Signed-off-by: kiso.chang <kiso.chang@samsung.com>
src/view/system/view_clock.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 6a58cb6..5812d18
 #include "data/system/settings_clock.h"
 #include "app_string.h"
 
+
+#define DEFAULT_KEYPAD_POS             636
+#define PADDING_VKEYBOARD              30
+
+
+
 enum setup_type {
        TYPE_MANUAL = 0,
        TYPE_AUTO,
@@ -46,6 +52,7 @@ static const char *str_setup_type_opt[] = {
 typedef struct {
        Evas_Object *win;
        Evas_Object *base;
+       Evas_Object *conformant;
        Evas_Object *done;
        Evas_Object *cancel;
        Evas_Object *auto_manual_setup_btn;
@@ -55,6 +62,11 @@ typedef struct {
        Evas_Object *check_24;
        Evas_Object *time_part;
        enum setup_type cur_type;
+
+       /* store input panel state */
+       bool input_panel_show;
+       Evas_Object *focused_entry;
+
 } clock_view_priv_data;
 
 enum input_handler_type {
@@ -93,6 +105,104 @@ static void _get_time_from_controls(struct tm *result, const clock_view_priv_dat
 /* When auto/manual setup dropdown is active, focus should be only on it*/
 static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item);
 
+
+
+static void _dt_focused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item)
+{
+       SETTING_TRACE_BEGIN
+       clock_view_priv_data *priv = data;
+       if (!priv)
+               return;
+
+       priv->focused_entry = obj;
+       /* To prevent hiding virtual keyboard
+        * when user input ip address in sequence */
+       priv->input_panel_show = true;
+}
+
+static void _dt_unfocused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item)
+{
+       SETTING_TRACE_BEGIN
+       clock_view_priv_data *priv = data;
+       if (!priv)
+               return;
+}
+
+
+static bool display_status = false;
+
+static void _keypad_down_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN
+       clock_view_priv_data *priv = data;
+       Evas_Coord x, y, w, h;
+       Evas_Coord entry_y, entry_h;
+
+       if (!priv) {
+               _ERR("invalid data");
+               return;
+       }
+
+       if (priv->input_panel_show && display_status) {
+               evas_object_geometry_get(priv->base, &x, &y, &w, &h);
+               evas_object_move(priv->base, x, 0);
+
+               display_status = false;
+       } else if (priv->input_panel_show == false && display_status) {
+               evas_object_geometry_get(priv->base, &x, &y, &w, &h);
+               evas_object_move(priv->base, x, 0);
+
+               display_status = false;
+       }
+       display_status = false;
+}
+
+static void _keypad_up_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN
+       clock_view_priv_data *priv = data;
+       Evas_Coord x, y, w, h;
+       Evas_Coord entry_y, entry_h;
+
+       if (!priv) {
+               _ERR("invalid data");
+               return;
+       }
+
+       if (priv->input_panel_show && display_status == false) {
+               evas_object_geometry_get(priv->focused_entry, &x, &entry_y, &w, &entry_h);
+               evas_object_geometry_get(priv->base, &x, &y, &w, &h);
+
+               if (entry_y + entry_h >= (DEFAULT_KEYPAD_POS)) {
+                       Evas_Coord moved_height;
+                       moved_height = (DEFAULT_KEYPAD_POS - PADDING_VKEYBOARD)
+                                                       - (entry_y + entry_h);
+                       evas_object_move(priv->base, x, moved_height);
+               } else {
+                       evas_object_move(priv->base, x, 0);
+               }
+       } else if (priv->input_panel_show && display_status) {
+               evas_object_geometry_get(priv->focused_entry, &x, &entry_y, &w, &entry_h);
+               evas_object_geometry_get(priv->base, &x, &y, &w, &h);
+
+               /* If virtual keyboard is already displayed,
+                * entry height need to be compensated. */
+               if (entry_y - y + entry_h >= (DEFAULT_KEYPAD_POS)) {
+                       Evas_Coord moved_height;
+                       moved_height = (DEFAULT_KEYPAD_POS - PADDING_VKEYBOARD)
+                                                       - (entry_y - y + entry_h);
+                       evas_object_move(priv->base, x, moved_height);
+               } else {
+                       evas_object_move(priv->base, x, 0);
+               }
+       }
+
+       display_status = true;
+
+}
+
+
+
 static input_handler _auto_manual_setup_input_handler = {
        .mouse_move = _auto_manual_mouse_move_cb,
        .key_down = _auto_manual_setup_key_down_cb,
@@ -120,7 +230,9 @@ static input_handler cancel_btn_handler = {
 };
 
 static input_handler date_time_handler = {
-       .key_down = _any_item_back_key_down_cb
+       .key_down = _any_item_back_key_down_cb,
+       .focused = _dt_focused_cb,
+       .unfocused = _dt_unfocused_cb
 };
 
 static void _destroy_setup_type_popup(clock_view_priv_data *priv)
@@ -188,6 +300,8 @@ static void _draw_setup_type_popup(clock_view_priv_data *priv)
 
 static bool _add_clock_setting(clock_view_priv_data *priv)
 {
+       SETTING_TRACE_BEGIN
+               
        Evas_Object *done = NULL;
        Evas_Object *cancel = NULL;
 
@@ -243,6 +357,7 @@ static bool _add_clock_setting(clock_view_priv_data *priv)
        inputmgr_add_callback(priv->date_part, INPUT_HANDLER_TYPE_DATE_TIME, &date_time_handler, priv);
        inputmgr_add_callback(priv->time_part, INPUT_HANDLER_TYPE_DATE_TIME, &date_time_handler, priv);
 
+
        return true;
 }
 
@@ -250,6 +365,7 @@ static Evas_Object *_create(Evas_Object *win, void *data)
 {
        SETTING_TRACE_BEGIN;
        clock_view_priv_data *priv = NULL;
+       Evas_Object *conformant = NULL;
        Evas_Object *base = NULL;
 
        if (!win) {
@@ -257,6 +373,16 @@ static Evas_Object *_create(Evas_Object *win, void *data)
                return NULL;
        }
 
+       elm_win_conformant_set(win, EINA_TRUE);
+       conformant = elm_conformant_add(win);
+       if (!conformant) {
+               _ERR("Adding conformant failed.");
+               return NULL;
+       }
+/*
+       evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(win, conformant);
+*/
        priv = (clock_view_priv_data *)calloc(1, sizeof(clock_view_priv_data));
        if (!priv) {
                _ERR("Calloc failed.");
@@ -272,6 +398,15 @@ static Evas_Object *_create(Evas_Object *win, void *data)
 
        priv->win = win;
        priv->base = base;
+       priv->conformant = conformant;
+               
+/*
+       elm_object_content_set(conformant, priv->base);
+       evas_object_show(conformant);
+*/
+       evas_object_smart_callback_add(priv->conformant, "virtualkeypad,state,on", _keypad_up_cb, priv);
+       evas_object_smart_callback_add(priv->conformant, "virtualkeypad,state,off", _keypad_down_cb, priv);
+       
 
        if (!_add_clock_setting(priv)) {
                _ERR("failed to add clock setting layout");
@@ -280,6 +415,8 @@ static Evas_Object *_create(Evas_Object *win, void *data)
                return NULL;
        }
 
+       
+
        if (!viewmgr_set_view_data(VIEW_CLOCK, priv)) {
                _ERR("Set view data failed.");
                evas_object_del(base);
@@ -359,8 +496,13 @@ static void _destroy(void *data)
                _ERR("Get data failed.");
                return;
        }
-
        priv = (clock_view_priv_data *)data;
+
+
+       evas_object_smart_callback_del(priv->conformant, "virtualkeypad,state,on", _keypad_up_cb);
+       evas_object_smart_callback_del(priv->conformant, "virtualkeypad,state,off", _keypad_down_cb);
+
+
        evas_object_del(priv->base);
        free(priv);
 }
@@ -565,3 +707,7 @@ static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item
        if (priv && priv->setup_type_popup)
                elm_object_focus_set(priv->setup_type_popup, EINA_TRUE);
 }
+
+
+
+