[SE][Ref.App][EXPL][Tizen_3.0_Mobile_ALPHA_RC6][Mobile][Notification] Cannot choose... 89/65789/1
authorIgor Olshevskyi <i.olshevskyi@samsung.com>
Tue, 12 Apr 2016 12:02:17 +0000 (15:02 +0300)
committerIgor Olshevskyi <i.olshevskyi@samsung.com>
Tue, 12 Apr 2016 12:02:17 +0000 (15:02 +0300)
Change-Id: I1ddd2feaf43b459b754fe806ba3935ec24c97f53

inc/callui-manager.h
src/callui-manager.c
src/callui-view-manager.c
src/callui.c

index 34182bf..9369b33 100644 (file)
@@ -38,6 +38,15 @@ typedef enum {
 } callui_call_release_type_e;
 
 typedef enum {
+       CALLUI_DIAL_SUCCESS = 0,
+       CALLUI_DIAL_CANCEL,
+       CALLUI_DIAL_FAIL,
+       CALLUI_DIAL_FAIL_SS,
+       CALLUI_DIAL_FAIL_FDN,
+       CALLUI_DIAL_FAIL_FLIGHT_MODE,
+} callui_dial_status_e;
+
+typedef enum {
        CALLUI_SIM_SLOT_1 = 0,
        CALLUI_SIM_SLOT_2,
        CALLUI_SIM_SLOT_DEFAULT,
@@ -54,6 +63,8 @@ typedef struct __callui_sound_manager *callui_sound_manager_h;
 typedef void (*callui_end_call_called_cb)(void *user_data,
                unsigned int call_id,
                callui_call_release_type_e release_type);
+typedef void (*callui_dial_status_cb)(void *user_data, callui_dial_status_e dial_status);
+
 
 callui_manager_h _callui_manager_create();
 
@@ -89,4 +100,10 @@ callui_result_e _callui_manager_add_end_call_called_cb(callui_manager_h cm_handl
 callui_result_e _callui_manager_remove_end_call_called_cb(callui_manager_h cm_handler,
                callui_end_call_called_cb cb_func, void *cb_data);
 
+callui_result_e _callui_manager_add_dial_status_cb(callui_manager_h cm_handler,
+               callui_dial_status_cb cb_func, void *cb_data);
+
+callui_result_e _callui_manager_remove_dial_status_cb(callui_manager_h cm_handler,
+               callui_dial_status_cb cb_func, void *cb_data);
+
 #endif /* __CALLUI_CALL_MANAGER_H__ */
index a37325f..7d4e546 100644 (file)
 #include "callui-listeners-collection.h"
 
 struct __callui_manager {
-       cm_client_h cm_handler;
+       cm_client_h cm_client;
 
        callui_sound_manager_h sound_manager;
        callui_state_provider_h state_provider;
 
        _callui_listeners_coll_t end_call_lc;
+       _callui_listeners_coll_t dial_status_lc;
 };
 typedef struct __callui_manager _callui_manager_t;
 
 static callui_result_e __callui_manager_init(callui_manager_h cm_handler);
 static void __callui_manager_deinit(callui_manager_h cm_handler);
+
 static cm_call_release_type_e __convert_app_release_type(callui_call_release_type_e type);
 static cm_call_answer_type_e __convert_app_answer_type(callui_call_answer_type_e type);
 static void __end_call_called_handler_func(_callui_listener_t *listener, va_list args);
 
+static callui_dial_status_e __convert_cm_dial_status(cm_dial_status_e type);
+static void __dial_status_handler_func(_callui_listener_t *listener, va_list args);
+static void __dial_status_cb(cm_dial_status_e dial_status, void *user_data);
+
 static cm_call_release_type_e __convert_app_release_type(callui_call_release_type_e type)
 {
        switch (type) {
@@ -78,25 +84,65 @@ static cm_call_answer_type_e __convert_app_answer_type(callui_call_answer_type_e
        }
 }
 
+static callui_dial_status_e __convert_cm_dial_status(cm_dial_status_e type)
+{
+       switch (type) {
+       case CM_DIAL_SUCCESS:
+               return CALLUI_DIAL_SUCCESS;
+       case CM_DIAL_CANCEL:
+               return CALLUI_DIAL_CANCEL;
+       case CM_DIAL_FAIL:
+               return CALLUI_DIAL_FAIL;
+       case CM_DIAL_FAIL_SS:
+               return CALLUI_DIAL_FAIL_SS;
+       case CM_DIAL_FAIL_FDN:
+               return CALLUI_DIAL_FAIL_FDN;
+       case CM_DIAL_FAIL_FLIGHT_MODE:
+               return CALLUI_DIAL_FAIL_FLIGHT_MODE;
+       default:
+               err("undefined dial status [%d]", type);
+               return CALLUI_DIAL_FAIL;
+       }
+}
+
+static void __dial_status_cb(cm_dial_status_e dial_status, void *user_data)
+{
+       CALLUI_RETURN_IF_FAIL(user_data);
+
+       callui_manager_h cm_handler = user_data;
+       callui_dial_status_e status = __convert_cm_dial_status(dial_status);
+
+       dbg("Dialing status [%d]", dial_status);
+
+       _callui_listeners_coll_call_listeners(&cm_handler->dial_status_lc, status);
+}
+
 static callui_result_e __callui_manager_init(callui_manager_h cm_handler)
 {
-       callui_result_e res = _callui_utils_convert_cm_res(cm_init(&cm_handler->cm_handler));
+       callui_result_e res = _callui_utils_convert_cm_res(cm_init(&cm_handler->cm_client));
        CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res);
 
        _callui_listeners_coll_init(&cm_handler->end_call_lc);
+       _callui_listeners_coll_init(&cm_handler->dial_status_lc);
 
-       cm_handler->sound_manager = _callui_sdm_create(cm_handler->cm_handler);
+       cm_handler->sound_manager = _callui_sdm_create(cm_handler->cm_client);
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler->sound_manager, CALLUI_RESULT_FAIL);
 
-       cm_handler->state_provider = _callui_stp_create(cm_handler->cm_handler);
+       cm_handler->state_provider = _callui_stp_create(cm_handler->cm_client);
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler->state_provider, CALLUI_RESULT_FAIL);
 
+       res = _callui_utils_convert_cm_res(cm_set_dial_status_cb(cm_handler->cm_client, __dial_status_cb, cm_handler));
+       CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res);
+
        return res;
 }
 
 static void __callui_manager_deinit(callui_manager_h cm_handler)
 {
        _callui_listeners_coll_deinit(&cm_handler->end_call_lc);
+       _callui_listeners_coll_deinit(&cm_handler->dial_status_lc);
+
+       cm_unset_dial_status_cb(cm_handler->cm_client);
 
        if (cm_handler->state_provider) {
                _callui_stp_destroy(cm_handler->state_provider);
@@ -108,9 +154,9 @@ static void __callui_manager_deinit(callui_manager_h cm_handler)
                cm_handler->sound_manager = NULL;
        }
 
-       if (cm_handler->cm_handler) {
-               cm_deinit(cm_handler->cm_handler);
-               cm_handler->cm_handler = NULL;
+       if (cm_handler->cm_client) {
+               cm_deinit(cm_handler->cm_client);
+               cm_handler->cm_client = NULL;
        }
 }
 
@@ -155,7 +201,7 @@ callui_result_e _callui_manager_dial_voice_call(callui_manager_h cm_handler, con
 
        char *temp_number = (char *)number;
        return _callui_utils_convert_cm_res(
-                       cm_dial_call(cm_handler->cm_handler, temp_number, CM_CALL_TYPE_VOICE, __convert_callui_sim_type(sim_slot)));
+                       cm_dial_call(cm_handler->cm_client, temp_number, CM_CALL_TYPE_VOICE, __convert_callui_sim_type(sim_slot)));
 }
 
 callui_result_e _callui_manager_end_call(callui_manager_h cm_handler, unsigned int call_id, callui_call_release_type_e release_type)
