#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) {
}
}
+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);
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;
}
}
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)
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);
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)
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)
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)
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)
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)
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)
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)
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)));
}
((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)
{
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);
+}
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();
}
static void __reset_state_params(callui_app_data_t *ad)
{
- dbg("..");
CALLUI_RETURN_IF_FAIL(ad);
ad->multi_call_list_end_clicked = false;
}
}
+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);
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);
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);
__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)