Add support for AUDIO_METHOD_UPDATE_STREAM_FOCUS_STATUS to update stream focus status... 26/118626/5
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 13 Mar 2017 08:54:48 +0000 (17:54 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 14 Mar 2017 04:34:42 +0000 (13:34 +0900)
[Version] 0.10.98
[Profile] Common
[Issue Type] Add feature

Change-Id: Iefff4c4b0acd32c3c6a327e01c43a3fc03892cd0
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
common/mm_sound_dbus.c
include/mm_sound_client.h
include/mm_sound_focus.h
include/mm_sound_intf.h
include/mm_sound_proxy.h
mm_sound_client.c
mm_sound_device.c
mm_sound_focus.c
mm_sound_proxy.c
packaging/libmm-sound.spec

index 600d583..d3ecf1c 100644 (file)
@@ -105,6 +105,9 @@ const mm_sound_dbus_method_info_t g_methods[AUDIO_METHOD_MAX] = {
        [AUDIO_METHOD_RELEASE_FOCUS] = {
                .name = "ReleaseFocus",
        },
+       [AUDIO_METHOD_UPDATE_STREAM_FOCUS_STATUS] = {
+               .name = "UpdateFocusStatusByFocusId",
+       },
        [AUDIO_METHOD_WATCH_FOCUS] = {
                .name = "WatchFocus",
        },
index cd777ca..bf94720 100644 (file)
@@ -65,6 +65,7 @@ int mm_sound_client_get_focus_reacquisition(int id, bool *reacquisition);
 int mm_sound_client_get_acquired_focus_stream_type(int focus_type, char **stream_type, int *option, char **ext_info);
 int mm_sound_client_acquire_focus(int id, mm_sound_focus_type_e type, int option, const char *ext_info);
 int mm_sound_client_release_focus(int id, mm_sound_focus_type_e type, int option, const char *ext_info);
+int mm_sound_client_update_stream_focus_status(int id, unsigned int status);
 int mm_sound_client_set_focus_watch_callback(int pid, mm_sound_focus_type_e type, mm_sound_focus_changed_watch_cb callback, bool is_for_session, void* user_data, int *id);
 int mm_sound_client_unset_focus_watch_callback(int id);
 int mm_sound_client_execute_focus_func_in_main_context(focus_idle_event_type_e type, int data);
index 7fa6962..462e29a 100644 (file)
@@ -60,6 +60,7 @@ int mm_sound_acquire_focus(int id, mm_sound_focus_type_e focus_type, const char
 int mm_sound_release_focus(int id, mm_sound_focus_type_e focus_type, const char *ext_info);
 int mm_sound_acquire_focus_with_option(int id, mm_sound_focus_type_e focus_type, int option, const char *ext_info);
 int mm_sound_release_focus_with_option(int id, mm_sound_focus_type_e focus_type, int option, const char *ext_info);
+int mm_sound_update_focus_status(int id, unsigned int status);
 
 typedef void (*mm_sound_focus_changed_watch_cb) (int id, mm_sound_focus_type_e focus_type, mm_sound_focus_state_e state, const char *reason_for_change, const char *ext_info, void *user_data);
 int mm_sound_set_focus_watch_callback(mm_sound_focus_type_e focus_type, mm_sound_focus_changed_watch_cb callback, void *user_data, int *id);
index b562f8f..63a4ab1 100644 (file)
@@ -50,7 +50,7 @@ typedef enum audio_method {
        AUDIO_METHOD_PLAY_FILE_STOP,
        AUDIO_METHOD_PLAY_DTMF,
        AUDIO_METHOD_PLAY_DTMF_WITH_STREAM_INFO,
-       AUDIO_METHOD_CLEAR_FOCUS, // Not original focus feature, only for tone/wav player internal focus usage.
+       AUDIO_METHOD_CLEAR_FOCUS, /* Not original focus feature, only for tone/wav player internal focus usage. */
        AUDIO_METHOD_GET_BT_A2DP_STATUS,
        AUDIO_METHOD_SET_PATH_FOR_ACTIVE_DEVICE,
        AUDIO_METHOD_GET_CONNECTED_DEVICE_LIST,
@@ -65,6 +65,7 @@ typedef enum audio_method {
        AUDIO_METHOD_GET_ACQUIRED_FOCUS_STREAM_TYPE,
        AUDIO_METHOD_ACQUIRE_FOCUS,
        AUDIO_METHOD_RELEASE_FOCUS,
+       AUDIO_METHOD_UPDATE_STREAM_FOCUS_STATUS, /* It communicates with stream-manager to update focus status. */
        AUDIO_METHOD_WATCH_FOCUS,
        AUDIO_METHOD_UNWATCH_FOCUS,
 
index e79d7ef..e2f5abf 100644 (file)
@@ -73,6 +73,7 @@ int mm_sound_proxy_set_foucs_reacquisition(int instance, int id, bool reacquisit
 int mm_sound_proxy_get_acquired_focus_stream_type(int focus_type, char **stream_type, int *option, char **ext_info);
 int mm_sound_proxy_acquire_focus(int instance, int id, mm_sound_focus_type_e type, int option, const char *ext_info, bool is_for_session);
 int mm_sound_proxy_release_focus(int instance, int id, mm_sound_focus_type_e type, int option, const char *ext_info, bool is_for_session);
+int mm_sound_proxy_update_stream_focus_status(int focus_id, unsigned int status);
 int mm_sound_proxy_set_focus_watch_callback(int instance, int handle, mm_sound_focus_type_e type, mm_sound_focus_changed_watch_cb callback, bool is_for_session, void *user_data);
 int mm_sound_proxy_unset_focus_watch_callback(int focus_tid, int handle, bool is_for_session);
 #endif
index d17ca43..8ee3d5d 100644 (file)
@@ -1797,6 +1797,7 @@ int mm_sound_client_set_focus_reacquisition(int id, bool reacquisition)
        }
 
        g_focus_sound_handle[index].auto_reacquire = reacquisition;
+       debug_msg("[Client] set focus reacquisition(%d) for id(%d)\n", reacquisition, id);
 
 cleanup:
        MMSOUND_LEAVE_CRITICAL_SECTION(&g_index_mutex);
@@ -1826,6 +1827,7 @@ int mm_sound_client_get_focus_reacquisition(int id, bool *reacquisition)
        }
 
        *reacquisition = g_focus_sound_handle[index].auto_reacquire;
+       debug_msg("[Client] get focus reacquisition(%d) for id(%d)\n", *reacquisition, id);
 
 cleanup:
        MMSOUND_LEAVE_CRITICAL_SECTION(&g_index_mutex);
@@ -1912,6 +1914,18 @@ cleanup:
        return ret;
 }
 
+int mm_sound_client_update_stream_focus_status(int id, unsigned int status)
+{
+       int ret = MM_ERROR_NONE;
+       debug_fenter();
+
+       if ((ret = mm_sound_proxy_update_stream_focus_status(id, status)) != MM_ERROR_NONE)
+               debug_error("[Client] failed to update stream focus status, ret[0x%x]", ret);
+
+       debug_fleave();
+       return ret;
+}
+
 int mm_sound_client_set_focus_watch_callback(int pid, mm_sound_focus_type_e focus_type,
                                                                                        mm_sound_focus_changed_watch_cb callback,
                                                                                        bool is_for_session, void* user_data, int *id)
index c929cac..da59a1e 100644 (file)
@@ -442,5 +442,3 @@ int mm_sound_is_stream_on_device(int stream_id, MMSoundDevice_t device_h, bool *
 
        return ret;
 }
-
-
index fd59962..53442ad 100644 (file)
@@ -378,6 +378,18 @@ int mm_sound_release_focus_with_option(int id, mm_sound_focus_type_e focus_type,
 }
 
 EXPORT_API
+int mm_sound_update_focus_status(int id, unsigned int status)
+{
+       int ret = MM_ERROR_NONE;
+
+       if ((ret = mm_sound_client_update_stream_focus_status(id, status)))
+               debug_error("failed to mm_sound_client_update_stream_focus_status(), id(%d), status(%d, ret[0x%x]\n",
+                                       id, status, ret);
+
+       return ret;
+}
+
+EXPORT_API
 int mm_sound_set_focus_watch_callback(mm_sound_focus_type_e focus_type, mm_sound_focus_changed_watch_cb callback, void *user_data, int *id)
 {
        int ret = MM_ERROR_NONE;
@@ -439,7 +451,7 @@ int mm_sound_unset_focus_watch_callback(int id)
        mm_sound_client_is_focus_cb_thread(g_thread_self(), &result);
        if (!result) {
                if ((ret = mm_sound_client_unset_focus_watch_callback(id)))
-                       debug_error("Could not unset focus watch callback, id(%d), ret = %x\n", id, ret);
+                       debug_error("Could not unset focus watch callback, id(%d), ret[0x%x]\n", id, ret);
        } else {
                ret = mm_sound_client_execute_focus_func_in_main_context(IDLE_EVENT_TYPE_UNSET_FOCUS_WATCH_CB, id);
        }
index 552614a..ea2e1d9 100644 (file)
@@ -1007,6 +1007,42 @@ int mm_sound_proxy_release_focus(int instance, int id, mm_sound_focus_type_e typ
        return ret;
 }
 
+int mm_sound_proxy_update_stream_focus_status(int focus_id, unsigned int status)
+{
+       int ret = MM_ERROR_NONE;
+       char *reply = NULL;
+       GVariant *params = NULL, *result = NULL;
+
+       debug_fenter();
+
+       params = g_variant_new("(iu)", focus_id, status);
+       if (params) {
+               if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_UPDATE_STREAM_FOCUS_STATUS, params, &result)) != MM_ERROR_NONE) {
+                       debug_error("dbus set volume by type failed");
+                       goto cleanup;
+               }
+       } else {
+               debug_error("Construct Param for method call failed");
+               return MM_ERROR_SOUND_INTERNAL;
+       }
+
+       if (result) {
+               g_variant_get(result, "(&s)",  &reply);
+               debug_log("reply : %s", reply);
+               if (!strcmp(reply, "STREAM_MANAGER_RETURN_ERROR"))
+                       ret = MM_ERROR_SOUND_INTERNAL;
+       } else {
+               debug_error("reply null");
+       }
+
+cleanup:
+       if (result)
+               g_variant_unref(result);
+
+       debug_fleave();
+       return ret;
+}
+
 int mm_sound_proxy_set_focus_watch_callback(int instance, int handle, mm_sound_focus_type_e type, mm_sound_focus_changed_watch_cb callback, bool is_for_session, void* userdata)
 {
        int ret = MM_ERROR_NONE;
index b9de7fa..979d10f 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-sound
 Summary:    MMSound Package contains client lib and sound_server binary
-Version:    0.10.97
+Version:    0.10.98
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0