[UI] Update of the focus chains used in the clock view. 53/126453/2
authorMichal Skorupinski <m.skorupinsk@samsung.com>
Thu, 20 Apr 2017 11:41:30 +0000 (13:41 +0200)
committerMichal Skorupinski <m.skorupinsk@samsung.com>
Mon, 24 Apr 2017 10:57:32 +0000 (12:57 +0200)
Change-Id: I9e29ae3fbc09f1f6c0b0242d21771015404c0150
Signed-off-by: Michal Skorupinski <m.skorupinsk@samsung.com>
res/widget/datetime.edc
res/widget/spinner.edc
src/common/utils.c
src/view/common/view_datetime.c
src/view/system/view_clock.c

index 07b7e75..7938c28 100644 (file)
@@ -1,7 +1,7 @@
 #define SEPARATOR_WIDTH 50
 
 
-group { name: "elm/datetime/base/"STYLE_DATETIME;
+group { name: "elm/datetime/base/"STYLE_DATETIME".date";
        parts {
                part { name: "base_bg";
                type: RECT;
@@ -81,7 +81,42 @@ group { name: "elm/datetime/base/"STYLE_DATETIME;
                                }
                        }
                }
-               part { name: "field3";
+               part {
+                       name: "event_area";
+                       type: RECT;
+                       description { state: "default" 0.0;
+                               color: 0 0 0 0;
+                               visible: 0;
+                       }
+                       description { state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+               part { name: "access";
+                       type: RECT;
+                       repeat_events: 1;
+                       description { state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1.to: "base_bg";
+                               rel2.to: "base_bg";
+                               color: 0 0 0 0;
+                       }
+               }
+       }
+}
+
+group { name: "elm/datetime/base/"STYLE_DATETIME".time";
+       parts {
+               part { name: "base_bg";
+               type: RECT;
+               scale: 1;
+                       description { state: "default" 0.0;
+                               color: 0 0 0 255;
+                       }
+               }
+
+               part { name: "field0";
                        type: SWALLOW;
                        scale: 1;
                        description { state: "default" 0.0;
@@ -91,7 +126,7 @@ group { name: "elm/datetime/base/"STYLE_DATETIME;
                                visible: 0;
                        }
                }
-               part { name: "field4";
+               part { name: "field1";
                        type: SWALLOW;
                        scale: 1;
                        description { state: "default" 0.0;
@@ -101,7 +136,7 @@ group { name: "elm/datetime/base/"STYLE_DATETIME;
                                visible: 0;
                        }
                }
-               part { name: "field5";
+               part { name: "field2";
                        type: SWALLOW;
                        scale: 1;
                        description { state: "default" 0.0;
@@ -111,6 +146,75 @@ group { name: "elm/datetime/base/"STYLE_DATETIME;
                                visible: 0;
                        }
                }
+
+               part { name: "field3";
+                       type: SWALLOW;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               rel1.relative: 0.0 0.0;
+                               rel2.relative: 0.0 1.0;
+                               rel2.to: "separator4";
+                               align: 0.0 0.5;
+                       }
+               }
+               part { 
+                       name: "separator4";
+                       type: TEXT;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               rel1.relative: 0.33333 0.0;
+                               rel2.relative: 0.33333 1.0;
+                               text {
+                                       size: 104;
+                                       text: ":";
+                                       min: 1 0;
+                                       max: 1 0;
+                                       ellipsis: -1;
+                               }
+                               color: 255 255 255 255;
+                       }
+               }
+               part { name: "field4";
+                       type: SWALLOW;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                                       to: "separator4";
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                                       to: "separator5";
+                               }
+                       }
+               }
+               part { 
+                       name: "separator5";
+                       type: TEXT;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               rel1.relative: 0.6667 0.0;
+                               rel2.relative: 0.6667 1.0;
+                               text {
+                                       size: 104;
+                                       text: ":";
+                                       min: 1 0;
+                                       max: 1 0;
+                                       ellipsis: -1;
+                               }
+                               color: 255 255 255 255;
+                       }
+               }
+
+               part { name: "field5";
+                       type: SWALLOW;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               rel1.relative: 1.0 0.0;
+                               rel1.to: "separator5";
+                               rel2.relative: 1.0 1.0;
+                       }
+               }
                part {
                        name: "event_area";
                        type: RECT;
index cef424e..4c140a3 100644 (file)
@@ -29,7 +29,6 @@ group { name: "elm/button/base/spinner/increase/"STYLE_DATETIME;
                                rel2.to: "arrow.image.bg";
                        }
                }
-               //Effect Shape Part
                part { name: "tizen_vg_shape";
                        type: SWALLOW;
                        clip_to: "tizen_vg_shape_clipper";
@@ -705,139 +704,3 @@ group { name: "elm/spinner/base/"STYLE_DATETIME;
                }
        }
 }
-
-//group { name: "elm/spinner/base/"STYLE_DATETIME;
-//     parts {
-//             part { name: "bg";
-//                     type: RECT;
-//                     scale: 1;
-//                     description { state: "default" 0.0;
-//                             min: 146 348;
-//                             color: 250 250 250 255;
-//                     }
-//             }
-//             part { name: "access";
-//                     type: RECT;
-//                     repeat_events: 1;
-//                     description { state: "default" 0.0;
-//                             fixed: 1 1;
-//                             color: 0 0 0 0;
-//                             rel1.to: "bg";
-//                             rel2.to: "bg";
-//                             visible: 1;
-//                     }
-//                     description { state: "active" 0.0;
-//                             inherit: "default" 0.0;
-//                             visible: 0;
-//                     }
-//             }
-//             part { name: "elm.swallow.inc_button";
-//                     type: SWALLOW;
-//                     scale: 1;
-//                     description { state: "default" 0.0;
-//                             align: 0.5 0.0;
-//                             min: 146 80;
-//                             max: 146 80;
-//                     }
-//             }
-//             part { name: "elm.swallow.dec_button";
-//                     type: SWALLOW;
-//                     scale: 1;
-//                     description { state: "default" 0.0;
-//                             align: 0.5 1.0;
-//                             min: 146 80;
-//                             max: 146 80;
-//                     }
-//             }
-//             part { name: "elm.swallow.text_button";
-//                     type: SWALLOW;
-//                     scale: 1;
-//                     description { state: "default" 0.0;
-//                             visible: 1;
-//                             min: 0 146;
-//                             max: -1 146;
-//                     }
-//                     description { state: "inactive" 0.0;
-//                             inherit: "default" 0.0;
-//                             visible: 0;
-//                     }
-//             }
-//             part { name: "elm.swallow.entry";
-//                     type: SWALLOW;
-//                     description { state: "default" 0.0;
-//                             visible: 0;
-//                             rel1.to: "elm.swallow.text_button";
-//                             rel2.to: "elm.swallow.text_button";
-//                             min: 0 146;
-//                             max: -1 146;
-//                             fixed: 1 1;
-//                     }
-//                     description { state: "active" 0.0;
-//                             inherit: "default" 0.0;
-//                             visible: 1;
-//                     }
-//             }
-//             part { name: "disabler";
-//                     type: RECT;
-//                     description { state: "default" 0.0;
-//                             color: 0 0 0 0;
-//                             visible: 0;
-//                     }
-//                     description { state: "disabled" 0.0;
-//                             inherit: "default" 0.0;
-//                             visible: 1;
-//                     }
-//             }
-//     }
-//     programs {
-//             program { name: "entry_active";
-//                     signal: "elm,state,entry,active";
-//                     source: "elm";
-//                     action: STATE_SET "active" 0.0;
-//                     target: "elm.swallow.entry";
-//             }
-//             program { name: "entry_inactive";
-//                     signal: "elm,state,entry,inactive";
-//                     source: "elm";
-//                     action: STATE_SET "default" 0.0;
-//                     target: "elm.swallow.entry";
-//             }
-//             program { name: "text_button_active";
-//                     signal: "elm,state,button,active";
-//                     source: "elm";
-//                     action: STATE_SET "default" 0.0;
-//                     target: "elm.swallow.text_button";
-//             }
-//             program { name: "text_button_inactive";
-//                     signal: "elm,state,button,inactive";
-//                     source: "elm";
-//                     action: STATE_SET "inactive" 0.0;
-//                     target: "elm.swallow.text_button";
-//             }
-//             program { name: "access_activate";
-//                     signal: "elm,state,access,active";
-//                     source: "elm";
-//                     action:  STATE_SET "default" 0.0;
-//                     target: "access";
-//             }
-//             program { name: "access_inactivate";
-//                     signal: "elm,state,access,inactive";
-//                     source: "elm";
-//                     action:  STATE_SET "active" 0.0;
-//                     target: "access";
-//             }
-//             program { name: "disable";
-//                     signal: "elm,state,disabled";
-//                     source: "elm";
-//                     action: STATE_SET "disabled" 0.0;
-//                     target: "disabler";
-//             }
-//             program { name: "enable";
-//                     signal: "elm,state,enabled";
-//                     source: "elm";
-//                     action: STATE_SET "default" 0.0;
-//                     target: "disabler";
-//             }
-//     }
-//}
-
index 6045cc5..9acdbc1 100755 (executable)
@@ -538,6 +538,9 @@ void utils_set_obj_focus(Evas_Object *obj, Evas_Object *left, Evas_Object *right
 
 static void _set_obj_focus_dir(Evas_Object *obj, Evas_Object *neighbour, Elm_Focus_Direction dir, bool allow_reverse, Elm_Focus_Direction reverse)
 {
+       if (!obj || !neighbour)
+               return;
+
        elm_object_focus_next_object_set(obj, neighbour, dir);
 
        if (allow_reverse)
index e1074b7..537c744 100644 (file)
@@ -31,24 +31,24 @@ static void _datetime_btn_clicked_cb(int id, void *data, Evas_Object *obj);
 static void _datetime_btn_unfocused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item);
 static void _datetime_btn_focused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item);
 static void _set_spinner_style(Evas_Object *datetime);
-static void _dbg_datetime(Evas_Object *datetime);
+static void _DBG_datetime(Evas_Object *datetime);
 static void _set_spinner_btn_callbacks(Evas_Object *dt, int start_field, int end_field);
 static void _set_datetime_focus_chain(Evas_Object *datetime, int start_field, int end_field);
-static void _dbg_focus_chain(Evas_Object *datetime, int start_field, int end_field);
+static void _DBG_focus_chain(Evas_Object *datetime, int start_field, int end_field);
+static void _datetime_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+static void  _datetime_btn_keydown_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
 
 static input_handler datetime_btn_handler = {
        .clicked = _datetime_btn_clicked_cb,
+       .key_down = _datetime_btn_keydown_cb,
        .unfocused = _datetime_btn_unfocused_cb,
        .focused = _datetime_btn_focused_cb,
 };
 
-void TEST_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-       SETTING_TRACE_BEGIN;
+static input_handler datetime_handler = {
+       .key_down = _datetime_key_down_cb,
+};
 
-       _dbg_datetime(obj);
-       SETTING_TRACE_END;
-}
 
 Evas_Object *view_datetime_create(Evas_Object *parent, const char *part, bool is_date)
 {
@@ -66,16 +66,17 @@ Evas_Object *view_datetime_create(Evas_Object *parent, const char *part, bool is
                return NULL;
        }
 
-       elm_object_style_set(datetime, STYLE_DATETIME);
+       elm_object_style_set(datetime, STYLE_DATETIME".date");
+       elm_datetime_format_set(datetime, "%d/%b/%Y");
+       evas_object_repeat_events_set(datetime, EINA_FALSE);
 
        _set_spinner_style(datetime);
-       _dbg_datetime(datetime);
+       _DBG_datetime(datetime);
        _set_spinner_btn_callbacks(datetime, 0, 2);
        _set_datetime_focus_chain(datetime, 0, 2);
-       _dbg_focus_chain(datetime, 0, 2);
+       _DBG_focus_chain(datetime, 0, 2);
 
-       elm_datetime_format_set(datetime, "%d/%b/%Y");
-       evas_object_event_callback_add(datetime, EVAS_CALLBACK_SHOW, TEST_show_cb, NULL);
+       inputmgr_add_callback(datetime, 1, &datetime_handler, NULL);
 
        return datetime;
 }
@@ -93,20 +94,20 @@ static void _set_spinner_button_height(Evas_Object *spinner, char *part_name, in
        evas_object_size_hint_max_set(part, -1, height);
 }
 
-static void _dbg_datetime(Evas_Object *datetime)
+static void _DBG_datetime(Evas_Object *datetime)
 {
        const char *datetime_style = elm_object_style_get(datetime);
        dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] DATE_TIME: STYLE: %s", __FILE__, __LINE__, datetime_style);
 
        int i;
-       for (i = 0; i < 10; ++i) {
+       for (i = 0; i < 5; ++i) {
                char buf[255];
                snprintf(buf, 255, "field%d", i);
 
                Evas_Object *spinner = elm_object_part_content_get(datetime, buf);
                if (!spinner) {
                        dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] part(%s) == NULL", __FILE__, __LINE__, buf);
-                       return;
+                       continue;
                }
 
                const char *spinner_style = elm_object_style_get(spinner);
@@ -117,12 +118,27 @@ static void _dbg_datetime(Evas_Object *datetime)
                btn = elm_object_part_content_get(spinner, "elm.swallow.text_button");
                const char *btn_style =   elm_object_style_get(btn);
 
-               dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] {Part(%s) STYLE: %s} INC: %s DEC: %s BTN: %s",
+               dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] {Part(%s) TYPE:(%s) STYLE: %s} INC: %s DEC: %s BTN: %s",
                                __FILE__, __LINE__,
                                buf,
+                               evas_object_type_get(spinner),
                                spinner_style,
                                inc_style, dec_style, btn_style);
        }
