From: Igor Olshevskyi Date: Mon, 24 Apr 2017 09:09:45 +0000 (+0300) Subject: TizenRefApp-8423 [Call UI] Refactor Call classes to improve stability X-Git-Tag: submit/tizen/20170630.111746~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8c9d545a6cd268deedf8bc503c33a3eb1f2e2d3;p=profile%2Fwearable%2Fapps%2Fnative%2Fcall-ui.git TizenRefApp-8423 [Call UI] Refactor Call classes to improve stability Change-Id: I1444414323e05d6693b1dadd2359b4b5d82747f1 --- diff --git a/inc/model/CallBuilder.h b/inc/model/CallBuilder.h index b603cd1..1ade234 100644 --- a/inc/model/CallBuilder.h +++ b/inc/model/CallBuilder.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef CALLUI_MODEL_CALL_BUILDER_H__ -#define CALLUI_MODEL_CALL_BUILDER_H__ +#ifndef __CALLUI_MODEL_CALL_BUILDER_H__ +#define __CALLUI_MODEL_CALL_BUILDER_H__ #include "types.h" @@ -24,13 +24,9 @@ namespace callui { class CallBuilder { public: CallBuilder(); - CallBuilder &setListener(ICallListenerWRef value); ICallSRef build() const; - - private: - ICallListenerWRef m_listener; }; } -#endif // CALLUI_MODEL_CALL_BUILDER_H__ +#endif // __CALLUI_MODEL_CALL_BUILDER_H__ diff --git a/inc/model/ICall.h b/inc/model/ICall.h index 521b197..9cc6505 100644 --- a/inc/model/ICall.h +++ b/inc/model/ICall.h @@ -25,6 +25,7 @@ namespace callui { class ICall : public ucl::Polymorphic { public: + virtual void setListener(const ICallListenerWRef &listener) = 0; virtual ucl::Result processAppControl(app_control_h appControl) = 0; virtual ISoundManagerSRef getSoundManager() = 0; virtual ICallManagerSRef getCallManager() = 0; diff --git a/src/main/Instance.cpp b/src/main/Instance.cpp index 339120c..d54e7ee 100644 --- a/src/main/Instance.cpp +++ b/src/main/Instance.cpp @@ -148,15 +148,14 @@ namespace callui { CALLBACK_A(Instance::onBack), this); // For testing - static ListenerSRef listener = Listener::newInstance(*this); - m_call = CallBuilder(). - setListener(listener). - build(); - + m_call = CallBuilder().build(); if (!m_call) { LOG_RETURN(RES_FAIL, "m_call is NULL"); } + static ListenerSRef listener = Listener::newInstance(*this); + m_call->setListener(listener); + return RES_OK; } diff --git a/src/model/ActiveCall.cpp b/src/model/ActiveCall.cpp index 8bbc9a4..b9e0397 100644 --- a/src/model/ActiveCall.cpp +++ b/src/model/ActiveCall.cpp @@ -28,7 +28,7 @@ namespace callui { using namespace ucl; - ActiveCall::ActiveCall(CallManager &cm, cm_call_data_h callData): + ActiveCall::ActiveCall(CallManagerWRef cm, cm_call_data_h callData): m_cm(cm), m_isDialing(false) { @@ -38,8 +38,12 @@ namespace callui { { } - ActiveCallSRef ActiveCall::newInstance(CallManager &cm, cm_call_data_h callData) + ActiveCallSRef ActiveCall::newInstance(CallManagerWRef cm, cm_call_data_h callData) { + if (!cm) { + LOG_RETURN_VALUE(RES_FAIL, {}, "cm is NULL"); + } + if (!callData) { LOG_RETURN_VALUE(RES_FAIL, {}, "callData is NULL"); } @@ -51,7 +55,7 @@ namespace callui { Result ActiveCall::prepare(cm_call_data_h callData) { - m_callInfo = CallInfo::newInstance(*m_cm.getCallClient(), callData); + m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData); if (!m_callInfo) { LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!"); } @@ -77,17 +81,26 @@ namespace callui { Result ActiveCall::hold() { - return convertCMResult(cm_hold_call(*m_cm.getCallClient())); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return convertCMResult(cm_hold_call(m_cm->getCallClient())); } Result ActiveCall::end() { - return m_cm.endCall(0, CallReleaseType::ALL_ACTIVE); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return m_cm->endCall(0, CallReleaseType::ALL_ACTIVE); } Result ActiveCall::split(const IConferenceCallInfoSCRef &confCallInfo) { - return m_cm.splitCalls(m_callInfo, confCallInfo); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return m_cm->splitCalls(m_callInfo, confCallInfo); } } diff --git a/src/model/ActiveCall.h b/src/model/ActiveCall.h index d85464c..bbdd3f4 100644 --- a/src/model/ActiveCall.h +++ b/src/model/ActiveCall.h @@ -27,7 +27,7 @@ namespace callui { class ActiveCall final : public IActiveCall { public: - static ActiveCallSRef newInstance(CallManager &cm, cm_call_data_h callData); + static ActiveCallSRef newInstance(CallManagerWRef cm, cm_call_data_h callData); virtual ~ActiveCall(); // IActiveCall @@ -40,12 +40,12 @@ namespace callui { private: friend class ucl::RefCountObj; - ActiveCall(CallManager &cm, cm_call_data_h callData); + ActiveCall(CallManagerWRef cm, cm_call_data_h callData); ucl::Result prepare(cm_call_data_h callData); private: - CallManager &m_cm; + CallManagerWRef m_cm; CallInfoSRef m_callInfo; bool m_isDialing; }; diff --git a/src/model/Call.cpp b/src/model/Call.cpp index 4349208..bfe835c 100644 --- a/src/model/Call.cpp +++ b/src/model/Call.cpp @@ -41,9 +41,8 @@ namespace callui { using namespace ucl; - Call::Call(RefCountObjBase &rc, ICallListenerWRef listener): - RefCountAware(&rc), - m_listener(listener) + Call::Call(RefCountObjBase &rc): + RefCountAware(&rc) { } @@ -51,6 +50,11 @@ namespace callui { { } + void Call::setListener(const ICallListenerWRef &listener) + { + m_listener = listener; + } + Result Call::processAppControl(app_control_h appControl) { if (!appControl) { diff --git a/src/model/Call.h b/src/model/Call.h index 0871d0a..e4edebb 100644 --- a/src/model/Call.h +++ b/src/model/Call.h @@ -38,6 +38,7 @@ namespace callui { // ICall + virtual void setListener(const ICallListenerWRef &listener) override final; virtual ucl::Result processAppControl(app_control_h appControl) override final; virtual ISoundManagerSRef getSoundManager() override final; virtual ICallManagerSRef getCallManager() override final; @@ -51,7 +52,7 @@ namespace callui { private: friend class CallBuilder; friend class ucl::RefCountObj; - Call(ucl::RefCountObjBase &rc, ICallListenerWRef listener); + Call(ucl::RefCountObjBase &rc); ucl::Result prepare(); diff --git a/src/model/CallBuilder.cpp b/src/model/CallBuilder.cpp index 6d2b9bf..5826135 100644 --- a/src/model/CallBuilder.cpp +++ b/src/model/CallBuilder.cpp @@ -24,20 +24,13 @@ namespace callui { using namespace ucl; - CallBuilder::CallBuilder(): - m_listener(nullptr) + CallBuilder::CallBuilder() { } - CallBuilder &CallBuilder::setListener(ICallListenerWRef value) - { - m_listener = value; - return *this; - } - ICallSRef CallBuilder::build() const { - auto result = makeShared(m_listener); + auto result = makeShared(); FAIL_RETURN_VALUE(result->prepare(), {}, "result->prepare() failed!"); return result; } diff --git a/src/model/CallInfo.cpp b/src/model/CallInfo.cpp index 78b5bad..333e933 100644 --- a/src/model/CallInfo.cpp +++ b/src/model/CallInfo.cpp @@ -34,6 +34,7 @@ namespace callui { m_callId(-1), m_startTime(0), m_isEmergency(false), + m_isHDVoice(false), m_confMemberCount(0) { } diff --git a/src/model/CallManager.cpp b/src/model/CallManager.cpp index 8835dfa..2ad118c 100644 --- a/src/model/CallManager.cpp +++ b/src/model/CallManager.cpp @@ -34,8 +34,10 @@ namespace callui { using namespace ucl; - CallManager::CallManager(const CallClientSRef &callClient, - ICallManagerListenerWRef listener): + CallManager::CallManager(RefCountObjBase &rc, + const CallClientSRef &callClient, + ICallManagerListenerWRef listener): + RefCountAware(&rc), m_callClient(callClient), m_listener(listener), m_slot(SimSlot::UNDEFINED), @@ -86,6 +88,10 @@ namespace callui { FAIL_RETURN(updateCall(m_activeCall, active), "updateCall() failed!"); FAIL_RETURN(updateCall(m_heldCall, held), "updateCall() failed!"); + cm_call_data_free(incom); + cm_call_data_free(active); + cm_call_data_free(held); + return RES_OK; } @@ -95,7 +101,7 @@ namespace callui { call.reset(); if (data) { - call = TYPE::newInstance(*this, std::forward(data)); + call = TYPE::newInstance(asWeak(*this), std::forward(data)); if (!call) { LOG_RETURN(RES_FAIL, "newInstance() failed!"); } @@ -103,9 +109,9 @@ namespace callui { return RES_OK; } - CallClientSRef CallManager::getCallClient() + CallClient &CallManager::getCallClient() { - return m_callClient; + return *m_callClient; } SimSlot CallManager::getSimSlot() const diff --git a/src/model/CallManager.h b/src/model/CallManager.h index 242c607..a2ce29b 100644 --- a/src/model/CallManager.h +++ b/src/model/CallManager.h @@ -25,13 +25,15 @@ namespace callui { - class CallManager final : public ICallManager { + class CallManager final : + public ucl::RefCountAware, + public ICallManager { public: static CallManagerSRef newInstance(const CallClientSRef &callClient, ICallManagerListenerWRef listener); virtual ~CallManager(); - CallClientSRef getCallClient(); + CallClient &getCallClient(); SimSlot getSimSlot() const; ucl::Result dialVoiceCall(const std::string &number); ucl::Result endCall(unsigned int callId, CallReleaseType type); @@ -52,7 +54,7 @@ namespace callui { private: friend class ucl::RefCountObj; - CallManager(const CallClientSRef &callClient, + CallManager(ucl::RefCountObjBase &rc, const CallClientSRef &callClient, ICallManagerListenerWRef listener); ucl::Result prepare(); diff --git a/src/model/EndCall.cpp b/src/model/EndCall.cpp index 7d5881d..b4ca64f 100644 --- a/src/model/EndCall.cpp +++ b/src/model/EndCall.cpp @@ -26,7 +26,7 @@ namespace callui { using namespace ucl; - EndCall::EndCall(CallManager &cm, ICallInfoSCRef callInfo): + EndCall::EndCall(CallManagerWRef cm, ICallInfoSCRef callInfo): m_cm(cm), m_callInfo(callInfo) { @@ -36,8 +36,12 @@ namespace callui { { } - EndCallSRef EndCall::newInstance(CallManager &cm, ICallInfoSCRef callInfo) + EndCallSRef EndCall::newInstance(CallManagerWRef cm, ICallInfoSCRef callInfo) { + if (!cm) { + LOG_RETURN_VALUE(RES_FAIL, {}, "cm is NULL"); + } + if (!callInfo) { LOG_RETURN_VALUE(RES_FAIL, {}, "callInfo is NULL"); } @@ -51,7 +55,10 @@ namespace callui { Result EndCall::callBack() { - return m_cm.dialVoiceCall(m_callInfo->getPhoneNumber()); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return m_cm->dialVoiceCall(m_callInfo->getPhoneNumber()); } Result EndCall::writeMessage() diff --git a/src/model/EndCall.h b/src/model/EndCall.h index ceff936..a89ac5d 100644 --- a/src/model/EndCall.h +++ b/src/model/EndCall.h @@ -29,7 +29,7 @@ namespace callui { class EndCall final : public IEndCall { public: - static EndCallSRef newInstance(CallManager &cm, ICallInfoSCRef callInfo); + static EndCallSRef newInstance(CallManagerWRef cm, ICallInfoSCRef callInfo); virtual ~EndCall(); @@ -41,12 +41,12 @@ namespace callui { private: friend class ucl::RefCountObj; - EndCall(CallManager &cm, ICallInfoSCRef callInfo); + EndCall(CallManagerWRef cm, ICallInfoSCRef callInfo); ucl::Result prepare(); private: - CallManager &m_cm; + CallManagerWRef m_cm; ICallInfoSCRef m_callInfo; }; diff --git a/src/model/HeldCall.cpp b/src/model/HeldCall.cpp index 8bc5604..89cbc53 100644 --- a/src/model/HeldCall.cpp +++ b/src/model/HeldCall.cpp @@ -27,7 +27,7 @@ namespace callui { using namespace ucl; - HeldCall::HeldCall(CallManager &cm, cm_call_data_h callData): + HeldCall::HeldCall(CallManagerWRef cm, cm_call_data_h callData): m_cm(cm) { } @@ -36,8 +36,12 @@ namespace callui { { } - HeldCallSRef HeldCall::newInstance(CallManager &cm, cm_call_data_h callData) + HeldCallSRef HeldCall::newInstance(CallManagerWRef cm, cm_call_data_h callData) { + if (!cm) { + LOG_RETURN_VALUE(RES_FAIL, {}, "cm is NULL"); + } + if (!callData) { LOG_RETURN_VALUE(RES_FAIL, {}, "callData is NULL"); } @@ -49,7 +53,7 @@ namespace callui { Result HeldCall::prepare(cm_call_data_h callData) { - m_callInfo = CallInfo::newInstance(*m_cm.getCallClient(), callData); + m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData); if (!m_callInfo) { LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!"); } @@ -63,27 +67,42 @@ namespace callui { Result HeldCall::unhold() { - return convertCMResult(cm_unhold_call(*m_cm.getCallClient())); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return convertCMResult(cm_unhold_call(m_cm->getCallClient())); } Result HeldCall::joinWithActive() { - return convertCMResult(cm_join_call(*m_cm.getCallClient())); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return convertCMResult(cm_join_call(m_cm->getCallClient())); } Result HeldCall::swapWithActive() { - return convertCMResult(cm_swap_call(*m_cm.getCallClient())); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return convertCMResult(cm_swap_call(m_cm->getCallClient())); } Result HeldCall::end() { - return m_cm.endCall(0, CallReleaseType::ALL_HOLD); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return m_cm->endCall(0, CallReleaseType::ALL_HOLD); } Result HeldCall::split(const IConferenceCallInfoSCRef &confCallInfo) { - return m_cm.splitCalls(m_callInfo, confCallInfo); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return m_cm->splitCalls(m_callInfo, confCallInfo); } } diff --git a/src/model/HeldCall.h b/src/model/HeldCall.h index 609c419..b7ed8d7 100644 --- a/src/model/HeldCall.h +++ b/src/model/HeldCall.h @@ -27,7 +27,7 @@ namespace callui { class HeldCall final : public IHeldCall { public: - static HeldCallSRef newInstance(CallManager &cm, cm_call_data_h callData); + static HeldCallSRef newInstance(CallManagerWRef cm, cm_call_data_h callData); virtual ~HeldCall(); // IHeldCall @@ -41,12 +41,12 @@ namespace callui { private: friend class ucl::RefCountObj; - HeldCall(CallManager &cm, cm_call_data_h callData); + HeldCall(CallManagerWRef cm, cm_call_data_h callData); ucl::Result prepare(cm_call_data_h callData); private: - CallManager &m_cm; + CallManagerWRef m_cm; CallInfoSRef m_callInfo; }; diff --git a/src/model/IncomingCall.cpp b/src/model/IncomingCall.cpp index 0af24bf..fc51eea 100644 --- a/src/model/IncomingCall.cpp +++ b/src/model/IncomingCall.cpp @@ -29,7 +29,7 @@ namespace callui { using namespace ucl; - IncomingCall::IncomingCall(CallManager &cm, cm_call_data_h callData): + IncomingCall::IncomingCall(CallManagerWRef cm, cm_call_data_h callData): m_cm(cm) { } @@ -38,8 +38,12 @@ namespace callui { { } - IncomingCallSRef IncomingCall::newInstance(CallManager &cm, cm_call_data_h callData) + IncomingCallSRef IncomingCall::newInstance(CallManagerWRef cm, cm_call_data_h callData) { + if (!cm) { + LOG_RETURN_VALUE(RES_FAIL, {}, "cm is NULL"); + } + if (!callData) { LOG_RETURN_VALUE(RES_FAIL, {}, "callData is NULL"); } @@ -51,7 +55,7 @@ namespace callui { Result IncomingCall::prepare(cm_call_data_h callData) { - m_callInfo = CallInfo::newInstance(*m_cm.getCallClient(), callData); + m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData); if (!m_callInfo) { LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!"); } @@ -66,17 +70,26 @@ namespace callui { IRejectMsgProviderSRef IncomingCall::getRejectMsgProvider() const { - return m_cm.getRejectMsgProvider(); + if (!m_cm) { + LOG_RETURN_VALUE(RES_FAIL, {}, "Call Manager is NULL"); + } + return m_cm->getRejectMsgProvider(); } Result IncomingCall::answer(CallAnswerType type) { - return convertCMResult(cm_answer_call(*m_cm.getCallClient(), convertCUICallAnswerType(type))); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return convertCMResult(cm_answer_call(m_cm->getCallClient(), convertCUICallAnswerType(type))); } Result IncomingCall::reject() { - return convertCMResult(cm_reject_call(*m_cm.getCallClient())); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return convertCMResult(cm_reject_call(m_cm->getCallClient())); } Result IncomingCall::rejectWithMessage(IRejectMsgSRef message) @@ -87,13 +100,19 @@ namespace callui { if (!msg) { LOG_RETURN(RES_FAIL, "message is not RejectMsg type!"); } - return msg->send(m_callInfo->getPhoneNumber(), m_cm.getSimSlot()); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return msg->send(m_callInfo->getPhoneNumber(), m_cm->getSimSlot()); } Result IncomingCall::stopAlert() { - return convertCMResult(cm_stop_alert(*m_cm.getCallClient())); + if (!m_cm) { + LOG_RETURN(RES_FAIL, "Call Manager is NULL"); + } + return convertCMResult(cm_stop_alert(m_cm->getCallClient())); } } diff --git a/src/model/IncomingCall.h b/src/model/IncomingCall.h index cfa3742..cfd0291 100644 --- a/src/model/IncomingCall.h +++ b/src/model/IncomingCall.h @@ -27,7 +27,7 @@ namespace callui { class IncomingCall final : public IIncomingCall { public: - static IncomingCallSRef newInstance(CallManager &cm, cm_call_data_h callData); + static IncomingCallSRef newInstance(CallManagerWRef cm, cm_call_data_h callData); virtual ~IncomingCall(); @@ -42,12 +42,12 @@ namespace callui { private: friend class ucl::RefCountObj; - IncomingCall(CallManager &cm, cm_call_data_h callData); + IncomingCall(CallManagerWRef cm, cm_call_data_h callData); ucl::Result prepare(cm_call_data_h callData); private: - CallManager &m_cm; + CallManagerWRef m_cm; CallInfoSRef m_callInfo; }; diff --git a/src/model/RejectMsg.cpp b/src/model/RejectMsg.cpp index 0a658f7..93f79f6 100644 --- a/src/model/RejectMsg.cpp +++ b/src/model/RejectMsg.cpp @@ -27,7 +27,7 @@ namespace callui { using namespace ucl; - RejectMsg::RejectMsg(MsgClientSRef client, const TString &string): + RejectMsg::RejectMsg(MsgClientWRef client, const TString &string): m_msgClient(client), m_msg(string) { @@ -37,7 +37,7 @@ namespace callui { { } - RejectMsgSRef RejectMsg::newInstance(MsgClientSRef client, const TString &string) + RejectMsgSRef RejectMsg::newInstance(MsgClientWRef client, const TString &string) { return makeShared(client, string); } diff --git a/src/model/RejectMsg.h b/src/model/RejectMsg.h index 9df6e6e..e2dbed0 100644 --- a/src/model/RejectMsg.h +++ b/src/model/RejectMsg.h @@ -27,7 +27,7 @@ namespace callui { class RejectMsg : public IRejectMsg { public: - static RejectMsgSRef newInstance(MsgClientSRef client, const ucl::TString &string); + static RejectMsgSRef newInstance(MsgClientWRef client, const ucl::TString &string); virtual ~RejectMsg(); ucl::Result send(const std::string &number, SimSlot slot); @@ -37,7 +37,7 @@ namespace callui { private: friend class ucl::RefCountObj; - RejectMsg(MsgClientSRef client, const ucl::TString &string); + RejectMsg(MsgClientWRef client, const ucl::TString &string); ucl::Result prepare();