Fix help not show in abnormal condition and cause setting not work 76/174376/1
authorliuxd <xd123.liu@samsung.com>
Fri, 30 Mar 2018 16:40:25 +0000 (00:40 +0800)
committerliuxd <xd123.liu@samsung.com>
Fri, 30 Mar 2018 16:41:02 +0000 (00:41 +0800)
Signed-off-by: liuxd <xd123.liu@samsung.com>
Change-Id: I3bf1e54a2aca72cb87814958a045b3b9428e5a26
Signed-off-by: liuxd <xd123.liu@samsung.com>
src/ise.cpp

index e235dfb..fdbb38b 100644 (file)
@@ -99,9 +99,6 @@ static int g_autofill_hint = 0;
 static string g_autofill_string;
 static vector<string> g_lookup_table_strings;
 static vector<string> g_smartreply_strings;
-#ifdef _MOBILE
-static Ecore_Timer *guideline_timer = NULL;
-#endif
 #if EXIT_ISE_ON_HIDE
 static Ecore_Timer *exit_timer = NULL;
 #endif
@@ -217,7 +214,8 @@ static ISELanguageManager _language_manager;
 static sclboolean           _cm_popup_opened = FALSE;
 static const char          *_cm_key_list[CM_KEY_LIST_SIZE] = {USER_KEYSTRING_OPTION, USER_KEYSTRING_EMOTICON, USER_KEYSTRING_CLIPBOARD, USER_KEYSTRING_VOICE, USER_KEYSTRING_FLOATING};
 static scluint              _current_cm_key_id = 0;
