[tizen3.0] add tv inputdevice api
authorbg.chun <bg.chun@samsung.com>
Tue, 5 Apr 2016 08:10:15 +0000 (17:10 +0900)
committerbg.chun <bg.chun@samsung.com>
Tue, 5 Apr 2016 08:11:11 +0000 (17:11 +0900)
Change-Id: Icadc6eab3a2a8f12d0c9bfc27905dabde819913e
Signed-off-by: bg.chun <bg.chun@samsung.com>
packaging/webapi-plugins.spec
src/tizen-wrt.gyp
src/tvinputdevice/tvinputdevice.gyp [new file with mode: 0644]
src/tvinputdevice/tvinputdevice_api.js [new file with mode: 0755]
src/tvinputdevice/tvinputdevice_extension.cc [new file with mode: 0644]
src/tvinputdevice/tvinputdevice_extension.h [new file with mode: 0644]
src/tvinputdevice/tvinputdevice_instance.cc [new file with mode: 0644]
src/tvinputdevice/tvinputdevice_instance.h [new file with mode: 0644]

index f339094344d771f74ed43ab6034d4b7858821c78..27d94e95e816533cbe5c499e1ba806f8d5d81de4 100644 (file)
@@ -112,6 +112,8 @@ Source0:    %{name}-%{version}.tar.gz
 %define tizen_feature_nbs_support                     0
 %endif
 
+%define tizen_feature_tvinputdevice_support           0
+
 %endif # tizen_profile_mobile
 
 ####################################################################
@@ -193,6 +195,7 @@ Source0:    %{name}-%{version}.tar.gz
 %define tizen_feature_web_setting_support             0
 %define tizen_feature_wi_fi_support                   1
 %define tizen_feature_inputdevice_support             1
+%define tizen_feature_tvinputdevice_support           0
 
 #- telephony related APIs
 # CallHistory API is optional in Tizen Wearable Profile.
@@ -255,7 +258,8 @@ Source0:    %{name}-%{version}.tar.gz
 %define tizen_feature_time_support                    1
 %define tizen_feature_web_setting_support             1
 %define tizen_feature_wi_fi_support                   1
-%define tizen_feature_inputdevice_support             1
+%define tizen_feature_inputdevice_support             0
+%define tizen_feature_tvinputdevice_support           1
 
 %endif # tizen_profile_tv
 
@@ -424,6 +428,7 @@ BuildRequires: pkgconfig(capi-system-sensor)
 BuildRequires:  pkgconfig(capi-system-media-key)
 %endif
 
+
 %description
 Tizen Web APIs implemented.
 
@@ -491,6 +496,7 @@ GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_time_support=%{?tizen_feature_time_sup
 GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_inputdevice_support=%{?tizen_feature_inputdevice_support}"
 GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_web_setting_support=%{?tizen_feature_web_setting_support}"
 GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_wi_fi_support=%{?tizen_feature_wi_fi_support}"
+GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_tvinputdevice_support=%{?tizen_feature_tvinputdevice_support}"
 
 ./tools/gyp/gyp $GYP_OPTIONS src/tizen-wrt.gyp
 
index 4d2a4837ae92c884a17f8adfba12e0a2be98ea48..65659deb2be3e478d25f5584847152314e1ca427 100755 (executable)
             ],
           },
         ],
+        [
+          'tizen_feature_tvinputdevice_support==1', {
+            'dependencies': [
+              'tvinputdevice/tvinputdevice.gyp:*'
+            ],
+          },
+        ],
       ], # end conditions
     },
   ], # end targets
