TizenRefApp-7372 [Call UI] Fix logic of Home key grabbing during incoming call and... 65/91065/2 submit/tizen/20161006.151929 submit/tizen_3.0/20161018.000931
authorIgor Olshevskyi <i.olshevskyi@samsung.com>
Wed, 5 Oct 2016 12:44:41 +0000 (15:44 +0300)
committerIgor Olshevskyi <i.olshevskyi@samsung.com>
Wed, 5 Oct 2016 15:43:50 +0000 (18:43 +0300)
Change-Id: I46768b7a6e02c00df4507ef67f323e89dc8437f7

src/callui-proximity-lock-manager.c
src/callui-view-incoming-call-noti.c
src/callui-view-incoming-call.c
src/callui-window.c
src/callui.c

index 82aeef1..b249d5f 100644 (file)
@@ -204,7 +204,9 @@ static Eina_Bool __callui_plm_turn_lcd_on_timer_cb(void *data)
 
        _callui_proximity_lock_manager_h plm_h = data;
 
+       _callui_window_unset_keygrab_mode(plm_h->base.ad->window, CALLUI_KEY_HOME);
        __callui_plm_set_lcd_state(plm_h, CALLUI_PLM_LCD_ON);
+
        plm_h->lcd_turn_on_timer = NULL;
 
        return ECORE_CALLBACK_CANCEL;
