[DeviceHome] Seperate TV service with service_tv.js 33/273933/7 submit/tizen/20220422.160021
authorDongHyun Song <dh81.song@samsung.com>
Mon, 18 Apr 2022 08:00:45 +0000 (17:00 +0900)
committerDongHyun Song <dh81.song@samsung.com>
Thu, 21 Apr 2022 07:41:41 +0000 (16:41 +0900)
1. Add new file service_tv.js for TV product features
2. Remove unnecessary service.js symlink
3. Support webapis.getProfile()

Change-Id: Ied35583ff74d0b8b864e65c091a8791ffe0f31f9
Signed-off-by: DongHyun Song <dh81.song@samsung.com>
device_home/service.js [deleted file]
device_home/service/service.js
device_home/service/tv/service_tv.js [new file with mode: 0644]
packaging/config.xml.in
packaging/config_tv.xml.in
wrt_app/service/device_api_router.ts

diff --git a/device_home/service.js b/device_home/service.js
deleted file mode 100644 (file)
index 17cd727..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-const deviceHome = require('./service/service');
-
-module.exports.onStart = async function() {
-  deviceHome.onStart();
-  // Temporarily remove the signaling server
-  // require('./signaling_server/gen/app');
-};
-
-module.exports.onStop = function() {
-  deviceHome.onStop();
-};
-
-module.exports.onRequest = function() {
-  deviceHome.onRequest();
-}
index 138dd23..221a2ee 100755 (executable)
@@ -26,7 +26,7 @@ const TAG = '[DeviceHome][service.js]'
 const TIZEN_WEB_APP_SHARED_RESOURCES = 'shared/res/';
 const WEBCLIP_DIRECTORY = 'webclip';
 const WEBCLIP_MANIFEST = 'manifest.json';
-const is_tv = webapis.cachedProperty !== undefined;
+const is_tv = webapis.getProfile() === 'TV';
 const local_ip = '127.0.0.1';
 const non_ip_list = [
   '1',
@@ -529,6 +529,11 @@ var HTTPserverStart = function() {
       webapis.mde.launchBrowserFromUrl(req.body.url);
   });
 