diff --git a/src/tvinputdevice/tvinputdevice.gyp b/src/tvinputdevice/tvinputdevice.gyp
new file mode 100644 (file)
index 0000000..9bd3ab0
--- /dev/null
@@ -0,0 +1,32 @@
+{
+  'includes':[
+    '../common/common.gypi',
+  ],
+  'targets': [
+    {
+      'target_name': 'tizen_tvinputdevice',
+      'type': 'loadable_module',
+      'dependencies': [
+        '../common/common.gyp:tizen_common',
+      ],
+      'sources': [
+        'tvinputdevice_api.js',
+        'tvinputdevice_extension.cc',
+        'tvinputdevice_extension.h',
+        'tvinputdevice_instance.cc',
+        'tvinputdevice_instance.h'
+      ],
+      'includes': [
+        '../common/pkg-config.gypi',
+      ],
+      'conditions': [
+        ['tizen == 1', {
+          'variables': {
+            'packages': [
+            ]
+          },
+        }],
+      ],
+    },
+  ],
+}
diff --git a/src/tvinputdevice/tvinputdevice_api.js b/src/tvinputdevice/tvinputdevice_api.js
new file mode 100755 (executable)
index 0000000..b2f34f1
--- /dev/null
@@ -0,0 +1,424 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+var native = new xwalk.utils.NativeManager(extension);
+var validator = xwalk.utils.validator;
+var types = validator.Types;
+var mandatoryMap = {
+  "ArrowLeft" : {
+    keyName : "Left",
+    keyCode : 37
+  },
+  "ArrowUp" : {
+    keyName : "Up",
+    keyCode : 38
+  },
+  "ArrowRight" : {
+    keyName : "Right",
+    keyCode : 39
+  },
+  "ArrowDown" : {
+    keyName : "Down",
+    keyCode : 40
+  },
+  "Enter" : {
+    keyName : "Return",
+    keyCode : 13
+  },
+  "Back" : {
+    keyName : "XF86Back",
+    keyCode : 10009
+  },
+};
+var map = {
+  "VolumeUp": {
+    keyName: "XF86AudioRaiseVolume",
+    keyCode: 447
+  },
+  "VolumeDown": {
+    keyName: "XF86AudioLowerVolume",
+    keyCode: 448
+  },
+  "VolumeMute": {
+    keyName: "XF86AudioMute",
+    keyCode: 449
+  },
+  "ChannelUp": {
+    keyName: "XF86RaiseChannel",
+    keyCode: 427
+  },
+  "ChannelDown": {
+    keyName: "XF86LowerChannel",
+    keyCode: 428
+  },
+  "ColorF0Red": {
+    keyName: "XF86Red",
+    keyCode: 403
+  },
+  "ColorF1Green": {
+    keyName: "XF86Green",
+    keyCode: 404
+  },
+  "ColorF2Yellow": {
+    keyName: "XF86Yellow",
+    keyCode: 405
+  },
+  "ColorF3Blue": {
+    keyName: "XF86Blue",
+    keyCode: 406
+  },
+  "Menu": {
+    keyName: "XF86SysMenu",
+    keyCode: 10133
+  },
+  "Tools": {
+    keyName: "XF86SimpleMenu",
+    keyCode: 10135
+  },
+  "Info": {
+    keyName: "XF86Info",
+    keyCode: 457
+  },
+  "Exit": {
+    keyName: "XF86Exit",
+    keyCode: 10182
+  },
+  "Search": {
+    keyName: "XF86Search",
+    keyCode: 10225
+  },
+  "Guide": {
+    keyName: "XF86ChannelGuide",
+    keyCode: 458
+  },
+  "MediaRewind": {
+    keyName: "XF86AudioRewind",
+    keyCode: 412
+  },
+  "MediaPause": {
+    keyName: "XF86AudioPause",
+    keyCode: 19
+  },
+  "MediaFastForward": {
+    keyName: "XF86AudioNext",
+    keyCode: 417
+  },
+  "MediaRecord": {
+    keyName: "XF86AudioRecord",
+    keyCode: 416
+  },
+  "MediaPlay": {
+    keyName: "XF86AudioPlay",
+    keyCode: 415
+  },
+  "MediaStop": {
+    keyName: "XF86AudioStop",
+    keyCode: 413
+  },
+  "MediaPlayPause": {
+    keyName: "XF86PlayBack",
+    keyCode: 10252
+  },
+  "MediaTrackPrevious": {
+    keyName: "XF86PreviousChapter",
+    keyCode: 10232
+  },
+  "MediaTrackNext": {
+    keyName: "XF86NextChapter",
+    keyCode: 10233
+  },
+  "Source": {
+    keyName: "XF86Display",
+    keyCode: 10072
+  },
+  "PictureSize": {
+    keyName: "XF86PictureSize",
+    keyCode: 10140
+  },
+  "PreviousChannel": {
+    keyName: "XF86PreviousChannel",
+    keyCode: 10190
+  },
+  "ChannelList": {
+    keyName: "XF86ChannelList",
+    keyCode: 10073
+  },
+  "E-Manual": {
+    keyName: "XF86EManual",
+    keyCode: 10146
+  },
+  "MTS": {
+    keyName: "XF86MTS",
+    keyCode: 10195
+  },
+  "3D": {
+    keyName: "XF863D",
+    keyCode: 10199
+  },
+  "Soccer": {
+    keyName: "XF86SoccerMode",
+    keyCode: 10228
+  },
+  "Caption": {
+    keyName: "XF86Caption",
+    keyCode: 10221
+  },
+  "Teletext": {
+    keyName: "XF86TTXMIX",
+    keyCode: 10200
+  },
+  "Extra": {
+    keyName: "XF86ExtraApp",
+    keyCode: 10253
+  },
+  "0": {
+    keyName: "0",
+    keyCode: 48
+  },
+  "1": {
+    keyName: "1",
+    keyCode: 49
+  },
+  "2": {
+    keyName: "2",
+    keyCode: 50
+  },
+  "3": {
+    keyName: "3",
+    keyCode: 51
+  },
+  "4": {
+    keyName: "4",
+    keyCode: 52
+  },
+  "5": {
+    keyName: "5",
+    keyCode: 53
+  },
+  "6": {
+    keyName: "6",
+    keyCode: 54
+  },
+  "7": {
+    keyName: "7",
+    keyCode: 55
+  },
+  "8": {
+    keyName: "8",
+    keyCode: 56
+  },
+  "9": {
+    keyName: "9",
+    keyCode: 57
+  },
+  "Minus": {
+    keyName: "minus",
+    keyCode: 189
+  },
+};
+
+
+function TVInputDeviceKey(dict) {
+  for (var key in dict) {
+    if (dict.hasOwnProperty(key)) {
+      Object.defineProperty(this, key, {
+        value: dict[key],
+        enumerable: true
+      });
+    }
+  }
+  Object.freeze(this);
+}
+
+
+/**
+ * This class provides access to the API functionalities through the tizen.tvinputdevice interface.
+ * @constructor
+ */
+function TVInputDeviceManager() {
+  if (!(this instanceof TVInputDeviceManager)) {
+    throw new TypeError;
+  }
+}
+
+/**
+ * Retrieves the list of keys can be registered with the registerKey() method.
+ * @return {array} Array of keys
+ */
+TVInputDeviceManager.prototype.getSupportedKeys = function() {
+  xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.TV_INPUT_DEVICE);
+  var re = [];
+  for (var key in map) {
+    if (map.hasOwnProperty(key)) {
+      re.push(new TVInputDeviceKey({name: key, code: map[key].keyCode}));
+    }
+  }
+
+  return re;
+};
+
+
+/**
+ * Returns information about the key which has the given name.
+ * @param {!string} keyName  The key name
+ * @return {object} Key object
+ */
+TVInputDeviceManager.prototype.getKey = function(keyName) {
+  xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.TV_INPUT_DEVICE);
+  var args = validator.validateArgs(arguments, [
+    {name: 'keyName', type: types.STRING}
+  ]);
+
+  if (map[args.keyName]) {
+    return new TVInputDeviceKey( { name: args.keyName, code: map[args.keyName].keyCode } );
+  } else if (mandatoryMap[args.keyName]) {
+    return new TVInputDeviceKey( { name: args.keyName, code: mandatoryMap[args.keyName].keyCode } );
+  } else {
+    throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR,
+    'Parameter "keyName" is invalid.');
+  }
+
+};
+
+
+/**
+ * Registers an input device key to receive DOM keyboard event when it is pressed or released.
+ * @param {!string} keyName  The key name
+ */
+TVInputDeviceManager.prototype.registerKey = function(keyName) {
+  xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.TV_INPUT_DEVICE);
+  var args = validator.validateArgs(arguments, [
+    {name: 'keyName', type: types.STRING}
+  ]);
+  if (!map[args.keyName]) {
+    throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR,
+    'Parameter "keyName" is invalid.');
+  }
+
+  var ret = native.sendRuntimeSyncMessage('tizen://api/inputdevice/registerKey', map[args.keyName].keyName);
+  if (ret === 'error') {
+    throw new WebAPIException(WebAPIException.UNKNOWN_ERR, 'UnknownError');
+  }
+};
+
+
+/**
+ * Unregisters an input device key.
+ * @param {!string} keyName  The key name
+ */
+TVInputDeviceManager.prototype.unregisterKey = function(keyName) {
+  xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.TV_INPUT_DEVICE);
+  var args = validator.validateArgs(arguments, [
+    {name: 'keyName', type: types.STRING}
+  ]);
+
+  if (!map[args.keyName]) {
+    throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR,
+    'Parameter "keyName" is invalid.');
+  }
+
+  var ret = native.sendRuntimeSyncMessage('tizen://api/inputdevice/unregisterKey', map[args.keyName].keyName);
+  if (ret === 'error') {
+    throw new WebAPIException(WebAPIException.UNKNOWN_ERR, 'UnknownError');
+  }
+};
+
+TVInputDeviceManager.prototype.registerKeyBatch = function() {
+    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.TV_INPUT_DEVICE);
+    var args = validator.validateMethod(arguments, [
+      {
+        name: 'keyNames',
+        type: types.ARRAY,
+        values: types.STRING
+      },
+      {
+        name: 'successCallback',
+        type: types.FUNCTION,
+        optional: true,
+        nullable: true
+      },
+      {
+        name: 'errorCallback',
+        type: types.FUNCTION,
+        optional: true,
+        nullable: true
+      }
+    ]);
+
+    var keysList = "";
+    for (var i = 0; i < args.keyNames.length; ++i) {
+      if (!map[args.keyNames[i]]) {
+        throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR,
+                                  'Invalid key name: "' + args.keyNames[i] + '"');
+      }
+      keysList += map[args.keyNames[i]].keyName + ((i < args.keyNames.length - 1) ? "," : "");
+    }
+
+    setTimeout(function() {
+      var ret = native.sendRuntimeSyncMessage('tizen://api/inputdevice/registerKeyBatch', keysList);
+      if (ret === 'error') {
+        native.callIfPossible(args.errorCallback, new WebAPIException(
+            WebAPIException.UNKNOWN_ERR, 'Failed to register keys.'));
+      } else {
+        native.callIfPossible(args.successCallback);
+      }
+    }.bind(this), 0);
+  };
+
+  TVInputDeviceManager.prototype.unregisterKeyBatch = function() {
+    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.TV_INPUT_DEVICE);
+    var args = validator.validateMethod(arguments, [
+      {
+        name: 'keyNames',
+        type: types.ARRAY,
+        values: types.STRING
+      },
+      {
+        name: 'successCallback',
+        type: types.FUNCTION,
+        optional: true,
+        nullable: true
+      },
+      {
+        name: 'errorCallback',
+        type: types.FUNCTION,
+        optional: true,
+        nullable: true
+      }
+    ]);
+
+    var keysList = "";
+    for (var i = 0; i < args.keyNames.length; ++i) {
+      if (!map[args.keyNames[i]]) {
+        throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR,
+                                  'Invalid key name: "' + args.keyNames[i] + '"');
+      }
+      keysList += map[args.keyNames[i]].keyName + ((i < args.keyNames.length - 1) ? "," : "");
+    }
+
+    setTimeout(function() {
+      var ret = native.sendRuntimeSyncMessage('tizen://api/inputdevice/unregisterKeyBatch', keysList);
+      if (ret === 'error') {
+        native.callIfPossible(args.errorCallback, new WebAPIException(
+            WebAPIException.UNKNOWN_ERR, 'Failed to unregister keys.'));
+      } else {
+        native.callIfPossible(args.successCallback);
+      }
+    }.bind(this), 0);
+  };
+
+// Exports
+exports = new TVInputDeviceManager();
diff --git a/src/tvinputdevice/tvinputdevice_extension.cc b/src/tvinputdevice/tvinputdevice_extension.cc
new file mode 100644 (file)
index 0000000..e007872
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 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 "../tvinputdevice/tvinputdevice_extension.h"
+#include "../tvinputdevice/tvinputdevice_instance.h"
+
+// This will be generated from tvinputdevice_api.js
+extern const char kSource_tvinputdevice_api[];
+
+namespace extension {
+namespace tvinputdevice {
+
+TVInputDeviceExtension::TVInputDeviceExtension() {
+    SetExtensionName("tizen.tvinputdevice");
+    SetJavaScriptAPI(kSource_tvinputdevice_api);
+}
+
+TVInputDeviceExtension::~TVInputDeviceExtension() {}
+
+common::Instance* TVInputDeviceExtension::CreateInstance() {
+    return new TVInputDeviceInstance;
+}
+
+}  // namespace tvinputdevice
+}  // namespace extension
+
+common::Extension* CreateExtension() {
+    return new extension::tvinputdevice::TVInputDeviceExtension;
+}
diff --git a/src/tvinputdevice/tvinputdevice_extension.h b/src/tvinputdevice/tvinputdevice_extension.h
new file mode 100644 (file)
index 0000000..8a633f1
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright 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_TVINPUTDEVICE_TVINPUTDEVICE_EXTENSION_H_
+#define SRC_TVINPUTDEVICE_TVINPUTDEVICE_EXTENSION_H_
+
+#include "common/extension.h"
+
+namespace extension {
+namespace tvinputdevice {
+
+class TVInputDeviceExtension : public common::Extension {
+ public:
+    TVInputDeviceExtension();
+    virtual ~TVInputDeviceExtension();
+
+ private:
+    virtual common::Instance* CreateInstance();
+};
+
+}  // namespace tvinputdevice
+}  // namespace extension
+
+#endif  // SRC_TVINPUTDEVICE_TVINPUTDEVICE_EXTENSION_H_
+
diff --git a/src/tvinputdevice/tvinputdevice_instance.cc b/src/tvinputdevice/tvinputdevice_instance.cc
new file mode 100644 (file)
index 0000000..67212b5
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#include "../tvinputdevice/tvinputdevice_instance.h"
+#include "common/logger.h"
+
+
+namespace extension {
+namespace tvinputdevice {
+
+TVInputDeviceInstance::TVInputDeviceInstance() {
+    LoggerD("Enter");
+}
+
+TVInputDeviceInstance::~TVInputDeviceInstance() {
+    LoggerD("Enter");
+}
+
+}  // namespace tvinputdevice
+}  // namespace extension
diff --git a/src/tvinputdevice/tvinputdevice_instance.h b/src/tvinputdevice/tvinputdevice_instance.h
new file mode 100644 (file)
index 0000000..d48248e
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#ifndef SRC_TVINPUTDEVICE_TVINPUTDEVICE_INSTANCE_H_
+#define SRC_TVINPUTDEVICE_TVINPUTDEVICE_INSTANCE_H_
+
+#include "common/picojson.h"
+#include "common/extension.h"
+
+
+namespace extension {
+namespace tvinputdevice {
+
+class TVInputDeviceInstance : public common::ParsedInstance {
+ public:
+    TVInputDeviceInstance();
+    virtual ~TVInputDeviceInstance();
+
+ private:
+};
+
+}  // namespace tvinputdevice
+}  // namespace extension
+
+#endif  // SRC_TVINPUTDEVICE_TVINPUTDEVICE_INSTANCE_H_