From: Piotr Czaja
Date: Tue, 3 Feb 2015 13:22:24 +0000 (+0100)
Subject: [MediaKey] Media Key plugin implementation
X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~273
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0f1fbe87f4aaa85bc91cbaecc60064682ea06de0;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[MediaKey] Media Key plugin implementation
Change-Id: I8809fffcdc9f26056891f079578ccad24cfb784e
Signed-off-by: Piotr Czaja
(cherry picked from commit 4fa8e41737600982834f219cd71e03fac9acc031)
---
diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec
index 01d1a7f3..16e18831 100755
--- a/packaging/webapi-plugins.spec
+++ b/packaging/webapi-plugins.spec
@@ -34,6 +34,7 @@ Source0: %{name}-%{version}.tar.gz
%define tizen_feature_exif_support 1
%define tizen_feature_filesystem_support 1
%define tizen_feature_fm_radio_support 0
+%define tizen_feature_media_key_support 1
%define tizen_feature_message_port_support 1
%define tizen_feature_messaging_support 1
%define tizen_feature_nbs_support 1
@@ -81,6 +82,7 @@ Source0: %{name}-%{version}.tar.gz
%define tizen_feature_exif_support 0
%define tizen_feature_filesystem_support 0
%define tizen_feature_fm_radio_support 0
+%define tizen_feature_media_key_support 0
%define tizen_feature_message_port_support 0
%define tizen_feature_messaging_support 0
%define tizen_feature_nbs_support 0
@@ -128,6 +130,7 @@ Source0: %{name}-%{version}.tar.gz
%define tizen_feature_exif_support 1
%define tizen_feature_filesystem_support 1
%define tizen_feature_fm_radio_support 0
+%define tizen_feature_media_key_support 0
%define tizen_feature_message_port_support 1
%define tizen_feature_messaging_support 0
%define tizen_feature_nbs_support 0
@@ -299,6 +302,10 @@ BuildRequires: pkgconfig(capi-system-sensor)
%endif
+%if 0%{?tizen_feature_media_key_support}
+BuildRequires: pkgconfig(capi-system-media-key)
+%endif
+
%description
Tizen Web APIs implemented.
@@ -329,6 +336,7 @@ GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_download_support=%{?tizen_feature_down
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_exif_support=%{?tizen_feature_exif_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_filesystem_support=%{?tizen_feature_filesystem_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_fm_radio_support=%{?tizen_feature_fm_radio_support}"
+GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_media_key_support=%{?tizen_feature_media_key_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_message_port_support=%{?tizen_feature_message_port_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_messaging_support=%{?tizen_feature_messaging_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nbs_support=%{?tizen_feature_nbs_support}"
diff --git a/src/mediakey/mediakey.gyp b/src/mediakey/mediakey.gyp
new file mode 100644
index 00000000..9d2a2fe0
--- /dev/null
+++ b/src/mediakey/mediakey.gyp
@@ -0,0 +1,32 @@
+{
+ 'includes':[
+ '../common/common.gypi',
+ ],
+ 'targets': [
+ {
+ 'target_name': 'tizen_mediakey',
+ 'type': 'loadable_module',
+ 'sources': [
+ 'mediakey_api.js',
+ 'mediakey_extension.cc',
+ 'mediakey_extension.h',
+ 'mediakey_instance.cc',
+ 'mediakey_instance.h',
+ 'mediakey_manager.cc',
+ 'mediakey_manager.h'
+ ],
+ 'includes': [
+ '../common/pkg-config.gypi',
+ ],
+ 'conditions': [
+ ['tizen == 1', {
+ 'variables': {
+ 'packages': [
+ 'capi-system-media-key',
+ ]
+ },
+ }],
+ ],
+ },
+ ],
+}
diff --git a/src/mediakey/mediakey_api.js b/src/mediakey/mediakey_api.js
new file mode 100644
index 00000000..feae3b42
--- /dev/null
+++ b/src/mediakey/mediakey_api.js
@@ -0,0 +1,55 @@
+// Copyright 2015 Samsung Electronics Co, Ltd. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var validator = xwalk.utils.validator;
+var type = xwalk.utils.type;
+var native = new xwalk.utils.NativeManager(extension);
+var converter_ = xwalk.utils.converter;
+
+var ON_PRESSED_MEDIA_KEY_EVENT_CALLBACK = 'onPressedMediaKeyEventCallback';
+var ON_RELEASED_MEDIA_KEY_EVENT_CALLBACK = 'onReleasedMediaKeyEventCallback';
+
+function MediaKeyManager() {
+ validator.isConstructorCall(this, MediaKeyManager);
+}
+
+MediaKeyManager.prototype.setMediaKeyEventListener = function(callback) {
+ var args = validator.validateArgs(arguments, [
+ {
+ name: 'callback',
+ type: validator.Types.LISTENER,
+ values: ['onpressed', 'onreleased']
+ }
+ ]);
+
+ var ret = native.callSync('MediaKeyManager_setMediaKeyEventListener', {});
+
+ if (native.isFailure(ret)) {
+ throw native.getErrorObject(ret);
+ }
+
+ native.removeListener(ON_PRESSED_MEDIA_KEY_EVENT_CALLBACK);
+ native.removeListener(ON_RELEASED_MEDIA_KEY_EVENT_CALLBACK);
+
+ native.addListener(ON_PRESSED_MEDIA_KEY_EVENT_CALLBACK, function(msg) {
+ native.callIfPossible(args.callback.onpressed, native.getResultObject(msg.type));
+ });
+ native.addListener(ON_RELEASED_MEDIA_KEY_EVENT_CALLBACK, function(msg) {
+ native.callIfPossible(args.callback.onpressed, native.getResultObject(msg.type));
+ });
+
+};
+
+MediaKeyManager.prototype.unsetMediaKeyEventListener = function() {
+ var ret = native.callSync('MediaKeyManager_unsetMediaKeyEventListener',{});
+
+ if (native.isFailure(ret)) {
+ throw native.getErrorObject(ret);
+ }
+
+ native.removeListener(ON_PRESSED_MEDIA_KEY_EVENT_CALLBACK);
+ native.removeListener(ON_RELEASED_MEDIA_KEY_EVENT_CALLBACK);
+};
+
+exports = new MediaKeyManager();
diff --git a/src/mediakey/mediakey_extension.cc b/src/mediakey/mediakey_extension.cc
new file mode 100644
index 00000000..afc29654
--- /dev/null
+++ b/src/mediakey/mediakey_extension.cc
@@ -0,0 +1,34 @@
+// Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mediakey/mediakey_extension.h"
+#include "mediakey/mediakey_instance.h"
+#include "mediakey/mediakey_manager.h"
+
+// This will be generated from mediakey_api.js.
+extern const char kSource_mediakey_api[];
+
+namespace extension {
+namespace mediakey {
+
+MediaKeyExtension::MediaKeyExtension() {
+ SetExtensionName("tizen.mediakey");
+ SetJavaScriptAPI(kSource_mediakey_api);
+}
+
+MediaKeyExtension::~MediaKeyExtension() {
+}
+
+common::Instance* MediaKeyExtension::CreateInstance() {
+ return new MediaKeyInstance();
+}
+
+} // namespace mediakey
+} // namespace extension
+
+// entry point
+common::Extension* CreateExtension() {
+ return new extension::mediakey::MediaKeyExtension();
+}
+
diff --git a/src/mediakey/mediakey_extension.h b/src/mediakey/mediakey_extension.h
new file mode 100644
index 00000000..4b3ea4d3
--- /dev/null
+++ b/src/mediakey/mediakey_extension.h
@@ -0,0 +1,27 @@
+// Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SRC_MEDIAKEY_MEDIAKEY_EXTENSION_H_
+#define SRC_MEDIAKEY_MEDIAKEY_EXTENSION_H_
+
+#include "common/extension.h"
+
+namespace extension {
+namespace mediakey {
+
+class MediaKeyManager;
+
+class MediaKeyExtension : public common::Extension {
+ public:
+ MediaKeyExtension();
+ virtual ~MediaKeyExtension();
+
+ private:
+ virtual common::Instance* CreateInstance();
+};
+
+} // namespace mediakey
+} // namespace extension
+
+#endif // SRC_MEDIAKEY_MEDIAKEY_EXTENSION_H_
diff --git a/src/mediakey/mediakey_instance.cc b/src/mediakey/mediakey_instance.cc
new file mode 100644
index 00000000..9d25b6c6
--- /dev/null
+++ b/src/mediakey/mediakey_instance.cc
@@ -0,0 +1,92 @@
+// Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include
+#include