-Evas_Object* _guide_popup_window = NULL;
+Evas_Object* _guide_popup_setting = NULL;
+Evas_Object* _guide_popup_space = NULL;
 
 /*
  * This callback class will receive all response events from SCL
@@ -739,27 +737,26 @@ SCLEventReturnType CUIEventCallback::on_event_notification(SCLUINotiType noti_ty
     return ret;
 }
 
-void ise_destory_guideline_popup()
+void ise_destory_popup_setting()
 {
-    if (_guide_popup_window != NULL) {
-        evas_object_del(_guide_popup_window);
-        _guide_popup_window = NULL;
+    if (_guide_popup_setting != NULL) {
+        LOGD("destroy setting popup iter\n");
+        evas_object_del(_guide_popup_setting);
+        _guide_popup_setting = NULL;
+        g_config_values.first_guideset = TRUE;
+        write_ise_config_values();
     }
 }
 
-void _guideline_popup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+void ise_destory_popup_space()
 {
-    evas_object_smart_callback_del(obj, "dismissed", _guideline_popup_dismissed_cb);
-    evas_object_del(obj);
-    obj = NULL;
-
-    if (_guide_popup_window != NULL) {
-        evas_object_del(_guide_popup_window);
-        _guide_popup_window = NULL;
+    if (_guide_popup_space != NULL) {
+        LOGD("destroy space popup iter\n");
+        evas_object_del(_guide_popup_space);
+        _guide_popup_setting = NULL;
+        g_config_values.first_guidechange = TRUE;
+        write_ise_config_values();
     }
-
-    g_config_values.first_guideset = TRUE;
-    write_ise_config_values();
 }
 
 Evas_Object *open_message_popup(Evas_Object *parentWnd)
@@ -788,6 +785,26 @@ Evas_Object *open_message_popup(Evas_Object *parentWnd)
     return msg_window;
 }
 
+void _guideline_popup_setting_cb(void *data, Evas_Object *obj, void *event_info)
+{
+    evas_object_smart_callback_del(obj, "dismissed", _guideline_popup_setting_cb);
+    evas_object_del(obj);
+    obj = NULL;
+    ise_destory_popup_setting();
+    g_config_values.first_guideset = TRUE;
+    write_ise_config_values();
+}
+
+void _guideline_popup_space_cb(void *data, Evas_Object *obj, void *event_info)
+{
+    evas_object_smart_callback_del(obj, "dismissed", _guideline_popup_space_cb);
+    evas_object_del(obj);
+    obj = NULL;
+    ise_destory_popup_space();
+    g_config_values.first_guidechange = TRUE;
+    write_ise_config_values();
+}
+
 void ise_show_help_popup(sclulong keyEvent)
 {
     char buf[2048] = {0, };
@@ -795,26 +812,39 @@ void ise_show_help_popup(sclulong keyEvent)
     sclint scr_w = 0;
     sclint scr_h = 0;
     SclRectangle rectangle = {0};
+    Evas_Object *ctxpopup = NULL;
+    Elm_Theme *theme = NULL;
 
     if (g_ui) {
         g_ui->get_screen_resolution(&scr_w, &scr_h);
 
         if (keyEvent == MVK_space) {
+            g_config_values.first_guidechange = TRUE;
+            write_ise_config_values();
             g_ui->get_button_geometry("SPACE_KEY", &rectangle);
+            _guide_popup_space = open_message_popup(NATIVE_WINDOW_CAST(ime_get_main_window()));
+
+            theme = elm_theme_new();
+            elm_theme_ref_set(theme, NULL);
+            elm_theme_extension_add(theme, EDJ_FILE);
+
+            ctxpopup = elm_ctxpopup_add(_guide_popup_space);
+            elm_object_theme_set(ctxpopup, theme);
+            evas_object_smart_callback_add(ctxpopup, "dismissed", _guideline_popup_space_cb, (void *)keyEvent);
         } else {
+            g_config_values.first_guideset = TRUE;
+            write_ise_config_values();
             g_ui->get_button_geometry("CM_KEY", &rectangle);
+            _guide_popup_setting = open_message_popup(NATIVE_WINDOW_CAST(ime_get_main_window()));
+            theme = elm_theme_new();
+            elm_theme_ref_set(theme, NULL);
+            elm_theme_extension_add(theme, EDJ_FILE);
+            ctxpopup = elm_ctxpopup_add(_guide_popup_setting);
+            elm_object_theme_set(ctxpopup, theme);
+            evas_object_smart_callback_add(ctxpopup, "dismissed", _guideline_popup_setting_cb, (void *)keyEvent);
         }
     }
 
-    _guide_popup_window = open_message_popup(NATIVE_WINDOW_CAST(ime_get_main_window()));
-
-    Elm_Theme *theme = elm_theme_new();
-    elm_theme_ref_set(theme, NULL);
-    elm_theme_extension_add(theme, EDJ_FILE);
-
-    Evas_Object *ctxpopup = elm_ctxpopup_add(_guide_popup_window);
-    elm_object_theme_set(ctxpopup, theme);
-
     int rotation = elm_win_rotation_get(NATIVE_WINDOW_CAST(ime_get_main_window()));
     if (rotation == 0 || rotation == 180) {
         elm_object_style_set(ctxpopup, "customised_guideline_popup");
@@ -822,7 +852,6 @@ void ise_show_help_popup(sclulong keyEvent)
         elm_object_style_set(ctxpopup, "customised_guideline_popup_landscape");
     }
 
-    evas_object_smart_callback_add(ctxpopup, "dismissed", _guideline_popup_dismissed_cb, (void *)keyEvent);
     elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
                           ELM_CTXPOPUP_DIRECTION_UNKNOWN,
                           ELM_CTXPOPUP_DIRECTION_UNKNOWN,
@@ -858,14 +887,21 @@ void ise_show_help_popup(sclulong keyEvent)
     elm_label_line_wrap_set(text, ELM_WRAP_MIXED);
     evas_object_show(text);
 
-    evas_object_layer_set(_guide_popup_window, EVAS_LAYER_MAX);
-    evas_object_show(_guide_popup_window);
+    if (keyEvent == MVK_space) {
+        evas_object_layer_set(_guide_popup_space, EVAS_LAYER_MAX);
+        evas_object_show(_guide_popup_space);
+    } else {
+        evas_object_layer_set(_guide_popup_setting, EVAS_LAYER_MAX);
+        evas_object_show(_guide_popup_setting);
+    }
+
     evas_object_layer_set(ctxpopup, EVAS_LAYER_MAX);
     evas_object_show(ctxpopup);
 }
 
 SCLEventReturnType CUIEventCallback::on_event_drag_state_changed(SclUIEventDesc event_desc)
 {
+    LOGD("button %s is clicked\n", event_desc.key_value);
     if (event_desc.event_type == EVENT_TYPE_MOVE) {
         if (event_desc.key_event == MVK_space) {
             SclRectangle rectangle = {0};
@@ -881,9 +917,12 @@ SCLEventReturnType CUIEventCallback::on_event_drag_state_changed(SclUIEventDesc
             ime_set_floating_drag_end();
     } else if (event_desc.event_type == EVENT_TYPE_PRESS) {
 #ifdef _MOBILE
-        if ((!g_config_values.first_guideset) && (event_desc.key_type == KEY_TYPE_MODECHANGE)) {
-            ise_show_help_popup(event_desc.key_event);
+        if ((!g_config_values.first_guideset) && (strncmp(event_desc.key_value, "OPTION", strlen(event_desc.key_value)) == 0)) {
+            ise_show_help_popup(event_desc.key_event);//show help popup in on_event_drag_state_changed other than on_event_key_clicked for fixing help popup show delay issue
+            LOGD("setting popup show\n");
             return SCL_EVENT_PASS_ON;
+        } else {
+            ise_destory_popup_setting();//destory popup manually in case of abormal situation
         }
 #endif
         if (g_floating_mode && event_desc.mouse_current_point.y <= FLOATING_TITLE_BAR_HEIGHT
@@ -1070,8 +1109,8 @@ SCLEventReturnType CUIEventCallback::on_event_key_clicked(SclUIEventDesc event_d
            }
         case KEY_TYPE_MODECHANGE:
 #ifdef _MOBILE
-            if (!g_config_values.first_guideset) {
-               break;
+            if (_guide_popup_setting != NULL) {//popup is showing
+                break;
             }
 #endif
             if (strcmp(event_desc.key_value, USER_VOICE_LANGUAGE) == 0) {
@@ -1287,20 +1326,6 @@ bool ise_is_guideline_popup_enable_layout(void)
     return ret;
 }
 
-#ifdef _MOBILE
-static Eina_Bool popup_guideline_timer_cb(void *data)
-{
-    if ((!g_config_values.first_guidechange) && (_language_manager.get_enabled_languages_num() > 1)) {
-        ise_show_help_popup(MVK_space);
-        g_config_values.first_guidechange = TRUE;
-        write_ise_config_values();
-    }
-
-    guideline_timer = NULL;
-    return ECORE_CALLBACK_CANCEL;
-}
-#endif
-
 #if EXIT_ISE_ON_HIDE
 static Eina_Bool exit_timer_cb(void *data)
 {
@@ -1527,7 +1552,12 @@ ise_show(int ic)
 
 #ifdef _MOBILE
         if (ise_is_guideline_popup_enable_layout()) {
-            guideline_timer = ecore_timer_add(0.1, popup_guideline_timer_cb, NULL);
+            if ((!g_config_values.first_guidechange) && (_language_manager.get_enabled_languages_num() > 1)) {
+                ise_show_help_popup(MVK_space);
+                LOGD("space popup show\n");
+            } else {
+                ise_destory_popup_space();
+            }
         }
 #endif
 
@@ -1661,7 +1691,8 @@ ise_hide()
 
     _click_count = 0;
     delete_commit_timer();
-    ise_destory_guideline_popup();
+    ise_destory_popup_space();
+    ise_destory_popup_setting();
 
     g_keyboard_state.visible_state = FALSE;