+  if (is_tv) {
+    const tvService = require('./tv/service_tv');
+    tvService.initialize(app);
+  }
+
   httpserver = http.createServer(app);
   httpserver.listen(g.port, function() {
     console.log(`Device home is running on port ${g.port}`);
diff --git a/device_home/service/tv/service_tv.js b/device_home/service/tv/service_tv.js
new file mode 100644 (file)
index 0000000..cc0156c
--- /dev/null
@@ -0,0 +1,102 @@
+const express = require('express');
+
+let virtualKeyGeneratorInitialized = false;
+let virtualMouseInitialized = false;
+const keyMap = {
+  'Ambient': 530,
+  'ArrowLeft': 113,
+  'ArrowRight': 114,
+  'ArrowUp': 111,
+  'ArrowDown': 116,
+  'Back': 9,
+  'ChannelDown': 95,
+  'ChannelUp': 96,
+  'HomeUI': 71,
+  'OK': 36,
+  'VolumeDown': 75,
+  'VolumeUp': 76,
+  'WebBrowser': 158,
+};
+
+let webapis = global.webapis;
+
+function initializeVirtualKeyGenerator() {
+  if (!virtualKeyGeneratorInitialized) {
+    virtualKeyGeneratorInitialized = true;
+    webapis.mde.initVirtualEventGenerator(0);
+  }
+  return virtualKeyGeneratorInitialized;
+}
+
+function initializeVirtualMouse() {
+  if (!virtualMouseInitialized) {
+    virtualMouseInitialized = true;
+    webapis.mde.initVirtualEventGenerator(1);
+  }
+  return virtualMouseInitialized;
+}
+
+module.exports.initialize = (app) => {
+  app.post('/sendKey', express.json(), (req, res) => {
+    if (!initializeVirtualKeyGenerator()) {
+      res.send({
+        result: 'mde API is not enabled'
+      });
+      return;
+    }
+
+    var keyName = req.body.keyName;
+    let keyCode = keyMap[keyName];
+    console.log(`keyName : ${keyName}, keyCode : ${keyCode}`);
+    webapis.mde.generateVirtualKeyEvent(keyCode, 2);
+    res.send({
+      result: 'ok'
+    });
+  });
+
+  app.post('/sendString', express.json(), (req, res) => {
+    var inputString = req.body.inputString;
+    console.log(`inputString : ${inputString}`);
+    webapis.mde.updateRemoteInput(inputString);
+    res.send({
+      result: 'ok'
+    });
+  });
+
+  app.post('/selectString', express.json(), (req, res) => {
+    webapis.mde.selectRemoteInput();
+    res.send({
+      result: 'ok'
+    });
+  });
+
+  app.post('/mouseMove', express.json(), (req, res) => {
+    if (!initializeVirtualMouse()) {
+      res.send({
+        result: 'mde API is not enabled'
+      });
+      return;
+    }
+    var dx = req.body.dx;
+    var dy = req.body.dy;
+    console.log(`dx : ${dx}, dy : ${dy}`);
+    webapis.mde.generateVirtualMouseMoveEvent(dx, dy, 3);
+    res.send({
+      result: 'ok'
+    });
+  });
+
+  app.post('/previewData', express.json(), (req, res) => {
+    let pkgId = req.body.pkgId;
+    let previewData = '{ sections: [] }';
+    if (webapis && webapis.getPreviewData) {
+      previewData = webapis.getPreviewData(pkgId);
+    } else {
+      console.error('webapis.getPreviewData is unsupported.');
+    }
+    res.send({
+      result: JSON.parse(previewData)
+    });
+  });
+
+}
\ No newline at end of file
index 2b80c64..e2a99de 100644 (file)
@@ -14,7 +14,7 @@
     <tizen:privilege name="http://tizen.org/privilege/internet"/>
     <tizen:privilege name="http://tizen.org/privilege/mediastorage"/>
        <tizen:service id="9z6IujVul3.DeviceHome" type="global" auto-restart="true" on-boot="true">
-        <tizen:content src="service.js"/>
+        <tizen:content src="service/service.js"/>
         <tizen:name>DeviceHomeService</tizen:name>
         <tizen:description>DeviceHomeService</tizen:description>
     </tizen:service>
index cf869c3..af85a01 100644 (file)
@@ -14,7 +14,7 @@
     <tizen:privilege name="http://tizen.org/privilege/internet"/>
     <tizen:privilege name="http://tizen.org/privilege/mediastorage"/>
     <tizen:service id="9z6IujVul3.DeviceHome" type="global">
-        <tizen:content src="service.js"/>
+        <tizen:content src="service/service.js"/>
         <tizen:name>DeviceHomeService</tizen:name>
         <tizen:description>DeviceHomeService</tizen:description>
         <tizen:metadata key="http://samsung.com/tv/metadata/use.drm" value="false"/>
index eed2979..40c33d7 100644 (file)
@@ -68,12 +68,18 @@ export class DeviceAPIRouter {
         return { images: 'no' };
       }
     }
+    global.webapis.getProfile = () => {
+      if (wrt.tv) return 'TV';
+      else if (wrt.da) return 'DA';
+      else return 'common';
+    }
     Object.defineProperties(global.webapis, {
       getCallerAppId: { writable: false, enumerable: true },
       getPackageId: { writable: false, enumerable: true },
       getServiceId: { writable: false, enumerable: true },
       postPlainNotification: { writable: false, enumerable: true },
       getPreviewData: { writable: false, enumerable: true },
+      getProfile: { writable: false, enumerable: true },
     });
     this.initMDEWebapis();
     this.initEdgeWebapis();