+
+
+       Evas_Object *box = elm_object_part_content_get(datetime, "field5");
+       Eina_List *children = elm_box_children_get(box);
+       Eina_List *l;
+       Evas_Object *item;
+       i = 0;
+
+       EINA_LIST_FOREACH(children, l, item) {
+               dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] {Part(%s->%d) TYPE:(%s)",
+                               __FILE__, __LINE__,
+                               "field5", i, evas_object_type_get(item));
+               ++i;
+       }
 }
 
 static void _set_spinner_style(Evas_Object *datetime)
@@ -146,7 +162,9 @@ static void _set_spinner_style(Evas_Object *datetime)
                _set_spinner_button_height(spinner, NULL, 100);
                _set_spinner_button_height(spinner, "elm.swallow.inc_button", 20);
                _set_spinner_button_height(spinner, "elm.swallow.dec_button", 20);
-               _set_spinner_button_height(spinner,"elm.swallow.text_button", 60);
+               _set_spinner_button_height(spinner, "elm.swallow.text_button", 60);
+
+               evas_object_propagate_events_set(spinner, EINA_FALSE);
        }
 }
 
@@ -177,10 +195,12 @@ static void _set_datetime_focus_chain(Evas_Object *datetime, int start_field, in
 
        btn = view_datetime_get_spinner_button(datetime, start_field);
        utils_set_obj_focus(btn, btn, NULL, btn, btn, NULL, btn);
+       elm_object_focus_next_object_set(datetime, btn, ELM_FOCUS_NEXT);
+
        prev = btn;
 
        int i;
-       for (i = start_field; i < end_field; ++i) {
+       for (i = start_field + 1; i < end_field; ++i) {
 
                btn = view_datetime_get_spinner_button(datetime, i);
                if (!btn) {
@@ -189,7 +209,6 @@ static void _set_datetime_focus_chain(Evas_Object *datetime, int start_field, in
                }
 
                dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] (%d) BUTTON: %s", __FILE__, __LINE__, i, elm_object_text_get(btn));
-
                utils_set_obj_focus(btn, prev, NULL, btn, btn, NULL, prev);
                prev = btn;
        }
@@ -198,37 +217,77 @@ static void _set_datetime_focus_chain(Evas_Object *datetime, int start_field, in
        utils_set_obj_focus(btn, prev, btn, btn, btn, btn, prev);
 }
 
-static void _dbg_focus_chain(Evas_Object *datetime, int start_field, int end_field)
+static void _DBG_focus_chain(Evas_Object *datetime, int start_field, int end_field)
 {
        int i = 0;
        Evas_Object *item;
 
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] -------------- <FOCUS CHAIN> --------------", __FILE__, __LINE__);
+       utils_dbg_obj_focus(datetime, -1);
+
        for (i = start_field; i <= end_field; ++i) {
                item = view_datetime_get_spinner_button(datetime, i);
                utils_dbg_obj_focus(item, i);
        }
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] -------------- </FOCUS CHAIN> --------------", __FILE__, __LINE__);
 }
 
