#include <glib.h>
#include <mm_error.h>
#include <mm_debug.h>
+#include <vconf.h>
#include "include/mm_sound.h"
#include "include/mm_sound_client.h"
#define CLIENT_HANDLE_MAX 256
#define VOLUME_TYPE_LEN 64
+#define VOLUME_MAX_MULTIMEDIA 16
+#define VOLUME_MAX_BASIC 8
+
+#define VCONF_KEY_VOLUME_PREFIX "file/private/sound/volume"
+#define VCONF_KEY_VOLUME_TYPE_SYSTEM VCONF_KEY_VOLUME_PREFIX"/system"
+#define VCONF_KEY_VOLUME_TYPE_NOTIFICATION VCONF_KEY_VOLUME_PREFIX"/notification"
+#define VCONF_KEY_VOLUME_TYPE_ALARM VCONF_KEY_VOLUME_PREFIX"/alarm"
+#define VCONF_KEY_VOLUME_TYPE_RINGTONE VCONF_KEY_VOLUME_PREFIX"/ringtone"
+#define VCONF_KEY_VOLUME_TYPE_MEDIA VCONF_KEY_VOLUME_PREFIX"/media"
+#define VCONF_KEY_VOLUME_TYPE_CALL VCONF_KEY_VOLUME_PREFIX"/call"
+#define VCONF_KEY_VOLUME_TYPE_VOIP VCONF_KEY_VOLUME_PREFIX"/voip"
+#define VCONF_KEY_VOLUME_TYPE_VOICE VCONF_KEY_VOLUME_PREFIX"/voice"
+#define VCONF_KEY_VOLUME_TYPE_ANDROID VCONF_KEY_VOLUME_PREFIX"/fixed"
+
+#define VCONF_KEY_MUTE_PREFIX "file/private/sound/mute"
+#define VCONF_KEY_MUTE_TYPE_SYSTEM VCONF_KEY_MUTE_PREFIX"/system"
+#define VCONF_KEY_MUTE_TYPE_NOTIFICATION VCONF_KEY_MUTE_PREFIX"/notification"
+#define VCONF_KEY_MUTE_TYPE_ALARM VCONF_KEY_MUTE_PREFIX"/alarm"
+#define VCONF_KEY_MUTE_TYPE_RINGTONE VCONF_KEY_MUTE_PREFIX"/ringtone"
+#define VCONF_KEY_MUTE_TYPE_MEDIA VCONF_KEY_MUTE_PREFIX"/media"
+#define VCONF_KEY_MUTE_TYPE_CALL VCONF_KEY_MUTE_PREFIX"/call"
+#define VCONF_KEY_MUTE_TYPE_VOIP VCONF_KEY_MUTE_PREFIX"/voip"
+#define VCONF_KEY_MUTE_TYPE_VOICE VCONF_KEY_MUTE_PREFIX"/voice"
+
+static char *g_volume_vconf[VOLUME_TYPE_MAX] = {
+ VCONF_KEY_VOLUME_TYPE_SYSTEM, /* VOLUME_TYPE_SYSTEM */
+ VCONF_KEY_VOLUME_TYPE_NOTIFICATION, /* VOLUME_TYPE_NOTIFICATION */
+ VCONF_KEY_VOLUME_TYPE_ALARM, /* VOLUME_TYPE_ALARM */
+ VCONF_KEY_VOLUME_TYPE_RINGTONE, /* VOLUME_TYPE_RINGTONE */
+ VCONF_KEY_VOLUME_TYPE_MEDIA, /* VOLUME_TYPE_MEDIA */
+ VCONF_KEY_VOLUME_TYPE_CALL, /* VOLUME_TYPE_CALL */
+ VCONF_KEY_VOLUME_TYPE_VOIP, /* VOLUME_TYPE_VOIP */
+ VCONF_KEY_VOLUME_TYPE_VOICE, /* VOLUME_TYPE_VOICE */
+ VCONF_KEY_VOLUME_TYPE_ANDROID /* VOLUME_TYPE_FIXED */
+};
+
+static char *g_mute_vconf[] = {
+ VCONF_KEY_MUTE_TYPE_SYSTEM, /* MUTE_TYPE_SYSTEM */
+ VCONF_KEY_MUTE_TYPE_NOTIFICATION, /* MUTE_TYPE_NOTIFICATION */
+ VCONF_KEY_MUTE_TYPE_ALARM, /* MUTE_TYPE_ALARM */
+ VCONF_KEY_MUTE_TYPE_RINGTONE, /* MUTE_TYPE_RINGTONE */
+ VCONF_KEY_MUTE_TYPE_MEDIA, /* MUTE_TYPE_MEDIA */
+ VCONF_KEY_MUTE_TYPE_CALL, /* MUTE_TYPE_CALL */
+ VCONF_KEY_MUTE_TYPE_VOIP, /* MUTE_TYPE_VOIP */
+ VCONF_KEY_MUTE_TYPE_VOICE, /* MUTE_TYPE_VOICE */
+};
+
+static char *g_volume_str[VOLUME_TYPE_MAX] = {
+ "SYSTEM",
+ "NOTIFICATION",
+ "ALARM",
+ "RINGTONE",
+ "MEDIA",
+ "CALL",
+ "VOIP",
+ "VOICE",
+ "FIXED",
+};
struct callback_data {
void *user_cb;
int data;
} focus_idle_event_t;
+static int _validate_volume(volume_type_t type, int level)
+{
+ if (level < 0)
+ return -1;
+
+ switch (type) {
+ case VOLUME_TYPE_CALL:
+ case VOLUME_TYPE_VOIP:
+ if (level >= VOLUME_MAX_BASIC) {
+ return -1;
+ }
+ break;
+ case VOLUME_TYPE_SYSTEM:
+ case VOLUME_TYPE_MEDIA:
+ case VOLUME_TYPE_ALARM:
+ case VOLUME_TYPE_NOTIFICATION:
+ case VOLUME_TYPE_RINGTONE:
+ case VOLUME_TYPE_VOICE:
+ if (level >= VOLUME_MAX_MULTIMEDIA) {
+ return -1;
+ }
+ break;
+ default:
+ return -1;
+ break;
+ }
+ return 0;
+}
+
int mm_sound_client_initialize(void)
{
int ret = MM_ERROR_NONE;
return ret;
}
-int mm_sound_client_set_volume_by_type(const int volume_type, const unsigned int volume_level)
+int mm_sound_client_set_volume_by_type(volume_type_t type, const unsigned int level)
{
int ret = MM_ERROR_NONE;
char *type_str = NULL;
debug_fenter();
- if ((ret = __convert_volume_type_to_str(volume_type, &type_str)) != MM_ERROR_NONE) {
+ if (type >= VOLUME_TYPE_MAX) {
+ debug_error("invalid volume type %d", type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ /* Check input param */
+ if (0 > _validate_volume(type, (int)level)) {
+ debug_error("invalid level %u of %s", level, g_volume_str[type]);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ if ((ret = __convert_volume_type_to_str(type, &type_str)) != MM_ERROR_NONE) {
debug_error("volume type convert failed");
goto failed;
}
- ret = mm_sound_proxy_set_volume_by_type(type_str, volume_level);
+ ret = mm_sound_proxy_set_volume_by_type(type_str, level);
failed:
debug_fleave();
return ret;
}
+int mm_sound_client_get_volume_by_type(volume_type_t type, unsigned int *level)
+{
+ int ret = MM_ERROR_NONE;
+ int vconf_value = 0;
+
+ if (level == NULL) {
+ debug_error("invalid argument, level is null");
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ if (type >= VOLUME_TYPE_MAX) {
+ debug_error("invalid volume type %d", type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ /* Get volume value from VCONF */
+ if (vconf_get_int(g_volume_vconf[type], &vconf_value)) {
+ debug_error("vconf_get_int(%s) failed..\n", g_volume_vconf[type]);
+ return MM_ERROR_SOUND_INTERNAL;
+ }
+
+ *level = vconf_value;
+
+ return ret;
+}
+
static void _mm_sound_volume_changed_callback_wrapper_func(const char *direction, const char *volume_type_str,
int volume_level, void *userdata)
{
return ret;
}
+int mm_sound_client_set_mute_by_type(volume_type_t type, bool mute)
+{
+ int ret = MM_ERROR_NONE;
+ char *type_str = NULL;
+
+ debug_fenter();
+
+ if (type > VOLUME_TYPE_VOICE) {
+ debug_error("invalid volume type %d", type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ if ((ret = __convert_volume_type_to_str(type, &type_str)) != MM_ERROR_NONE) {
+ debug_error("volume type convert failed");
+ goto failed;
+ }
+
+ ret = mm_sound_proxy_set_mute_by_type(type_str, mute);
+
+failed:
+ debug_fleave();
+ return ret;
+}
+
+int mm_sound_client_get_mute_by_type(volume_type_t type, bool *muted)
+{
+ int ret = MM_ERROR_NONE;
+ int vconf_value = 0;
+
+ debug_fenter();
+
+ if (type > VOLUME_TYPE_VOICE) {
+ debug_error("invalid volume type %d", type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ /* Get mute state from VCONF */
+ if (vconf_get_bool(g_mute_vconf[type], &vconf_value)) {
+ debug_error("vconf_get_int(%s) failed..\n", g_mute_vconf[type]);
+ return MM_ERROR_SOUND_INTERNAL;
+ }
+
+ *muted = (bool)vconf_value;
+
+ debug_fleave();
+ return ret;
+}
+
int mm_sound_client_set_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group)
{
int ret = MM_ERROR_NONE;