Apply blocking policy in case of prepare() functions
[platform/core/api/audio-io.git] / src / cpp / CAudioSessionHandler.cpp
index f56d73e..771910e 100644 (file)
@@ -186,6 +186,22 @@ bool CAudioSessionHandler::__isFocusDisableReacquisitionRequired(MMSessionType t
     return false;
 }
 
+bool CAudioSessionHandler::__checkNeedBlock(const char *focus_acquired_by) {
+    assert(focus_acquired_by != NULL);
+
+    if (!strcmp(focus_acquired_by, "alarm") ||
+        !strcmp(focus_acquired_by, "ringtone-voip") ||
+        !strcmp(focus_acquired_by, "ringtone-call") ||
+        !strcmp(focus_acquired_by, "voip") ||
+        !strcmp(focus_acquired_by, "call-voice") ||
+        !strcmp(focus_acquired_by, "call-video")) {
+        AUDIO_IO_LOGW("Blocked by session policy, focus_acquired_by[%s]", focus_acquired_by);
+        return true;
+    }
+
+    return false;
+}
+
 int CAudioSessionHandler::getId() {
     return __mId;
 }
@@ -465,6 +481,8 @@ void CAudioSessionHandler::updatePlaying() {
     if (__mIsInit == false) {
         THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioSessionHandler");
     }
+    if (!__mUseFocus || __mId < 0)
+        return;
 
     if (__mUseFocus && __isFocusRequired(__mMultimediaSession, __mOptions)) {
         if (__mId >= 0) {
@@ -501,6 +519,24 @@ void CAudioSessionHandler::updatePlaying() {
             if (!is_focus_cb_thread)
                 __unlockFocusCBMutex();
         }
+    } else {
+        int ret = MM_ERROR_NONE;
+        char *stream_type = NULL;
+        char *ext_info = NULL;
+        int option = 0;
+
+        if ((ret = mm_sound_get_stream_type_of_acquired_focus(FOCUS_FOR_BOTH, &stream_type, &option, &ext_info)))
+            return;
+
+        AUDIO_IO_LOGD("Focus is acquired by stream_type[%s], option[%d], ext_info[%s]", stream_type, option, ext_info);
+
+        if (__checkNeedBlock((const char*)stream_type)) {
+            free(stream_type);
+            free(ext_info);
+            THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_POLICY_BLOCKED, "Blocked by an acquired focus");
+        }
+        free(stream_type);
+        free(ext_info);
     }
 }