namespace callui {
class ICallDialer: public ucl::Polymorphic {
- public:
- using DialStatusHandler = ucl::Delegate<void(DialStatus)>;
-
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;
};
}
CANCEL,
FAIL,
FAIL_SS,
- FDN,
+ FAIL_FDN,
FLIGHT_MODE
};
using CallStateHandler = ucl::Delegate<void(CallEventType)>;
+ using DialStatusHandler = ucl::Delegate<void(DialStatus)>;
+
using AudioStateHandler = ucl::Delegate<void(AudioStateType)>;
using MuteStateHandler = ucl::Delegate<void(bool)>;
#undef UCL_LOG_TAG
#define UCL_LOG_TAG "CALLUI"
+#define TEL_NUMBER_MAX_SIZE 82
+
#endif // __CALLUI_COMMON_H__
#include "CallDialer.h"
#include "CallManager.h"
+#include "CallClient.h"
#include "common.h"
+#include "helpers.h"
namespace callui {
CallDialer::~CallDialer()
{
+ cm_unset_dial_status_cb(*(m_cm.getCallClient()));
}
CallDialerSRef CallDialer::newInstance(CallManager &cm)
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;
}
}
#ifndef __CALLUI_MODEL_CALL_DIALER_H__
#define __CALLUI_MODEL_CALL_DIALER_H__
-#include "types.h"
+#include <call-manager-ext.h>
#include "model/ICallDialer.h"
// 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>;
CallDialer(CallManager &cm);
+ ucl::Result prepare();
+ void DialStatusChangedCb(cm_dial_status_e dial_status);
+
private:
CallManager &m_cm;
+ DialStatusEvent m_event;
};
}
#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 {
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"
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;
+ }
+ }
}
using CallStateEvent = ucl::Event<CallStateHandler>;
using AudioStateEvent = ucl::Event<AudioStateHandler>;
using MuteStateEvent = ucl::Event<MuteStateHandler>;
+ using DialStatusEvent = ucl::Event<DialStatusHandler>;
}
#endif // __CALLUI_MODEL_IMPL_TYPES_H__