Fix to save device name in profile view
authorTaejin Woo <tt.woo@samsung.com>
Tue, 2 Jul 2013 11:47:44 +0000 (20:47 +0900)
committerTaejin Woo <tt.woo@samsung.com>
Tue, 2 Jul 2013 11:47:44 +0000 (20:47 +0900)
Device name in profile view is not saved due to side effect of
new back key apply. Add codes to save device name when keyboard down.

Change-Id: I51b7185c618b371d32c0ee27e80760f10b85a31d

src/ui/bt-profile-view.c

index d2a7c7b..00b31ba 100644 (file)
@@ -88,6 +88,7 @@ static void __bt_profile_save_clicked_cb(void *data, Evas_Object *obj,
        bt_dev_t *dev;
        const char *entry_string;
        char *str;
+       char *name;
        bt_ug_data *ugd;
 
        ret_if(data == NULL);
@@ -107,12 +108,22 @@ static void __bt_profile_save_clicked_cb(void *data, Evas_Object *obj,
                ret_if(dev->ugd == NULL);
                ugd = dev->ugd;
 
-               ugd->popup =
-                   _bt_create_popup(ugd->win_main, BT_STR_ERROR,
+               ugd->popup = _bt_create_popup(ugd->win_main,
+                               BT_STR_ERROR,
                                BT_STR_EMPTY_NAME,
                                _bt_main_popup_del_cb, ugd, 2);
                ugd->back_cb = _bt_util_launch_no_event;
 
+
+               name = elm_entry_utf8_to_markup(dev->name);
+               if (name) {
+                       elm_entry_entry_set(dev->entry, name);
+                       free(name);
+               } else {
+                       elm_entry_entry_set(dev->entry, dev->name);
+               }
+
+               elm_entry_cursor_line_end_set(dev->entry);
                return;
        }
 
@@ -211,12 +222,42 @@ static void __bt_profile_unfocused_cb(void *data, Evas_Object *obj,
        FN_END;
 }
 
-static void __bt_profile_maxlength_reached(void *data, Evas_Object *obj,
-                                               void *event_info)
+static void __bt_profile_entry_keydown(void *data, Evas *e, Evas_Object *obj,
+                                                       void *event_info)
 {
        FN_START;
+       bt_dev_t *dev;
+       bt_ug_data *ugd;
+       Evas_Event_Key_Down *ev;
+       Evas_Object *entry = obj;
+
+       ret_if(data == NULL);
+       ret_if(event_info == NULL);
+       ret_if(entry == NULL);
+
+       dev = (bt_dev_t *)data;
+       ugd = dev->ugd;
+
+       ev = (Evas_Event_Key_Down *)event_info;
+       BT_DBG("ENTER ev->key:%s", ev->key);
+
+       if (g_strcmp0(ev->key, "KP_Enter") == 0 ||
+                       g_strcmp0(ev->key, "Return") == 0) {
 
-       /* In now, there is no UX guide */
+               Ecore_IMF_Context *imf_context;
+               Evas_Object *entry_container;
+
+               imf_context =
+                       (Ecore_IMF_Context*)elm_entry_imf_context_get(entry);
+               if (imf_context)
+                       ecore_imf_context_input_panel_hide(imf_context);
+
+               elm_object_focus_set(entry, EINA_FALSE);
+               entry_container = elm_object_parent_widget_get(entry);
+               if (entry_container)
+                       elm_object_signal_emit(entry_container,
+                                       "elm,state,eraser,hide", "elm");
+       }
 
        FN_END;
 }
@@ -247,6 +288,8 @@ void __bt_profile_input_panel_state_cb(void *data, Ecore_IMF_Context *ctx, int v
                }
        } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE){
                elm_naviframe_item_title_visible_set(vd->navi_it, EINA_TRUE);
+               BT_DBG("profile saved");
+               __bt_profile_save_clicked_cb(dev, NULL, NULL);
        }
 
        FN_END;
@@ -332,6 +375,8 @@ static Evas_Object *__bt_profile_name_icon_get(void *data, Evas_Object *obj,
                                __bt_profile_focused_cb, dev);
                evas_object_smart_callback_add(entry, "unfocused",
                                __bt_profile_unfocused_cb, dev);
+               evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN,
+                               __bt_profile_entry_keydown, dev);
                /* To be uncommented when we get bluetooth specific string
                elm_object_part_text_set(entry, "elm.guide", "Guide Text"); */
 
@@ -1467,6 +1512,7 @@ static Evas_Object *__bt_profile_draw_genlist(bt_ug_data *ugd, bt_dev_t *dev_inf
                                        ELM_GENLIST_ITEM_NONE,
                                        __bt_profile_media_option_item_sel,
                                        dev_info);
+
                vd->media_item = git;
        }
 
@@ -1510,12 +1556,6 @@ void _bt_profile_destroy_profile_view(void *data)
 
        vd = ugd->profile_vd;
 
-       if (vd->genlist) {
-               evas_object_data_set(vd->genlist, "view_data", NULL);
-               elm_genlist_clear(vd->genlist);
-               vd->genlist = NULL;
-       }
-
        if (vd->name_itc) {
                elm_genlist_item_class_free(vd->name_itc);
                vd->name_itc = NULL;
@@ -1545,8 +1585,11 @@ void _bt_profile_destroy_profile_view(void *data)
                elm_genlist_item_class_free(vd->hid_itc);
                vd->hid_itc = NULL;
        }
+       if (vd->network_itc) {
+               elm_genlist_item_class_free(vd->network_itc);
+               vd->network_itc = NULL;
+       }
 
-       vd->imf_context = NULL;
        vd->save_btn = NULL;
 
        /* unregister callback functions */