@@ -163,7 +209,7 @@ callui_result_e _callui_manager_end_call(callui_manager_h cm_handler, unsigned i
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        callui_result_e res = _callui_utils_convert_cm_res(
-                       cm_end_call(cm_handler->cm_handler, call_id, __convert_app_release_type(release_type)));
+                       cm_end_call(cm_handler->cm_client, call_id, __convert_app_release_type(release_type)));
 
        if (res == CALLUI_RESULT_OK) {
                _callui_listeners_coll_call_listeners(&cm_handler->end_call_lc, call_id, release_type);
@@ -177,7 +223,7 @@ callui_result_e _callui_manager_swap_call(callui_manager_h cm_handler)
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        return _callui_utils_convert_cm_res(
-                       cm_swap_call(cm_handler->cm_handler));
+                       cm_swap_call(cm_handler->cm_client));
 }
 
 callui_result_e _callui_manager_hold_call(callui_manager_h cm_handler)
@@ -185,7 +231,7 @@ callui_result_e _callui_manager_hold_call(callui_manager_h cm_handler)
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        return _callui_utils_convert_cm_res(
-                       cm_hold_call(cm_handler->cm_handler));
+                       cm_hold_call(cm_handler->cm_client));
 }
 
 callui_result_e _callui_manager_unhold_call(callui_manager_h cm_handler)
