namespace callui {
class ISoundManager: public ucl::Polymorphic {
- public:
- using AudioStateHandler = ucl::Delegate<void(AudioStateType)>;
- using MuteStateHandler = ucl::Delegate<void(bool)>;
-
public:
virtual ucl::Result setSpeakerState(bool isEnable) = 0;
virtual ucl::Result setBluetoothState(bool isEnable) = 0;
virtual bool getMuteState() const = 0;
virtual ucl::Result startDtmf(const unsigned char dtmfDigit) = 0;
virtual ucl::Result stopDtmf() = 0;
- virtual ucl::Result addAudioStateChangeHandler(AudioStateHandler handler) = 0;
- virtual ucl::Result removeAudioStateChangeHandler(AudioStateHandler handler) = 0;
- virtual ucl::Result addMuteStateChangeHandler(MuteStateHandler handler) = 0;
- virtual ucl::Result removeMuteStateChangeHandler(MuteStateHandler handler) = 0;
+ virtual void addAudioStateChangeHandler(AudioStateHandler handler) = 0;
+ virtual void removeAudioStateChangeHandler(AudioStateHandler handler) = 0;
+ virtual void addMuteStateChangeHandler(MuteStateHandler handler) = 0;
+ virtual void removeMuteStateChangeHandler(MuteStateHandler handler) = 0;
};
}
#include "CallClient.h"
#include "common.h"
+#include "helpers.h"
namespace callui {
SoundManager::~SoundManager()
{
+ cm_unset_audio_state_changed_cb(*m_client);
+ cm_unset_mute_status_cb(*m_client);
}
SoundManagerSRef SoundManager::newInstance(const CallClientSRef &client)
return result;
}
+ void SoundManager::audioStateChangedCb(cm_audio_state_type_e state)
+ {
+ if (state == CM_AUDIO_STATE_NONE_E) {
+ ELOG("Unhandled state [%d]", state);
+ return;
+ }
+
+ m_audioStateEvent.invoke(convertCallManagerAudioState(state));
+ }
+
+ void SoundManager::muteStateChangedCb(cm_mute_status_e status)
+ {
+ m_muteStateEvent.invoke(status == CM_MUTE_STATUS_ON);
+ }
+
Result SoundManager::prepare()
{
- return RES_OK;
+ Result res = convertCallManagerResult(cm_set_audio_state_changed_cb(*m_client, CALLBACK_B(SoundManager::audioStateChangedCb), this));
+ FAIL_RETURN_VALUE(res, res, "cm_set_audio_state_changed_cb() failed!");
+
+ res = convertCallManagerResult(cm_set_mute_status_cb(*m_client, CALLBACK_B(SoundManager::muteStateChangedCb), this));
+ FAIL_RETURN_VALUE(res, res, "__callui_mute_state_changed_cb() failed!");
+
+ return res;
}
Result SoundManager::setSpeakerState(bool isEnable)
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ if (isEnable) {
+ return convertCallManagerResult(cm_speaker_on(*m_client));
+ } else {
+ return convertCallManagerResult(cm_speaker_off(*m_client));
+ }
}
Result SoundManager::setBluetoothState(bool isEnable)
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ if (isEnable) {
+ return convertCallManagerResult(cm_bluetooth_on(*m_client));
+ } else {
+ return convertCallManagerResult(cm_bluetooth_off(*m_client));
+ }
}
AudioStateType SoundManager::getAudioState() const
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ cm_audio_state_type_e state = CM_AUDIO_STATE_NONE_E;
+ Result res = convertCallManagerResult(cm_get_audio_state(*m_client, &state));
+ FAIL_RETURN_VALUE(res, AudioStateType::NONE, "cm_get_audio_state() failed!");
+
+ return convertCallManagerAudioState(state);
}
Result SoundManager::setMuteState(bool isEnable)
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ return convertCallManagerResult(cm_set_mute_state(*m_client, isEnable));
}
bool SoundManager::getMuteState() const
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ cm_mute_status_e status = CM_MUTE_STATUS_MAX;
+ Result res = convertCallManagerResult(cm_get_mute_status(*m_client, &status));
+ FAIL_RETURN_VALUE(res, false, "cm_get_mute_status() failed!");
+
+ return (status == CM_MUTE_STATUS_ON);
}
Result SoundManager::startDtmf(const unsigned char dtmfDigit)
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ return convertCallManagerResult(cm_start_dtmf(*m_client, dtmfDigit));
}
Result SoundManager::stopDtmf()
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ return convertCallManagerResult(cm_stop_dtmf(*m_client));
}
- Result SoundManager::addAudioStateChangeHandler(AudioStateHandler handler)
+ void SoundManager::addAudioStateChangeHandler(AudioStateHandler handler)
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ m_audioStateEvent += handler;
}
- Result SoundManager::removeAudioStateChangeHandler(AudioStateHandler handler)
+ void SoundManager::removeAudioStateChangeHandler(AudioStateHandler handler)
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ m_audioStateEvent -= handler;
}
- Result SoundManager::addMuteStateChangeHandler(MuteStateHandler handler)
+ void SoundManager::addMuteStateChangeHandler(MuteStateHandler handler)
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ m_muteStateEvent += handler;
}
- Result SoundManager::removeMuteStateChangeHandler(MuteStateHandler handler)
+ void SoundManager::removeMuteStateChangeHandler(MuteStateHandler handler)
{
- UCL_ASSERT(0, "!!! NOT IMPLEMENTED !!!");
+ m_muteStateEvent -= handler;
}
}
#ifndef __CALLUI_MODEL_SOUND_MANAGER_H__
#define __CALLUI_MODEL_SOUND_MANAGER_H__
+#include <call-manager-ext.h>
+
#include "model/ISoundManager.h"
#include "implTypes.h"
static SoundManagerSRef newInstance(const CallClientSRef &client);
virtual ~SoundManager();
+ // ISoundManager
+
virtual ucl::Result setSpeakerState(bool isEnable) override final;
virtual ucl::Result setBluetoothState(bool isEnable) override final;
virtual AudioStateType getAudioState() const override final;
virtual bool getMuteState() const override final;
virtual ucl::Result startDtmf(const unsigned char dtmfDigit) override final;
virtual ucl::Result stopDtmf() override final;
- virtual ucl::Result addAudioStateChangeHandler(AudioStateHandler handler) override final;
- virtual ucl::Result removeAudioStateChangeHandler(AudioStateHandler handler) override final;
- virtual ucl::Result addMuteStateChangeHandler(MuteStateHandler handler) override final;
- virtual ucl::Result removeMuteStateChangeHandler(MuteStateHandler handler) override final;
+ virtual void addAudioStateChangeHandler(AudioStateHandler handler) override final;
+ virtual void removeAudioStateChangeHandler(AudioStateHandler handler) override final;
+ virtual void addMuteStateChangeHandler(MuteStateHandler handler) override final;
+ virtual void removeMuteStateChangeHandler(MuteStateHandler handler) override final;
private:
friend class ucl::RefCountObj<SoundManager>;
SoundManager(const CallClientSRef &client);
ucl::Result prepare();
+ void audioStateChangedCb(cm_audio_state_type_e state);
+ void muteStateChangedCb(cm_mute_status_e status);
+
private:
CallClientSRef m_client;
+ AudioStateEvent m_audioStateEvent;
+ MuteStateEvent m_muteStateEvent;
};
}