@@ -1554,62 +1597,25 @@ void _bt_profile_destroy_profile_view(void *data)
                ecore_imf_context_input_panel_event_callback_del(vd->imf_context,
                                        ECORE_IMF_INPUT_PANEL_STATE_EVENT,
                                        __bt_profile_input_panel_state_cb);
+               vd->imf_context = NULL;
        }
 
        free(vd);
        ugd->profile_vd = NULL;
 
-       elm_naviframe_item_pop(ugd->navi_bar);
-
        FN_END;
 }
 
-static void __bt_profile_back_cb(void *data, Evas_Object *obj,
-                                 void *event_info)
+static Eina_Bool __bt_profile_back_clicked_cb(void *data, Elm_Object_Item *it)
 {
        FN_START;
+       retv_if(!data, EINA_TRUE);
 
-       bt_dev_t *dev_info = NULL;
-       bt_ug_data *ugd = NULL;
-
-       ret_if(data == NULL);
-
-       dev_info = (bt_dev_t *)data;
-       ret_if(dev_info->ugd == NULL);
-
-       ugd = dev_info->ugd;
-       ret_if(ugd->profile_vd == NULL);
-
-       _bt_profile_destroy_profile_view(ugd);
-
-       FN_END;
-}
-
-static void __bt_profile_back_clicked_cb(void *data, Evas_Object *obj,
-                                 void *event_info)
-{
-       FN_START;
-
-       bt_dev_t *dev_info;
-       Ecore_IMF_Context *imf_context;
-       Ecore_IMF_Input_Panel_State state = ECORE_IMF_INPUT_PANEL_STATE_HIDE;
-
-       dev_info = (bt_dev_t *)data;
-       ret_if(dev_info == NULL);
-       ret_if(dev_info->entry == NULL);
-
-       imf_context = elm_entry_imf_context_get(dev_info->entry);
-       if (imf_context) {
-               state = ecore_imf_context_input_panel_state_get(imf_context);
-       }
-
-       if (state == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
-               __bt_profile_save_clicked_cb(dev_info, NULL, NULL);
-       } else {
-               __bt_profile_back_cb(dev_info, NULL, NULL);
-       }
+       bt_ug_data *ugd = (bt_ug_data *)data;
+       ugd->profile_vd = NULL;
 
        FN_END;
+       return EINA_TRUE;
 }
 
 /**********************************************************************
@@ -1622,17 +1628,13 @@ void _bt_profile_create_view(bt_dev_t *dev_info)
 
        bt_profile_view_data *vd;
        bt_ug_data *ugd;
-       Evas_Object *layout;
        Evas_Object *genlist;
-       Evas_Object *back_btn;
-       Evas_Object *title;
        Elm_Object_Item *navi_it;
 
        ret_if(dev_info == NULL);
        ret_if(dev_info->ugd == NULL);
 
        ugd = dev_info->ugd;
-       dev_info->layout = NULL;
 
        vd = calloc(1, sizeof(bt_profile_view_data));
        ret_if(vd == NULL);
@@ -1641,11 +1643,6 @@ void _bt_profile_create_view(bt_dev_t *dev_info)
        vd->win_main = ugd->win_main;
        vd->navi_bar = ugd->navi_bar;
 
-       _bt_create_bg(ugd->navi_bar, "group_list");
-
-       layout = _bt_create_layout(ugd->navi_bar, NULL, NULL);
-       vd->layout = layout;
-
        genlist = __bt_profile_draw_genlist(ugd, dev_info);
        vd->genlist = genlist;
 
@@ -1653,31 +1650,15 @@ void _bt_profile_create_view(bt_dev_t *dev_info)
        /* We can get this data from genlist object anytime. */
        evas_object_data_set(genlist, "view_data", vd);
 
-       /* create back button */
-       back_btn = elm_button_add(layout);
-
        navi_it = elm_naviframe_item_push(vd->navi_bar, BT_STR_DETAILS,
-                                       back_btn, NULL, genlist, NULL);
-
-       /* Slide title */
-       title = elm_label_add(ugd->navi_bar);
-       elm_object_style_set(title, "naviframe_title");
-       elm_label_slide_mode_set(title, ELM_LABEL_SLIDE_MODE_AUTO);
-       elm_label_wrap_width_set(title, 1);
-       elm_label_ellipsis_set(title, EINA_TRUE);
-       elm_object_text_set(title, BT_STR_DETAILS);
-       evas_object_show(title);
-       elm_object_item_part_content_set(navi_it, "elm.swallow.title", title);
+                                       NULL, NULL, genlist, NULL);
 
        elm_naviframe_prev_btn_auto_pushed_set(vd->navi_bar, EINA_FALSE);
 
        ea_object_event_callback_add(vd->navi_bar, EA_CALLBACK_BACK,
                                                                ea_naviframe_back_cb, NULL);
-
-       /* Style set should be called after elm_naviframe_item_push(). */
-       elm_object_style_set(back_btn, "naviframe/back_btn/default");
-       evas_object_smart_callback_add(back_btn, "clicked",
-                                      __bt_profile_back_clicked_cb, (void *)dev_info);
+       elm_naviframe_item_pop_cb_set(navi_it, __bt_profile_back_clicked_cb,
+                                                               ugd);
 
        vd->navi_it = navi_it;
 
@@ -1690,7 +1671,14 @@ void _bt_profile_delete_view(void *data)
 {
        FN_START;
 
-       __bt_profile_back_cb(data, NULL, NULL);
+       bt_ug_data *ugd;
+
+       ret_if(data == NULL);
+
+       ugd = (bt_ug_data *)data;
+
+       elm_naviframe_item_pop(ugd->navi_bar);
+       ugd->profile_vd = NULL;
 
        FN_END;
 }