@@ -193,7 +239,7 @@ callui_result_e _callui_manager_unhold_call(callui_manager_h cm_handler)
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        return _callui_utils_convert_cm_res(
-                       cm_unhold_call(cm_handler->cm_handler));
+                       cm_unhold_call(cm_handler->cm_client));
 }
 
 callui_result_e _callui_manager_join_call(callui_manager_h cm_handler)
@@ -201,7 +247,7 @@ callui_result_e _callui_manager_join_call(callui_manager_h cm_handler)
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        return _callui_utils_convert_cm_res(
-                       cm_join_call(cm_handler->cm_handler));
+                       cm_join_call(cm_handler->cm_client));
 }
 
 callui_result_e _callui_manager_reject_call(callui_manager_h cm_handler)
@@ -209,7 +255,7 @@ callui_result_e _callui_manager_reject_call(callui_manager_h cm_handler)
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        return _callui_utils_convert_cm_res(
-                       cm_reject_call(cm_handler->cm_handler));
+                       cm_reject_call(cm_handler->cm_client));
 }
 
 callui_result_e _callui_manager_stop_alert(callui_manager_h cm_handler)
@@ -217,7 +263,7 @@ callui_result_e _callui_manager_stop_alert(callui_manager_h cm_handler)
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        return _callui_utils_convert_cm_res(
-                       cm_stop_alert(cm_handler->cm_handler));
+                       cm_stop_alert(cm_handler->cm_client));
 }
 
 callui_result_e _callui_manager_split_call(callui_manager_h cm_handler, unsigned int call_id)
@@ -225,7 +271,7 @@ callui_result_e _callui_manager_split_call(callui_manager_h cm_handler, unsigned
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        return _callui_utils_convert_cm_res(
-                       cm_split_call(cm_handler->cm_handler, call_id));
+                       cm_split_call(cm_handler->cm_client, call_id));
 }
 
 callui_result_e _callui_manager_answer_call(callui_manager_h cm_handler, callui_call_answer_type_e ans_type)
@@ -233,7 +279,7 @@ callui_result_e _callui_manager_answer_call(callui_manager_h cm_handler, callui_
        CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
 
        return _callui_utils_convert_cm_res(
-                       cm_answer_call(cm_handler->cm_handler, __convert_app_answer_type(ans_type)));
+                       cm_answer_call(cm_handler->cm_client, __convert_app_answer_type(ans_type)));
 
 }
 
@@ -258,6 +304,12 @@ static void __end_call_called_handler_func(_callui_listener_t *listener, va_list
        ((callui_end_call_called_cb)(listener->cb_func))(listener->cb_data, call_id, release_type);
 }
 