-static void _datetime_btn_clicked_cb(int id, void *data, Evas_Object *obj)
+static void _datetime_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
 {
-       Evas_Object *spinner = (Evas_Object *)data;
-       elm_object_signal_emit(spinner, "inc_dec,show", "elm");
+       dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] DATETIME CLICKED", __FILE__, __LINE__);
 
-       if (!date_settting_on) {
-               date_settting_on = true;
-       } else {
-               if (elm_object_focus_next_object_get(obj, ELM_FOCUS_RIGHT) == obj)
-                       elm_object_focus_next(obj, ELM_FOCUS_DOWN);
-               else
-                       elm_object_focus_next(obj, ELM_FOCUS_RIGHT);
+       switch (ev->keycode) {
+       case KEY_ID_ENTER:
+               elm_object_focus_next(obj, ELM_FOCUS_NEXT);
+               dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] DATETIME CLICKED [ELM_FOCUS_NEXT]", __FILE__, __LINE__);
+               return;
+       case KEY_ID_BACK:
+               dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] DATETIME CLICKED [KEY_ID_BACK]", __FILE__, __LINE__);
+               break;
+       default:
+               break;
        }
+}
+
+static void _datetime_btn_clicked_cb(int id, void *data, Evas_Object *obj)
+{
+       Evas_Object *dt = (Evas_Object *)data;
+       Evas_Object *spinner = view_datetime_get_spinner(dt, id);
+       Evas_Object *btn = view_datetime_get_spinner_button(dt, id);
 
+       elm_object_signal_emit(spinner, "inc_dec,show", "elm");
        dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] CLICKED style: %s", __FILE__, __LINE__, elm_object_style_get(spinner));
