2 * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <metadata_extractor.h>
23 #include "quickpanel-ui.h"
25 #define NEED_TO_DEBUG_LOCKUP_ISSUE
29 int is_feedback_initialized;
31 Ecore_Timer *playing_timer;
34 .playing_timer = NULL,
36 .is_feedback_initialized = 0,
39 static void _quickpanel_player_free(player_h *sound_player);
42 _quickpanel_player_del_timeout_timer(void)
44 if (s_info.playing_timer) {
45 ecore_timer_del(s_info.playing_timer);
46 s_info.playing_timer = NULL;
50 static Eina_Bool _quickpanel_player_timeout_cb(void *data)
52 s_info.playing_timer = NULL;
54 retif(data == NULL, ECORE_CALLBACK_CANCEL, "invalid parameter");
55 player_h *sound_player = data;
57 _quickpanel_player_free(sound_player);
58 s_info.playing_timer = NULL;
60 return ECORE_CALLBACK_CANCEL;
63 static void _quickpanel_player_free_job_cb(void *data)
65 player_h sound_player = data;
66 player_state_e state = PLAYER_STATE_NONE;
68 retif(sound_player == NULL, , "invalid parameter");
70 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
71 SERR("before stopping media");
73 if (player_get_state(sound_player, &state) == PLAYER_ERROR_NONE) {
75 INFO("the state of sound player %d", state);
77 if (state == PLAYER_STATE_PLAYING) {
78 player_stop(sound_player);
79 player_unprepare(sound_player);
81 if (state == PLAYER_STATE_READY) {
82 player_unprepare(sound_player);
85 player_destroy(sound_player);
86 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
87 SERR("after stopping media");
91 static void _quickpanel_player_free(player_h *sound_player)
93 retif(sound_player == NULL, , "invalid parameter");
94 retif(*sound_player == NULL, , "invalid parameter");
96 ecore_job_add(_quickpanel_player_free_job_cb, *sound_player);
100 static void _quickpanel_player_start_job_cb(void *data)
102 int ret = PLAYER_ERROR_NONE;
103 player_h *sound_player = data;
105 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
106 SERR("before playing media");
108 ret = player_start(*sound_player);
109 if (ret != PLAYER_ERROR_NONE) { /* if directly return retor.. */
110 ERR("player_start [%d]", ret);
111 _quickpanel_player_free(sound_player);
114 s_info.playing_timer = ecore_timer_add(QP_PLAY_DURATION_LIMIT,
115 _quickpanel_player_timeout_cb, sound_player);
116 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
117 SERR("after playing media");
122 _quickpanel_player_completed_cb(void *user_data)
124 retif(user_data == NULL, , "invalid parameter");
125 player_h *sound_player = user_data;
127 DBG("Media player completed");
129 _quickpanel_player_del_timeout_timer();
130 _quickpanel_player_free(sound_player);
134 _quickpanel_player_interrupted_cb(player_interrupted_code_e code, void *user_data)
136 retif(user_data == NULL, , "invalid parameter");
137 player_h *sound_player = user_data;
139 ERR("interrupt code [%d]", (int)code);
141 _quickpanel_player_del_timeout_timer();
142 _quickpanel_player_free(sound_player);
146 _quickpanel_player_error_cb(int error_code, void *user_data)
148 retif(user_data == NULL, , "invalid parameter");
149 player_h *sound_player = user_data;
151 ERR("Error code [%d]", (int)error_code);
153 _quickpanel_player_del_timeout_timer();
154 _quickpanel_player_free(sound_player);
157 HAPI int quickpanel_media_player_is_drm_error(int error_code)
159 if (error_code == PLAYER_ERROR_DRM_EXPIRED
160 || error_code == PLAYER_ERROR_DRM_NO_LICENSE
161 || error_code == PLAYER_ERROR_DRM_FUTURE_USE
162 || error_code == PLAYER_ERROR_DRM_NOT_PERMITTED) {
169 HAPI int quickpanel_media_player_play(sound_type_e sound_type, const char *sound_file)
171 player_h *sound_player = &s_info.player;
172 sound_session_type_e type = 1;
174 int ret = PLAYER_ERROR_NONE;
175 int sndRet = SOUND_MANAGER_ERROR_NONE;
176 player_state_e state = PLAYER_STATE_NONE;
178 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
179 SERR("Start player");
181 _quickpanel_player_del_timeout_timer();
183 if (*sound_player != NULL) {
184 _quickpanel_player_free(sound_player);
187 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
188 SERR("setting sound session start");
190 if (sound_type == SOUND_TYPE_NOTIFICATION) {
191 sound_manager_get_session_type(&type);
192 if (type != SOUND_SESSION_TYPE_NOTIFICATION) {
193 sndRet = sound_manager_set_session_type(SOUND_SESSION_TYPE_NOTIFICATION);
194 if (sndRet != SOUND_MANAGER_ERROR_NONE) {
195 ERR("sound_manager_set_session_type fail sndRet :%x",sndRet);
196 return PLAYER_ERROR_INVALID_PARAMETER;
200 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
201 SERR("setting sound session finished");
204 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
205 SERR("player_create start");
207 ret = player_create(sound_player);
208 if (ret != PLAYER_ERROR_NONE) {
209 ERR("creating the player handle failed[%d]", ret);
210 *sound_player = NULL;
213 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
214 SERR("player_create finished");
217 ret = player_set_sound_type(*sound_player, sound_type);
218 if (ret != PLAYER_ERROR_NONE) {
219 ERR("player_set_sound_type() ERR: %x!!!!", ret);
220 _quickpanel_player_free(sound_player);
224 player_get_state(*sound_player, &state);
225 if (state > PLAYER_STATE_READY) {
226 _quickpanel_player_free(sound_player);
230 ret = player_set_uri(*sound_player, sound_file);
231 if (ret != PLAYER_ERROR_NONE) {
232 ERR("set attribute---profile_uri[%d]", ret);
233 _quickpanel_player_free(sound_player);
237 ret = player_prepare(*sound_player);
238 if (ret != PLAYER_ERROR_NONE) {
239 ERR("realizing the player handle failed[%d]", ret);
240 _quickpanel_player_free(sound_player);
244 player_get_state(*sound_player, &state);
245 if (state != PLAYER_STATE_READY) {
246 ERR("state of player is invalid %d", state);
247 _quickpanel_player_free(sound_player);
251 /* register callback */
252 ret = player_set_completed_cb(*sound_player, _quickpanel_player_completed_cb, sound_player);
253 if (ret != PLAYER_ERROR_NONE) {
254 ERR("player_set_completed_cb() ERR: %x!!!!", ret);
255 _quickpanel_player_free(sound_player);
259 ret = player_set_interrupted_cb(*sound_player, _quickpanel_player_interrupted_cb, sound_player);
260 if (ret != PLAYER_ERROR_NONE) {
261 _quickpanel_player_free(sound_player);
265 ret = player_set_error_cb(*sound_player, _quickpanel_player_error_cb, sound_player);
266 if (ret != PLAYER_ERROR_NONE) {
267 _quickpanel_player_free(sound_player);
271 ecore_job_add(_quickpanel_player_start_job_cb, sound_player);
272 #ifdef NEED_TO_DEBUG_LOCKUP_ISSUE
273 SERR("playing request");
279 static Eina_Bool _playable_check(const char *file_path)
282 int ret_meta = METADATA_EXTRACTOR_ERROR_NONE;
283 metadata_extractor_h metadata = NULL;
284 Eina_Bool ret = EINA_FALSE;
286 ret_meta = metadata_extractor_create(&metadata);
287 if (ret_meta != METADATA_EXTRACTOR_ERROR_NONE) {
288 ERR("Failed to create metadata extractor:%d", ret_meta);
292 if (metadata == NULL) {
293 ERR("Failed to create metadata extractor:%d", ret_meta);
297 ret_meta = metadata_extractor_set_path(metadata, file_path);
298 if (ret_meta != METADATA_EXTRACTOR_ERROR_NONE) {
299 ERR("Failed to set path to meta extractor:%d", ret_meta);
300 metadata_extractor_destroy(metadata);
303 ret_meta = metadata_extractor_get_metadata(metadata, METADATA_HAS_AUDIO, &value);
304 if (ret_meta != METADATA_EXTRACTOR_ERROR_NONE) {
305 ERR("Failed to get metadata:%d", ret_meta);
306 metadata_extractor_destroy(metadata);
310 if(value && g_strcmp0(value, "0")) {
317 DBG("%s :: playable[%d]", file_path, ret);
318 metadata_extractor_destroy(metadata);
322 HAPI Eina_Bool quickpanel_media_playable_check(const char *file_path)
324 Eina_Bool ret = EINA_FALSE;
326 /* Check file exist or not */
327 ret = ecore_file_exists(file_path);
328 if (ret == EINA_FALSE) {
329 ERR("%s file does not exist", file_path);
333 /* Check file playable or not */
334 ret = _playable_check(file_path);
335 if (ret == EINA_FALSE) {
336 ERR("%s file does not playable", file_path);
344 HAPI void quickpanel_media_player_stop(void)
346 _quickpanel_player_del_timeout_timer();
348 if (s_info.player != NULL) {
349 _quickpanel_player_free(&s_info.player);
352 quickpanel_media_player_id_set(0);
355 HAPI void quickpanel_media_player_id_set(int id)
360 HAPI int quickpanel_media_player_id_get(void)
365 HAPI int quickpanel_media_is_sound_enabled(void)
367 int snd_status = 0, ret = -1;
369 #ifdef VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS
370 int snd_disabled_status = 0;
372 ret = vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS, &snd_disabled_status);
373 msgif(ret != 0, "failed to get VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS");
374 ret = vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd_status);
375 msgif(ret != 0, "failed to get VCONFKEY_SETAPPL_SOUND_STATUS_BOOL");
377 if (snd_disabled_status == 0 && snd_status == 1) {
381 ret = vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd_status);
382 msgif(ret != 0, "failed to get VCONFKEY_SETAPPL_SOUND_STATUS_BOOL");
384 if (snd_status == 1) {
392 HAPI int quickpanel_media_is_vib_enabled(void)
394 int vib_status = 0, ret = -1;
396 ret = vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib_status);
401 ERR("failed to get a value of VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL");
407 HAPI void quickpanel_media_play_feedback(void)
409 int snd_enabled = quickpanel_media_is_sound_enabled();
410 int vib_enabled = quickpanel_media_is_vib_enabled();
412 quickpanel_media_init();
414 if (snd_enabled == 1) {
415 feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TAP);
416 } else if (vib_enabled == 1) {
417 feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_TAP);
421 HAPI int quickpanel_media_set_mute_toggle(void)
425 if (quickpanel_media_is_sound_enabled() == 1 ||
426 quickpanel_media_is_vib_enabled() == 1) {
427 ret = vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 0);
428 msgif(ret != 0, "failed to set VCONFKEY_SETAPPL_SOUND_STATUS_BOOL");
430 ret = vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 0);
431 msgif(ret != 0, "failed to set VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL");
435 ret = vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 1);
436 msgif(ret != 0, "failed to set VCONFKEY_SETAPPL_SOUND_STATUS_BOOL");
438 ret = vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 0);
439 msgif(ret != 0, "failed to set VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL");
445 HAPI void quickpanel_media_init(void)
447 if (s_info.is_feedback_initialized == 0) {
448 if (feedback_initialize() == FEEDBACK_ERROR_NONE) {
449 s_info.is_feedback_initialized = 1;
451 ERR("failed to init feedback API");
456 HAPI void quickpanel_media_fini(void)
458 if (s_info.is_feedback_initialized == 1) {
459 if (feedback_deinitialize() == FEEDBACK_ERROR_NONE) {
460 s_info.is_feedback_initialized = 0;
462 ERR("failed to deinit feedback API");