+static void __dial_status_handler_func(_callui_listener_t *listener, va_list args)
+{
+       callui_dial_status_e dial_status = va_arg(args, callui_dial_status_e);
+       ((callui_dial_status_cb)(listener->cb_func))(listener->cb_data, dial_status);
+}
+
 callui_result_e _callui_manager_add_end_call_called_cb(callui_manager_h cm_handler,
                callui_end_call_called_cb cb_func, void *cb_data)
 {
@@ -277,3 +329,21 @@ callui_result_e _callui_manager_remove_end_call_called_cb(callui_manager_h cm_ha
        return _callui_listeners_coll_remove_listener(&cm_handler->end_call_lc, cb_func, cb_data);
 }
 
+callui_result_e _callui_manager_add_dial_status_cb(callui_manager_h cm_handler,
+               callui_dial_status_cb cb_func, void *cb_data)
+{
+       CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
+       CALLUI_RETURN_VALUE_IF_FAIL(cb_func, CALLUI_RESULT_INVALID_PARAM);
+
+       return _callui_listeners_coll_add_listener(&cm_handler->dial_status_lc,
+                       __dial_status_handler_func, cb_func, cb_data);
+}
+
+callui_result_e _callui_manager_remove_dial_status_cb(callui_manager_h cm_handler,
+               callui_dial_status_cb cb_func, void *cb_data)
+{
+       CALLUI_RETURN_VALUE_IF_FAIL(cm_handler, CALLUI_RESULT_INVALID_PARAM);
+       CALLUI_RETURN_VALUE_IF_FAIL(cb_func, CALLUI_RESULT_INVALID_PARAM);
+
+       return _callui_listeners_coll_remove_listener(&cm_handler->dial_status_lc, cb_func, cb_data);
+}
index 093259c..692eeeb 100644 (file)
@@ -273,14 +273,17 @@ callui_view_type_e _callui_vm_get_cur_view_type(callui_vm_h vm)
 static callui_result_e __destroy_cur_view(callui_vm_h vm)
 {
        callui_result_e res = CALLUI_RESULT_FAIL;
-
        call_view_data_base_t *view = vm->cur_view;
 
-       CALLUI_RETURN_VALUE_IF_FAIL(view, CALLUI_RESULT_FAIL);
-       CALLUI_RETURN_VALUE_IF_FAIL(view->destroy, CALLUI_RESULT_FAIL);
+       if (!view) {
+               dbg("Current view is NULL");
+               return CALLUI_RESULT_OK;
+       }
 
        if (view->destroy) {
                res = view->destroy(view);
+       } else {
+               warn("destroy() is not set! Possible memory leak");
        }
 
        vm->cur_view = NULL;
index 5b2f49e..493827f 100755 (executable)
@@ -151,9 +151,9 @@ static void __process_outgoing_call(callui_app_data_t *ad, const char *number)
        callui_result_e res = _callui_manager_dial_voice_call(ad->call_manager,
                        number, CALLUI_SIM_SLOT_DEFAULT);
 
-       if (CALLUI_RESULT_OK != res && _callui_stp_is_any_calls_available(ad->state_provider)) {
+       if (CALLUI_RESULT_OK != res) {
                err("_callui_manager_dial_voice_call() failed. ret[%d]", res);
-               if (_callui_stp_is_any_calls_available(ad->state_provider)) {
+               if (!_callui_stp_is_any_calls_available(ad->state_provider)) {
                        dbg("No more calls available. Exit application");
                        _callui_common_exit_app();
                }
@@ -222,7 +222,6 @@ static void __call_state_change_cb(void *user_data,
 
 static void __reset_state_params(callui_app_data_t *ad)
 {
-       dbg("..");
        CALLUI_RETURN_IF_FAIL(ad);
 
        ad->multi_call_list_end_clicked = false;
@@ -292,6 +291,23 @@ static void __init_app_event_handlers(callui_app_data_t *ad)
        }
 }
 
+static void __dial_status_cb(void *user_data, callui_dial_status_e dial_status)
+{
+       debug_enter();
+
+       CALLUI_RETURN_IF_FAIL(user_data);
+
+       callui_app_data_t *ad = user_data;
+
+       if (dial_status != CALLUI_DIAL_SUCCESS) {
+               if (!_callui_stp_is_any_calls_available(ad->state_provider)) {
+                       dbg("No more calls available. Exit application");
+                       _callui_common_exit_app();
+               }
+               ad->waiting_dialing = false;
+       }
+}
+
 static bool __app_init(callui_app_data_t *ad)
 {
        _callui_common_dvc_control_lcd_state(LCD_OFF_SLEEP_LOCK);
@@ -306,6 +322,7 @@ static bool __app_init(callui_app_data_t *ad)
        ad->state_provider = _callui_manager_get_state_provider(ad->call_manager);
        ad->sound_manager = _callui_manager_get_sound_manager(ad->call_manager);
 
+       _callui_manager_add_dial_status_cb(ad->call_manager, __dial_status_cb, ad);
        _callui_stp_add_call_state_event_cb(ad->state_provider, __call_state_change_cb, ad);
        _callui_sdm_add_audio_state_changed_cb(ad->sound_manager, __audio_state_changed_cb, ad);
 
@@ -431,6 +448,8 @@ static bool __create_main_gui_elem(callui_app_data_t *ad)
 
 static bool __app_deinit(callui_app_data_t *ad)
 {
+       debug_enter();
+
        _callui_stp_remove_call_state_event_cb(ad->state_provider, __call_state_change_cb, ad);
        _callui_sdm_remove_audio_state_changed_cb(ad->sound_manager, __audio_state_changed_cb, ad);
 
@@ -472,12 +491,18 @@ static bool __app_deinit(callui_app_data_t *ad)
 
        __bt_deinit();
 
+       debug_leave();
+
        return false;
 }
 
 static void __app_terminate(void *data)
 {
+       debug_enter();
+
        __app_deinit(data);
+
+       debug_leave();
 }
 
 static void __app_pause(void *data)