+       elm_object_focus_next(btn, ELM_FOCUS_NEXT);
+}
+
+static void  _datetime_btn_keydown_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       Evas_Object *dt = (Evas_Object *)data;
+       Evas_Object *spinner = view_datetime_get_spinner(dt, id);
+       double value = elm_spinner_value_get(spinner);
+
+       switch (ev->keycode) {
+               case KEY_ID_BACK:
+                       elm_object_focus_set(obj, EINA_FALSE);
+                       evas_object_focus_set(dt, EINA_TRUE);
+                       dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] btn PRESSED [KEY_ID_BACK]", __FILE__, __LINE__);
+                       break;
+               case KEY_ID_UP:
+                       elm_spinner_value_set(spinner, value + 1);
+                       dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] btn PRESSED [KEY_ID_UP]", __FILE__, __LINE__);
+                       break;
+               case KEY_ID_DOWN:
+                       elm_spinner_value_set(spinner, value - 1);
+                       dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] btn PRESSED [KEY_ID_DOWN]", __FILE__, __LINE__);
+                       break;
+       }
 }
 
 static void _datetime_btn_unfocused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item)
 {
-       Evas_Object *spinner = (Evas_Object *)data;
+       Evas_Object *dt = (Evas_Object *)data;
+       Evas_Object *spinner = view_datetime_get_spinner(dt, id);
        elm_object_signal_emit(spinner, "inc_dec,hide", "elm");
        dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] UNFOCUSED", __FILE__, __LINE__);
 }