@@ -258,6 +260,7 @@ static void __callui_plm_sensor_listener_cb(sensor_h sensor, sensor_event_s *sen
                         * this check will prevent turn off display.
                         */
                        if (!plm_h->base.ad->on_background) {
+                               _callui_window_set_keygrab_mode(plm_h->base.ad->window, CALLUI_KEY_HOME, CALLUI_WIN_KEYGRAB_EXCLUSIVE);
                                __callui_plm_set_lcd_state(plm_h, CALLUI_PLM_LCD_OFF);
                        } else {
                                dbg("Ignore. Application is paused");
index 32d8b1f..9bb208d 100644 (file)
@@ -207,8 +207,8 @@ static callui_result_e __callui_view_incoming_call_noti_oncreate(call_view_data_
        _callui_window_set_indicator_visible(ad->window, false);
        _callui_window_hide_quickpanel(ad->window);
 
-       if (_callui_window_set_keygrab_mode(ad->window, CALLUI_KEY_HOME, CALLUI_WIN_KEYGRAB_SHARED) != CALLUI_RESULT_OK) {
-               dbg("KEY_SELECT key grab failed");
+       if (_callui_common_is_homekey_answering_call_mode_on()) {
+               _callui_window_set_keygrab_mode(ad->window, CALLUI_KEY_HOME, CALLUI_WIN_KEYGRAB_EXCLUSIVE);
        }
 
        callui_result_e res = __create_main_content(vd, parent);
index 13dc189..fc4c53b 100644 (file)
@@ -127,9 +127,7 @@ static callui_result_e __callui_view_incoming_call_oncreate(call_view_data_base_
        _callui_window_set_rotation_locked(ad->window, true);
        _callui_window_hide_quickpanel(ad->window);
 
-       if (_callui_window_set_keygrab_mode(ad->window, CALLUI_KEY_HOME, CALLUI_WIN_KEYGRAB_TOPMOST) != CALLUI_RESULT_OK) {
-               dbg("KEY_SELECT key grab failed");
-       }
+       _callui_window_set_keygrab_mode(ad->window, CALLUI_KEY_HOME, CALLUI_WIN_KEYGRAB_EXCLUSIVE);
 
        _callui_window_set_quickpanel_disable(ad->window, true);
 
index 73760ac..9023ef6 100644 (file)
@@ -398,6 +398,10 @@ callui_result_e _callui_window_set_keygrab_mode(callui_window_h window_h, const
        CALLUI_RETURN_VALUE_IF_FAIL(mode >= CALLUI_WIN_KEYGRAB_UNKNOWN &&
                        mode <= CALLUI_WIN_KEYGRAB_OVERRIDE_EXCLUSIVE, CALLUI_RESULT_INVALID_PARAM);
 
+       if (!elm_win_keygrab_unset(window_h->win, key, 0, 0)) {
+               dbg("Can not unset keygrab key[%s]. Probably key grab was not set");
+       }
+
        if (!elm_win_keygrab_set(window_h->win, key, 0, 0, 0, __convert_app_keygrab_mode(mode))) {
                err("elm_win_keygrab_set() failed! key[%s] mode[%d]");
                return CALLUI_RESULT_FAIL;
index 9ac19cb..e03aa7d 100755 (executable)
@@ -35,7 +35,7 @@
 #define CALLUI_KEY_VOLUMEUP            "XF86AudioRaiseVolume"
 #define CALLUI_KEY_VOLUMEDOWN  "XF86AudioLowerVolume"
 
-#define CALLUI_MEDIA_KEY_LONG_PRESS_TIMEOUT_SEC        1.0
+#define CALLUI_MEDIA_KEY_LONG_PRESS_TIMEOUT_SEC                1.0
 #define CALLUI_APP_STATE_TIMEOUT_SEC                           0.3
 #define CALLUI_POWERKEY_PRESS_TIME_LIMIT_SEC           0.1
 
@@ -73,6 +73,7 @@ static void __remove_ecore_event_key_handlers(callui_app_data_t *ad);
 static void __set_main_win_key_grab(callui_app_data_t *ad);
 static void __set_main_power_key_grab(callui_app_data_t *ad);
 static void __powerkey_mode_changed_cb(keynode_t *node, void *user_data);
+static void __homekey_mode_changed_cb(keynode_t *node, void *user_data);
 static void __unset_main_win_key_grab(callui_app_data_t *ad);
 static void __process_power_key_up(callui_app_data_t *ad);
 static void __process_home_key_up(callui_app_data_t *ad);
@@ -101,6 +102,21 @@ static void __powerkey_mode_changed_cb(keynode_t *node, void *user_data)
        __set_main_power_key_grab(user_data);
 }
 
+static void __homekey_mode_changed_cb(keynode_t *node, void *user_data)
+{
+       CALLUI_RETURN_IF_FAIL(user_data);
+
+       callui_app_data_t *ad = user_data;
+
+       if (_callui_vm_get_cur_view_type(ad->view_manager) == CALLUI_VIEW_INCOMING_CALL_NOTI) {
+               if (_callui_common_is_homekey_answering_call_mode_on()) {
+                       _callui_window_set_keygrab_mode(ad->window, CALLUI_KEY_HOME, CALLUI_WIN_KEYGRAB_EXCLUSIVE);
+               } else {
+                       _callui_window_unset_keygrab_mode(ad->window, CALLUI_KEY_HOME);
+               }
+       }
+}
+
 static void __set_main_win_key_grab(callui_app_data_t *ad)
 {
        int res = _callui_window_set_keygrab_mode(ad->window, CALLUI_KEY_MEDIA, CALLUI_WIN_KEYGRAB_EXCLUSIVE);
@@ -111,6 +127,8 @@ static void __set_main_win_key_grab(callui_app_data_t *ad)
        __set_main_power_key_grab(ad);
 
        vconf_notify_key_changed(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, __powerkey_mode_changed_cb, ad);
+
+       vconf_notify_key_changed(VCONFKEY_CISSAPPL_ANSWERING_KEY_BOOL, __homekey_mode_changed_cb, ad);
 }
 
 static void __unset_main_win_key_grab(callui_app_data_t *ad)
@@ -120,6 +138,8 @@ static void __unset_main_win_key_grab(callui_app_data_t *ad)
        _callui_window_unset_keygrab_mode(ad->window, CALLUI_KEY_MEDIA);
 
        vconf_ignore_key_changed(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, __powerkey_mode_changed_cb);
+
+       vconf_ignore_key_changed(VCONFKEY_CISSAPPL_ANSWERING_KEY_BOOL, __homekey_mode_changed_cb);
 }
 
 static void __add_ecore_event_key_handlers(callui_app_data_t *ad)
@@ -740,7 +760,7 @@ static void __process_home_key_up(callui_app_data_t *ad)
        debug_enter();
 
        if (_callui_window_unset_keygrab_mode(ad->window, CALLUI_KEY_HOME) != CALLUI_RESULT_OK) {
-               dbg("KEY_SELECT key ungrab failed");
+               dbg("Can not unset keygrab for KEY_HOME failed. Probably keygrab was not set");
        }
 
        callui_view_type_e view_type = _callui_vm_get_cur_view_type(ad->view_manager);
@@ -764,19 +784,19 @@ static void __process_home_key_up(callui_app_data_t *ad)
                                                && !_callui_dpm_is_need_enforce_change_password(ad->dpm)) {
                                        _callui_common_unlock_swipe_lock();
                                }
-                       } else if (ad->second_call_popup == NULL) {
-                               dbg("Show popup - 2nd MT call - test volume popup");
-                               _callui_load_second_call_popup(ad);
+                       } else {
+                               if (!ad->second_call_popup) {
+                                       dbg("Show 2nd MT call popup");
+                                       _callui_load_second_call_popup(ad);
+                               }
+                               _callui_window_set_keygrab_mode(ad->window, CALLUI_KEY_HOME, CALLUI_WIN_KEYGRAB_EXCLUSIVE);
                        }
                } else {
-                       callui_win_keygrab_mode_e keygrab_mode = CALLUI_WIN_KEYGRAB_TOPMOST;
+                       callui_win_keygrab_mode_e keygrab_mode = CALLUI_WIN_KEYGRAB_EXCLUSIVE;
                        if (view_type == CALLUI_VIEW_INCOMING_CALL_NOTI) {
                                keygrab_mode = CALLUI_WIN_KEYGRAB_SHARED;
                        }
-                       if (_callui_window_set_keygrab_mode(ad->window,
-                                       CALLUI_KEY_HOME, keygrab_mode) != CALLUI_RESULT_OK) {
-                               dbg("KEY_HOME key grab failed");
-                       }
+                       _callui_window_set_keygrab_mode(ad->window, CALLUI_KEY_HOME, keygrab_mode);
                }
        } else if (view_type == CALLUI_VIEW_ENDCALL) {
                _callui_common_exit_app();