2 // Tizen Web Device API
3 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 #include "MediaKeyManager.h"
19 #include "MediaKeyUtil.h"
21 #include <JSStringRefWrapper.h>
22 #include <PlatformException.h>
26 #include <media_key.h>
31 void onMediaKeyEventCb(media_key_e key, media_key_event_e status, void* user_data)
35 MediaKeyManager* mediaKeyManager = MediaKeyManager::getInstance();
37 MediaKeyType mediaKeyType = MediaKeyUtil::mediakeyTypeToString(key);
38 MediaKeyEventType mediaKeyEventType= MediaKeyUtil::mediakeyEventTypeToString(status);
40 mediaKeyManager->onMediaKey(mediaKeyType, mediaKeyEventType);
44 MediaKeyManager::MediaKeyManager() :
45 m_listener(MediaKeyEventListenerPtr(NULL)),
46 m_listeningPlatformEvent(false)
50 MediaKeyManager* MediaKeyManager::getInstance()
52 static MediaKeyManager instance;
57 MediaKeyManager::~MediaKeyManager()
61 if(m_listeningPlatformEvent)
63 LOGD("::media_key_release");
64 int ret = media_key_release();
65 if (ret != MEDIA_KEY_ERROR_NONE)
67 LOGE("ret : %d", ret);
68 MediaKeyUtil::throwMediaKeyException(ret, "media_key_release()");
70 m_listeningPlatformEvent = false;
75 void MediaKeyManager::setMediaKeyEventListener(MediaKeyEventListenerPtr listener)
77 LOGD("Enter MediaKeyManager setMediaKeyEventListener");
80 LOGD("delete m_listener");
85 m_listener = listener;
88 if(!m_listeningPlatformEvent)
90 LOGD("::media_key_reserve");
91 int ret = media_key_reserve(onMediaKeyEventCb, static_cast<void*>(this));
92 if (ret != MEDIA_KEY_ERROR_NONE)
94 LOGE("ret : %d", ret);
95 MediaKeyUtil::throwMediaKeyException(ret, "media_key_reserve()");
97 m_listeningPlatformEvent = true;
100 void MediaKeyManager::unsetMediaKeyEventListener()
102 LOGD("Enter MediaKeyManager unsetMediaKeyEventListener");
105 if(m_listeningPlatformEvent)
107 LOGD("::media_key_release");
108 int ret = media_key_release();
109 if (ret != MEDIA_KEY_ERROR_NONE)
111 LOGE("ret : %d", ret);
112 MediaKeyUtil::throwMediaKeyException(ret, "media_key_release()");
114 m_listeningPlatformEvent = false;
118 void MediaKeyManager::onMediaKey(MediaKeyType type, MediaKeyEventType event)
120 if(!m_listeningPlatformEvent)
122 LOGE("event is not registered");
126 if(NULL == m_listener)
128 LOGE("event listener is not registered");
133 MediaKeyEventListenerPtr cb = m_listener;
134 cb->setMediaKeyType(type);
135 MediaKeyEventListenerPtr* data = new MediaKeyEventListenerPtr(cb);
139 case MediaKeyEventType::MEDIA_KEY_EVENT_PRESSED:
140 LOGD("event : PRESSED");
141 if (!g_idle_add(MediaKeyEventCallback::onpressed, data)) {
142 LOGE("g_idle addition failed");
143 throw UnknownException("g_idle addition failed");
146 case MEDIA_KEY_STATUS_RELEASED:
147 LOGD("event : RELEASED");
148 if (!g_idle_add(MediaKeyEventCallback::onreleased, data)) {
149 LOGE("g_idle addition failed");
150 throw UnknownException("g_idle addition failed");