@@ -238,7 +297,9 @@ static void _datetime_btn_focused_cb(int id, void *data, Evas_Object *obj, Elm_O
        if (!date_settting_on)
                return;
 
-       Evas_Object *spinner = (Evas_Object *)data;
+       Evas_Object *dt = (Evas_Object *)data;
+       Evas_Object *spinner = view_datetime_get_spinner(dt, id);
+
        elm_object_signal_emit(spinner, "inc_dec,show", "elm");
        dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] FOCUSED", __FILE__, __LINE__);
 }
@@ -246,19 +307,9 @@ static void _datetime_btn_focused_cb(int id, void *data, Evas_Object *obj, Elm_O
 static void _set_spinner_btn_callbacks(Evas_Object *dt, int start_field, int end_field)
 {
        Evas_Object *btn;
-       Evas_Object *spinner = NULL;
-
        int i;
        for (i = start_field; i <= end_field; ++i) {
                        btn = view_datetime_get_spinner_button(dt, i);
-                       spinner = view_datetime_get_spinner(dt, i);
-
-                       inputmgr_add_callback(btn, i, &datetime_btn_handler, spinner);
+                       inputmgr_add_callback(btn, i, &datetime_btn_handler, dt);
        }
 }
-//
-//static void _set_callbacks(clock_view_priv_data *priv)
-//{
-//     _set_spinner_btn_callbacks(priv->date_part, 0, 2);
-//     _set_spinner_btn_callbacks(priv->time_part, 0, 2);
-//}
index ddfc392..6ded594 100755 (executable)
@@ -83,30 +83,6 @@ static void _disable_manual_settings(bool disable, const clock_view_priv_data *p
 static void _get_time_from_controls(struct tm *result, const clock_view_priv_data *priv);
 /* When auto/manual setup dropdown is active, focus should be only on it*/
 
-static void _datetime_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
-
-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)
@@ -193,11 +169,14 @@ static input_handler cancel_btn_handler = {
        .clicked = _cancel_mouse_cb
 };
 
-static input_handler date_time_handler = {
-       .key_down = _datetime_key_down_cb,
-       .focused = _dt_focused_cb,
-       .unfocused = _dt_unfocused_cb
-};
+static Eina_Bool _show_timer_cb(void *data)
+{
+       clock_view_priv_data *priv = data;
+       elm_object_focus_set(view_datetime_get_spinner_button(priv->date_part, 0), EINA_FALSE);
+       evas_object_focus_set(priv->date_part, EINA_TRUE);
+
+       return ECORE_CALLBACK_CANCEL;
+}
 
 static bool _add_clock_setting(clock_view_priv_data *priv)
 {
@@ -250,20 +229,48 @@ static bool _add_clock_setting(clock_view_priv_data *priv)
 
        priv->time_part = view_datetime_create(priv->base, PART_MAIN_ITEM_TIME, true);
 
+       Evas_Object *date_last  = view_datetime_get_spinner_button(priv->date_part, 2);
+       Evas_Object *time_first = view_datetime_get_spinner_button(priv->time_part, 0);
+       Evas_Object *time_last  = view_datetime_get_spinner_button(priv->time_part, 2);
+
        utils_set_obj_focus(priv->date_part,
                        priv->date_part, priv->date_part,
                        priv->date_part, priv->time_part,
                        priv->time_part, priv->date_part);
+
+       elm_object_focus_next_object_set(date_last, time_first, ELM_FOCUS_NEXT);
+
        utils_set_obj_focus(priv->time_part,
                        priv->time_part, priv->time_part,
                        priv->date_part, priv->check_24,
                        priv->check_24, priv->date_part);
 
+       elm_object_focus_next_object_set(time_last, priv->check_24, ELM_FOCUS_NEXT);
+
+       utils_set_obj_focus(priv->check_24,
+                       priv->check_24, priv->check_24,
+                       priv->time_part, priv->done,
+                       priv->done, priv->check_24);
+
+       utils_set_obj_focus(priv->done,
+                       priv->cancel, priv->done,
+                       priv->check_24, priv->done,
+                       priv->done, priv->done);
+
+       utils_set_obj_focus(priv->cancel,
+                       priv->cancel, priv->done,
+                       priv->check_24, priv->cancel,
+                       priv->cancel, priv->cancel);
+
+
+       utils_set_obj_focus(priv->check_24,
+                       priv->check_24, priv->check_24,
+                       priv->time_part, priv->done,
+                       priv->done, priv->check_24);
+
        inputmgr_add_callback(done, INPUT_HANDLER_TYPE_BTN_DONE, &done_btn_handler, priv);
        inputmgr_add_callback(cancel, INPUT_HANDLER_TYPE_BTN_CANCEL, &cancel_btn_handler, priv);
        inputmgr_add_callback(priv->check_24, INPUT_HANDLER_TYPE_CHECK_H12_24, &h_12_24_changed, 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);
 
        utils_dbg_obj_focus(priv->date_part, -1);
        utils_dbg_obj_focus(priv->time_part, -1);
@@ -361,7 +368,6 @@ static void _show(void *data)
                return;
        }
 
-//     date_settting_on = false;
        display_mode = priv->view_mode_on_show ? TYPE_AUTO : TYPE_MANUAL;
 
        if (!settings_clock_get_current_time(&current_time))
@@ -373,23 +379,23 @@ static void _show(void *data)
        if (!settings_clock_is_time_automatic(&automatic_time))
                _ERR("Failed to check if time is auto");
 
-//     priv->cur_type = automatic_time ? TYPE_AUTO : TYPE_MANUAL;
        _disable_manual_settings(display_mode, priv);
        elm_check_state_set(priv->check_24, h24);
 
-       if (h24) {
+//     if (h24) {
 //             elm_object_style_set(priv->time_part, "time_layout_24hr");
                elm_datetime_format_set(priv->time_part, "%d/%b/%Y %H:%M");
-       } else {
+//     } else {
 //             elm_object_style_set(priv->time_part, "time_layout");
-               elm_datetime_format_set(priv->time_part, "%d/%b/%Y %I:%M %p");
-       }
+//             elm_datetime_format_set(priv->time_part, "%d/%b/%Y %I:%M %p");
+//     }
 
        elm_datetime_value_set(priv->date_part, (Elm_Datetime_Time *)&current_time);
        elm_datetime_value_set(priv->time_part, (Elm_Datetime_Time *)&current_time);
 
-       elm_object_focus_set(priv->date_part, EINA_TRUE);
        evas_object_show(priv->base);
+       elm_object_focus_set(priv->date_part, EINA_TRUE);
+       ecore_idler_add(_show_timer_cb, priv);
 
        SETTING_TRACE_END;
 }
