From 01b50ddc4d6adce00bd8af28a74dc95f5248523d Mon Sep 17 00:00:00 2001 From: Igor Olshevskyi Date: Tue, 4 Apr 2017 09:38:46 +0300 Subject: [PATCH] TizenRefApp-8323 [Call UI] Implement CallDialer Change-Id: I3950c7f468c4aac260b8bfca3a671a5457d972bb --- inc/model/ICallDialer.h | 7 ++----- inc/model/types.h | 4 +++- src/common.h | 2 ++ src/model/CallDialer.cpp | 27 +++++++++++++++++++++------ src/model/CallDialer.h | 12 +++++++----- src/model/CallManager.h | 4 ++-- src/model/helpers.h | 4 ++++ src/model/helpers.hpp | 34 +++++++++++++++++++++++++++++----- src/model/implTypes.h | 1 + 9 files changed, 71 insertions(+), 24 deletions(-) diff --git a/inc/model/ICallDialer.h b/inc/model/ICallDialer.h index 1ca00b9..c9193d0 100644 --- a/inc/model/ICallDialer.h +++ b/inc/model/ICallDialer.h @@ -22,13 +22,10 @@ namespace callui { class ICallDialer: public ucl::Polymorphic { - public: - using DialStatusHandler = ucl::Delegate; - public: virtual ucl::Result dialVoiceCall(const std::string &number, SimSlot simSlot) = 0; - virtual ucl::Result addDialStatusHandler(DialStatusHandler handler) = 0; - virtual ucl::Result removeDialStatusHandler(DialStatusHandler handler) = 0; + virtual void addDialStatusHandler(DialStatusHandler handler) = 0; + virtual void removeDialStatusHandler(DialStatusHandler handler) = 0; }; } diff --git a/inc/model/types.h b/inc/model/types.h index 437c959..b59db37 100644 --- a/inc/model/types.h +++ b/inc/model/types.h @@ -49,7 +49,7 @@ namespace callui { CANCEL, FAIL, FAIL_SS, - FDN, + FAIL_FDN, FLIGHT_MODE }; @@ -110,6 +110,8 @@ namespace callui { using CallStateHandler = ucl::Delegate; + using DialStatusHandler = ucl::Delegate; + using AudioStateHandler = ucl::Delegate; using MuteStateHandler = ucl::Delegate; diff --git a/src/common.h b/src/common.h index 1e0964b..3b25582 100644 --- a/src/common.h +++ b/src/common.h @@ -31,4 +31,6 @@ #undef UCL_LOG_TAG #define UCL_LOG_TAG "CALLUI" +#define TEL_NUMBER_MAX_SIZE 82 + #endif // __CALLUI_COMMON_H__ diff --git a/src/model/CallDialer.cpp b/src/model/CallDialer.cpp index 0699b49..b93765c 100644 --- a/src/model/CallDialer.cpp +++ b/src/model/CallDialer.cpp @@ -17,8 +17,10 @@ #include "CallDialer.h" #include "CallManager.h" +#include "CallClient.h" #include "common.h" +#include "helpers.h" namespace callui { @@ -31,6 +33,7 @@ namespace callui { CallDialer::~CallDialer() { + cm_unset_dial_status_cb(*(m_cm.getCallClient())); } CallDialerSRef CallDialer::newInstance(CallManager &cm) @@ -40,23 +43,35 @@ namespace callui { return result; } + void CallDialer::DialStatusChangedCb(cm_dial_status_e status) + { + m_event.invoke(convertCallManagerDialStatus(status)); + } + Result CallDialer::prepare() { - return RES_OK; + return convertCallManagerResult( + cm_set_dial_status_cb(*(m_cm.getCallClient()), + CALLBACK_B(CallDialer::DialStatusChangedCb), this)); } Result CallDialer::dialVoiceCall(const std::string &number, SimSlot simSlot) { - UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!"); + char buff[TEL_NUMBER_MAX_SIZE] = { 0 }; + snprintf(buff, sizeof(buff), "%s", number.c_str()); + + return convertCallManagerResult( + cm_dial_call(*(m_cm.getCallClient()), + buff, CM_CALL_TYPE_VOICE, convertCallAppSimSlot(simSlot))); } - Result CallDialer::addDialStatusHandler(DialStatusHandler handler) + void CallDialer::addDialStatusHandler(DialStatusHandler handler) { - UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!"); + m_event += handler; } - Result CallDialer::removeDialStatusHandler(DialStatusHandler handler) + void CallDialer::removeDialStatusHandler(DialStatusHandler handler) { - UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!"); + m_event -= handler; } } diff --git a/src/model/CallDialer.h b/src/model/CallDialer.h index 4dcf865..f1a7d5e 100644 --- a/src/model/CallDialer.h +++ b/src/model/CallDialer.h @@ -17,7 +17,7 @@ #ifndef __CALLUI_MODEL_CALL_DIALER_H__ #define __CALLUI_MODEL_CALL_DIALER_H__ -#include "types.h" +#include #include "model/ICallDialer.h" @@ -33,17 +33,19 @@ namespace callui { // ICallDialer virtual ucl::Result dialVoiceCall(const std::string &number, SimSlot simSlot) override final; - virtual ucl::Result addDialStatusHandler(DialStatusHandler handler) override final; - virtual ucl::Result removeDialStatusHandler(DialStatusHandler handler) override final; + virtual void addDialStatusHandler(DialStatusHandler handler) override final; + virtual void removeDialStatusHandler(DialStatusHandler handler) override final; - private: - ucl::Result prepare(); private: friend class ucl::RefCountObj; CallDialer(CallManager &cm); + ucl::Result prepare(); + void DialStatusChangedCb(cm_dial_status_e dial_status); + private: CallManager &m_cm; + DialStatusEvent m_event; }; } diff --git a/src/model/CallManager.h b/src/model/CallManager.h index 0fe3192..6b7b972 100644 --- a/src/model/CallManager.h +++ b/src/model/CallManager.h @@ -17,10 +17,10 @@ #ifndef __CALLUI_MODEL_CALL_MANAGER_H__ #define __CALLUI_MODEL_CALL_MANAGER_H__ -#include "model/ICallManager.h" - #include "ucl/misc/Event.h" +#include "model/ICallManager.h" + #include "implTypes.h" namespace callui { diff --git a/src/model/helpers.h b/src/model/helpers.h index 522dc47..c1d5ac2 100644 --- a/src/model/helpers.h +++ b/src/model/helpers.h @@ -26,6 +26,10 @@ namespace callui { ucl::Result convertCallManagerResult(int cmRes); AudioStateType convertCallManagerAudioState(cm_audio_state_type_e state); + + DialStatus convertCallManagerDialStatus(cm_dial_status_e status); + + cm_multi_sim_slot_type_e convertCallAppSimSlot(SimSlot slot); } #include "helpers.hpp" diff --git a/src/model/helpers.hpp b/src/model/helpers.hpp index 43a9784..d5d411e 100644 --- a/src/model/helpers.hpp +++ b/src/model/helpers.hpp @@ -37,13 +37,37 @@ namespace callui { inline AudioStateType convertCallManagerAudioState(cm_audio_state_type_e state) { switch (state) { - case CM_AUDIO_STATE_NONE_E: return AudioStateType::NONE; - case CM_AUDIO_STATE_SPEAKER_E: return AudioStateType::SPEAKER; - case CM_AUDIO_STATE_RECEIVER_E: return AudioStateType::RECEIVER; - case CM_AUDIO_STATE_EARJACK_E: return AudioStateType::EARJACK; - case CM_AUDIO_STATE_BT_E: return AudioStateType::BT; + case CM_AUDIO_STATE_NONE_E: return AudioStateType::NONE; + case CM_AUDIO_STATE_SPEAKER_E: return AudioStateType::SPEAKER; + case CM_AUDIO_STATE_RECEIVER_E: return AudioStateType::RECEIVER; + case CM_AUDIO_STATE_EARJACK_E: return AudioStateType::EARJACK; + case CM_AUDIO_STATE_BT_E: return AudioStateType::BT; default: return AudioStateType::NONE; } } + + inline DialStatus convertCallManagerDialStatus(cm_dial_status_e status) + { + switch (status) { + case CM_DIAL_SUCCESS: return DialStatus::SUCCESS; + case CM_DIAL_CANCEL: return DialStatus::CANCEL; + case CM_DIAL_FAIL: return DialStatus::FAIL; + case CM_DIAL_FAIL_SS: return DialStatus::FAIL_SS; + case CM_DIAL_FAIL_FDN: return DialStatus::FAIL_FDN; + case CM_DIAL_FAIL_FLIGHT_MODE: return DialStatus::FLIGHT_MODE; + default: + return DialStatus::FAIL; + } + } + + inline cm_multi_sim_slot_type_e convertCallAppSimSlot(SimSlot slot) + { + switch (slot) { + case SimSlot::FIRST: return CM_MULTI_SIM_SLOT_1; + case SimSlot::SECOND: return CM_MULTI_SIM_SLOT_2; + default: + return CM_MULTI_SIM_SLOT_DEFAULT; + } + } } diff --git a/src/model/implTypes.h b/src/model/implTypes.h index ee8bae0..c943d14 100644 --- a/src/model/implTypes.h +++ b/src/model/implTypes.h @@ -40,6 +40,7 @@ namespace callui { using CallStateEvent = ucl::Event; using AudioStateEvent = ucl::Event; using MuteStateEvent = ucl::Event; + using DialStatusEvent = ucl::Event; } #endif // __CALLUI_MODEL_IMPL_TYPES_H__ -- 2.34.1