#include "sound/sound_manager.h"
+#include <string>
+#include <map>
+
#include <tizen/tizen.h>
#include <vconf.h>
#include <vconf-keys.h>
SoundManager::SoundManager(SoundInstance& instance)
: is_volume_change_listener_(false),
soundModeChangeListening(false),
- sound_device_change_listener_(false),
+ is_sound_device_change_listener_(false),
instance_(instance),
soundModeListener(nullptr) {
FillMaxVolumeMap();
UnsetSoundModeChangeListener();
- if (sound_device_change_listener_) {
- if (SOUND_MANAGER_ERROR_NONE != sound_manager_unset_device_connected_cb()) {
- LoggerE("Cannot unregister connection listener!");
+ if (is_sound_device_change_listener_) {
+ if (SOUND_MANAGER_ERROR_NONE != sound_manager_remove_device_connection_changed_cb(sound_device_connection_listener_id_)) {
+ LoggerE("Cannot unregister connection listener id == %d", sound_device_connection_listener_id_);
}
- if (SOUND_MANAGER_ERROR_NONE != sound_manager_unset_device_information_changed_cb()) {
- LoggerE("Cannot unregister information listener!");
+ if (SOUND_MANAGER_ERROR_NONE != sound_manager_remove_device_state_changed_cb(sound_device_state_listener_id_)) {
+ LoggerE("Cannot unregister state listener id == %d", sound_device_state_listener_id_);
}
}
if (is_volume_change_listener_) {
- if (SOUND_MANAGER_ERROR_NONE != sound_manager_unset_volume_changed_cb()) {
- LoggerE("Cannot unregister volume listener!");
+ if (SOUND_MANAGER_ERROR_NONE != sound_manager_remove_volume_changed_cb(volume_change_listener_id_)) {
+ LoggerE("Cannot unregister volume listener id == %d", volume_change_listener_id_);
}
}
}
PlatformResult SoundManager::SetVolumeChangeListener() {
LoggerD("Enter");
if (!is_volume_change_listener_) {
- int ret = sound_manager_set_volume_changed_cb(
+ int ret = sound_manager_add_volume_changed_cb(
[](sound_type_e type, unsigned int value, void* ud) {
return static_cast<SoundManager*>(ud)
->VolumeChangeCallback(type, value);
},
- static_cast<void*>(this));
+ static_cast<void*>(this),
+ &volume_change_listener_id_
+ );
if (ret != SOUND_MANAGER_ERROR_NONE) {
return LogAndCreateResult(
return PlatformResult(ErrorCode::NO_ERROR);
}
- int ret = sound_manager_unset_volume_changed_cb();
+ int ret = sound_manager_remove_volume_changed_cb(volume_change_listener_id_);
if (ret != SOUND_MANAGER_ERROR_NONE) {
return LogAndCreateResult(
ErrorCode::UNKNOWN_ERR, "Failed to unset volume changed callback",
}
}
-void DeviceConnectionChangeCB(sound_device_h device, bool is_connected, void *user_data) {
+void DeviceConnectionChangedCB(sound_device_h device, bool is_connected, void *user_data) {
LoggerD("Entered");
+
SoundManager* h = static_cast<SoundManager*>(user_data);
h->DeviceChangeCB(device, is_connected, false);
}
-void DeviceActivationChangeCB(sound_device_h device, sound_device_changed_info_e changed_info,
+void DeviceStateChangedCB(sound_device_h device, sound_device_state_e unused,
void *user_data) {
LoggerD("Entered");
- if (SOUND_DEVICE_CHANGED_INFO_STATE == changed_info) {
- SoundManager* h = static_cast<SoundManager*>(user_data);
- h->DeviceChangeCB(device, false, true);
- }
+ SoundManager* h = static_cast<SoundManager*>(user_data);
+ h->DeviceChangeCB(device, false, true);
}
PlatformResult SoundManager::AddDeviceStateChangeListener() {
int ret = SOUND_MANAGER_ERROR_NONE;
sound_device_mask_e mask = SOUND_DEVICE_ALL_MASK;
- if (!sound_device_change_listener_) {
- ret = sound_manager_set_device_connected_cb(mask, DeviceConnectionChangeCB, this);
+ if (!is_sound_device_change_listener_) {
+ ret = sound_manager_add_device_connection_changed_cb(mask, DeviceConnectionChangedCB,
+ this, &sound_device_connection_listener_id_);
if (SOUND_MANAGER_ERROR_NONE != ret) {
return LogAndCreateResult(
ErrorCode::UNKNOWN_ERR, "Setting connection listener failed",
- ("sound_manager_set_device_connected_cb error: %d (%s)",
+ ("sound_manager_add_device_connection_changed_cb error: %d (%s)",
ret, get_error_message(ret)));
}
- ret = sound_manager_set_device_information_changed_cb(mask, DeviceActivationChangeCB, this);
+ ret = sound_manager_add_device_state_changed_cb(mask, DeviceStateChangedCB,
+ this, &sound_device_state_listener_id_);
if (SOUND_MANAGER_ERROR_NONE != ret) {
+ // silently cleanup connection changed callback registered in previous step
+ sound_manager_remove_device_connection_changed_cb(sound_device_connection_listener_id_);
return LogAndCreateResult(
- ErrorCode::UNKNOWN_ERR, "Setting information listener failed",
- ("sound_manager_set_device_information_changed_cb error: %d (%s)",
+ ErrorCode::UNKNOWN_ERR, "Setting state listener failed",
+ ("sound_manager_add_device_state_changed_cb error: %d (%s)",
ret, get_error_message(ret)));
}
- sound_device_change_listener_ = true;
+ is_sound_device_change_listener_ = true;
}
return PlatformResult(ErrorCode::NO_ERROR);
PlatformResult SoundManager::RemoveDeviceStateChangeListener() {
LoggerD("Entered");
- if (sound_device_change_listener_) {
- int ret = sound_manager_unset_device_connected_cb();
+ if (is_sound_device_change_listener_) {
+ int ret = sound_manager_remove_device_connection_changed_cb(sound_device_connection_listener_id_);
if (SOUND_MANAGER_ERROR_NONE != ret) {
return LogAndCreateResult(
- ErrorCode::UNKNOWN_ERR, "Unsetting information listener failed",
- ("sound_manager_unset_device_connected_cb error: %d (%s)", ret, get_error_message(ret)));
+ ErrorCode::UNKNOWN_ERR, "Removing connection listener failed",
+ ("sound_manager_remove_device_connection_changed_cb error: %d (%s)", ret, get_error_message(ret)));
}
- ret = sound_manager_unset_device_information_changed_cb();
+ ret = sound_manager_remove_device_state_changed_cb(sound_device_state_listener_id_);
if (SOUND_MANAGER_ERROR_NONE != ret) {
return LogAndCreateResult(
- ErrorCode::UNKNOWN_ERR, "Unsetting information listener failed",
- ("sound_manager_unset_device_information_changed_cb error: %d (%s)", ret, get_error_message(ret)));
+ ErrorCode::UNKNOWN_ERR, "Removing state listener failed",
+ ("sound_manager_remove_device_state_changed_cb error: %d (%s)", ret, get_error_message(ret)));
}
- sound_device_change_listener_ = false;
+ is_sound_device_change_listener_ = false;
}
return PlatformResult(ErrorCode::NO_ERROR);