@@ -478,38 +484,6 @@ static void _any_item_back_key_down_cb(int id, void *data, Evas *e,
                viewmgr_pop_view();
 }
 
-static void _datetime_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
-       if (!data || !ev) {
-               _ERR("Invalid argument.");
-               return;
-       }
-
-       dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] obj: %s KEYDOWN CB: %s %u", __FILE__, __LINE__, elm_object_widget_type_get(obj), ev->keyname, ev->keycode);
-
-//     switch (ev->keycode) {
-//             case KEY_ID_BACK:
-//                     viewmgr_pop_view();
-//                     break;
-//             case KEY_ID_ENTER:
-//                     elm_object_focus_next(obj, ELM_FOCUS_NEXT);
-//                     break;
-//             case KEY_ID_UP:
-//                     elm_object_focus_next(obj, ELM_FOCUS_UP);
-//                     break;
-//             case KEY_ID_DOWN:
-//                     elm_object_focus_next(obj, ELM_FOCUS_DOWN);
-//                     break;
-//             default:
-//                     break;
-//     }
-
-       utils_dbg_obj_focus(obj, -1);
-
-//     if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC) || !strcmp(ev->keyname, KEY_ESC_WAY))
-//             viewmgr_pop_view();
-}
-
 static void _h_24_12_changed_cb(int id, void *data, Evas_Object *check_24)
 {
        Eina_Bool state = EINA_FALSE;
@@ -524,10 +498,10 @@ static void _h_24_12_changed_cb(int id, void *data, Evas_Object *check_24)
 
        if (state) {/*24h*/
 //             elm_object_style_set(priv->time_part, "time_layout_24hr");
-               elm_datetime_format_set(priv->time_part, "%d/%b/%Y %H:%M");
+//             elm_datetime_format_set(priv->time_part, "%d/%b/%Y %H:%M");
        } else {
 //             elm_object_style_set(priv->time_part, "time_layout");
-               elm_datetime_format_set(priv->time_part, "%d/%b/%Y %I:%M %p");
+//             elm_datetime_format_set(priv->time_part, "%d/%b/%Y %I:%M %p");
        }
 }