From b17af2612bc7aa60d9b5c3690e8fc3b364b02932 Mon Sep 17 00:00:00 2001 From: johnny nam Date: Thu, 23 Aug 2018 11:41:00 +0900 Subject: [PATCH] initial import(release):plugin Change-Id: I9c999748859c8dcc865a12137be949908f4277cc Signed-off-by: scott park --- plugin/catalog.json | 21 ++ plugin/device-profile.json | 21 ++ plugin/manifest/ui.json | 246 ++++++++++++++ plugin/plugin/css/fonts.css | 23 ++ plugin/plugin/css/sensor-soundLevel.css | 81 +++++ plugin/plugin/css/style.css | 377 +++++++++++++++++++++ plugin/plugin/icon.png | 0 plugin/plugin/index.html | 65 ++++ .../plugin/js/capability_illuminanceMeasurement.js | 66 ++++ plugin/plugin/js/capability_switch.js | 57 ++++ plugin/plugin/js/index-o.js | 141 ++++++++ plugin/plugin/js/index.js | 89 +++++ plugin/plugin/manifest.xml | 16 + plugin/plugin/res/bar-icon.png | Bin 0 -> 3124 bytes plugin/plugin/res/board_ic_arrow_left.png | Bin 0 -> 603 bytes plugin/plugin/res/ic_power.svg | 15 + plugin/plugin/res/option_ic_more.svg | 13 + plugin/plugin/res/spk-icon.png | Bin 0 -> 23435 bytes 18 files changed, 1231 insertions(+) create mode 100644 plugin/catalog.json create mode 100644 plugin/device-profile.json create mode 100644 plugin/manifest/ui.json create mode 100644 plugin/plugin/css/fonts.css create mode 100644 plugin/plugin/css/sensor-soundLevel.css create mode 100644 plugin/plugin/css/style.css create mode 100644 plugin/plugin/icon.png create mode 100644 plugin/plugin/index.html create mode 100644 plugin/plugin/js/capability_illuminanceMeasurement.js create mode 100644 plugin/plugin/js/capability_switch.js create mode 100644 plugin/plugin/js/index-o.js create mode 100644 plugin/plugin/js/index.js create mode 100644 plugin/plugin/manifest.xml create mode 100644 plugin/plugin/res/bar-icon.png create mode 100644 plugin/plugin/res/board_ic_arrow_left.png create mode 100644 plugin/plugin/res/ic_power.svg create mode 100644 plugin/plugin/res/option_ic_more.svg create mode 100644 plugin/plugin/res/spk-icon.png diff --git a/plugin/catalog.json b/plugin/catalog.json new file mode 100644 index 0000000..4b79902 --- /dev/null +++ b/plugin/catalog.json @@ -0,0 +1,21 @@ +{ + "items": [ + { + "name": "soundLevelChecker", + "appType": "setupApp", + "versions": [ + { + "appData": { + "setupAppData": { + "type": "ocf", + "ocf": { + "mnId": "", + "setupId": "001" + } + } + } + } + ] + } + ] +} diff --git a/plugin/device-profile.json b/plugin/device-profile.json new file mode 100644 index 0000000..2ee3a01 --- /dev/null +++ b/plugin/device-profile.json @@ -0,0 +1,21 @@ +{ + "name": "soundLevelChecker", + "components": [ + { + "id": "main", + "capabilities": [ + { + "id": "illuminanceMeasurement" + }, + { + "id": "switch" + } + ] + } + ], + "metadata": { + "mnmn": "", + "vid": "", + "deviceType": "" + } +} diff --git a/plugin/manifest/ui.json b/plugin/manifest/ui.json new file mode 100644 index 0000000..5192ab6 --- /dev/null +++ b/plugin/manifest/ui.json @@ -0,0 +1,246 @@ +{ + "n": "LightSensor", + "version": "0.0.1", + "vid": "", + "mnmn": "", + "language": [ + { + "version": "0.0.1", + "poCodes": [ + { + "label": "Illuminance", + "po": "___PO_CODE_ILLUMINANCEMEASUREMENT_ILLUMINANCE" + }, + { + "po": "___PO_CODE_POWERSWITCH_ON", + "label": "On" + }, + { + "po": "___PO_CODE_POWERSWITCH_OFF", + "label": "Off" + }, + { + "po": "___PO_CODE_POWERSWITCH", + "label": "Power" + } + ], + "locale": "en_US", + "mnmn": "", + "vid": "" + } + ], + "ma": [ + { + "name": "PowerSwitch", + "type": "main", + "order": 1, + "link": { + "href": "/capability/switch/main/0", + "if": "oic.if.a", + "rt": "x.com.st.powerswitch" + }, + "iconUrl": { + "vector": "", + "small": "", + "large": "", + "mid": "icon://ic_function_power_switch" + }, + "property": "power", + "controlType": "ToggleSwitch", + "alternatives": [ + { + "key": "on", + "value": "___PO_CODE_POWERSWITCH_ON" + }, + { + "key": "off", + "value": "___PO_CODE_POWERSWITCH_OFF", + "type": "inactive" + } + ], + "step": 0, + "label": { + "label": "___PO_CODE_POWERSWITCH" + }, + "emphasis": false + } + ], + "ms": [ + { + "name": "PowerSwitch", + "type": "device", + "order": 1, + "label": { + "label": "", + "arguments": [ + { + "n": "var1", + "href": "/capability/switch/main/0", + "property": "power", + "valueType": null, + "alternatives": [ + { + "key": "on", + "value": "___PO_CODE_POWERSWITCH_ON" + }, + { + "key": "off", + "value": "___PO_CODE_POWERSWITCH_OFF", + "type": "inactive" + } + ] + } + ] + }, + "emphasis": false + } + ], + "dpInfo": [ + { + "os": "android", + "dpType": "vendorPlugIn", + "dpUri": "wwst://soundLevel" + }, + { + "os": "ios", + "dpType": "vendorPlugIn", + "dpUri": "wwst://soundLevel" + } + ], + "dpResources": [ + { + "ruleAction": false, + "controllable": false, + "link": { + "rt": "oic.r.sensor.illuminance", + "href": "/capability/illuminanceMeasurement/main/0", + "if": "oic.if.r" + }, + "step": 0, + "controlType": "List", + "name": "Illuminance Measurement", + "label": { + "label": "___PO_CODE_ILLUMINANCEMEASUREMENT_ILLUMINANCE", + "n": "ST Illuminance Measurement" + }, + "emphasis": false, + "ruleEvent": false, + "iconUrl": { + "mid": "icon://ic_function_illuminance_measurement", + "large": "", + "small": "", + "vector": "" + }, + "order": 1, + "property": "illuminance" + }, + { + "name": "PowerSwitch", + "controllable": true, + "order": 2, + "link": { + "href": "/capability/switch/main/0", + "if": "oic.if.a", + "rt": "x.com.st.powerswitch" + }, + "iconUrl": { + "vector": "", + "small": "", + "large": "", + "mid": "icon://ic_function_power_switch" + }, + "property": "power", + "controlType": "ToggleSwitch", + "alternatives": [ + { + "key": "on", + "value": "___PO_CODE_POWERSWITCH_ON" + }, + { + "key": "off", + "value": "___PO_CODE_POWERSWITCH_OFF", + "type": "inactive" + } + ], + "step": 0, + "label": { + "label": "___PO_CODE_POWERSWITCH" + }, + "emphasis": true, + "ruleEvent": false, + "ruleAction": true + }, + { + "name": "PowerSwitch", + "controllable": true, + "order": 3, + "link": { + "href": "/capability/switch/main/0", + "if": "oic.if.a", + "rt": "x.com.st.powerswitch" + }, + "iconUrl": { + "vector": "", + "small": "", + "large": "", + "mid": "icon://ic_function_power_switch" + }, + "property": "power", + "controlType": "ToggleSwitch", + "alternatives": [ + { + "key": "on", + "value": "___PO_CODE_POWERSWITCH_ON" + }, + { + "key": "off", + "value": "___PO_CODE_POWERSWITCH_OFF", + "type": "inactive" + } + ], + "step": 0, + "label": { + "label": "___PO_CODE_POWERSWITCH" + }, + "emphasis": true, + "ruleEvent": false, + "ruleAction": false + }, + { + "name": "PowerSwitch", + "controllable": true, + "order": 4, + "link": { + "href": "/capability/switch/main/0", + "if": "oic.if.a", + "rt": "x.com.st.powerswitch" + }, + "iconUrl": { + "vector": "", + "small": "", + "large": "", + "mid": "icon://ic_function_power_switch" + }, + "property": "power", + "controlType": "ToggleSwitch", + "alternatives": [ + { + "key": "on", + "value": "___PO_CODE_POWERSWITCH_ON" + }, + { + "key": "off", + "value": "___PO_CODE_POWERSWITCH_OFF", + "type": "inactive" + } + ], + "step": 0, + "label": { + "label": "___PO_CODE_POWERSWITCH" + }, + "emphasis": true, + "ruleEvent": true, + "ruleAction": false + } + ] +} \ No newline at end of file diff --git a/plugin/plugin/css/fonts.css b/plugin/plugin/css/fonts.css new file mode 100644 index 0000000..dacbf3c --- /dev/null +++ b/plugin/plugin/css/fonts.css @@ -0,0 +1,23 @@ +@CHARSET "UTF-8"; + +.roboto-regular +{ + font-family: 'sec-roboto-light', Fallback, sans-serif; +} + +.roboto-medium +{ + font-family: 'sec-roboto-light', Fallback, sans-serif; + font-weight: bold; +} + +.roboto-condensed-regular +{ + font-family: 'sec-roboto-condensed', Fallback, sans-serif; +} + +.roboto-condensed-bold +{ + font-family: 'sec-roboto-condensed', Fallback, sans-serif; + font-weight: bold; +} diff --git a/plugin/plugin/css/sensor-soundLevel.css b/plugin/plugin/css/sensor-soundLevel.css new file mode 100644 index 0000000..3ac6c67 --- /dev/null +++ b/plugin/plugin/css/sensor-soundLevel.css @@ -0,0 +1,81 @@ +.measure_container { + margin: 20px 0px; + text-align: center; + padding-top: 10px; + width: 285px; + margin-left: auto; + margin-right: auto; } + +.soundLevel_value_wrap { + width: 100%; +// padding: 10px 0px; + height: 60px; + display: inline-block; + //background-color: #3695dd; +background-color: transparent; + color: white; + border: none; +} +.soundLevel_value_item { + text-align: left; + font-size: 42px; + color: black; +} + +#sensor_unit { + font-size: 24px; + text-align: left; + vertical-align: medium; + line-height: 23px; + } + +.soundLevel_value { + //padding: 6px; +} + +.status-container { + margin-top: 7px; + padding: 8px 0px; +} + +.level_bar { + border-radius: 15px; + height: 30px; + width: 280px; + color: #3695dd; + margin: 5px 0px; +} +#level_bar5 {background-color: #ff0000; } +#level_bar4 {background-color: #db007b; } +#level_bar3 {background-color: #b802cc; } +#level_bar2 {background-color: #6805ff; } +#level_bar1 {background-color: #003fff; } + +.icon-container { width: 280px; padding: 5px 5px;} +.icon-class { width: 150px; height: auto; } + +span { display: inline-block; vertical-align: middle; } + +.border_up { border-top: rgba(0,0,0,0.3) solid 2px; } +.border_dn { border-bottom: rgba(0,0,0,0.3) solid 2px; } +.underline { border-bottom: rgba(0,0,0,0.3) solid 2px; } +.underline80 { + border-bottom: 1px solid #fafafa; + text-align: center; + width: 70%; + margin-left: auto; + margin-right: auto; } + +.black_back{ background-color: black; color: white; } +.white_back{ background-color: white; } +.grey_back{ background-color: grey; } +.green_back{ background-color: #9aff00; } + +.blue_back{ background-color: blue; } +.green_back{ background-color: green; } +.cyan_back{ background-color: #3da8e1; } +.yellow_back{ background-color: yellow; } +.orange_back{ background-color: orange; } +.red_back{ background-color: red; } + + diff --git a/plugin/plugin/css/style.css b/plugin/plugin/css/style.css new file mode 100644 index 0000000..0608372 --- /dev/null +++ b/plugin/plugin/css/style.css @@ -0,0 +1,377 @@ +@charset "utf-8"; +@import url("fonts.css"); +body { + /*position: fixed;*/ + width:100%; + height:100%; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + background-color: white; + margin: 0; + padding: 0; + display:flex; + flex-direction: column; +} + +.status_sub_bar { + text-align: center; + font-weight: midium; + font-size: 15px; + color: #252525; + padding: 5px 0; +// opacity:0.9; +} + +/* .plugin-container { flex: 1; overflow:auto; } */ + +#action_bar { + border-bottom: rgba(0,0,0,0.07) solid 1px; + display:flex; + background-color: #fafafa; +} + +#header_bar { + min-height: 50px; + display:flex; + margin-left: auto; + margin-right: 10px; +} + +#action_bar, +#action_bar_back_button, +#action_bar_title, +#action_bar_menu { + min-height: 48px; +/* background-color: #fafafa;*/ +} + +#action_bar_more { + width: 56px; + display:flex; + align-items: center; + justify-content: center; + cursor: pointer; + margin: 15px 0 15px 15px; + /*background-color: red;*/ +} + +#action_bar_more:before { + content: ""; + background-image: url("../res/option_ic_more.svg"); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + width: 100%; + height: 18px; + display: block; +} + +#action_bar_back_button { + width: 56px; + display:flex; + align-items: center; + justify-content: center; + cursor: pointer; + -webkit-tap-highlight-color: transparent; +} + +#action_bar_menu { + width: 48px; + visibility:hidden; +} + +#action_bar_title { + text-overflow: ellipsis; + white-space: nowrap; + flex:1; + margin-left : 15px; +} + +#action_bar_title_main { + font-size:23px; + color: #252525; + font-stretch: condensed; +} + +#action_bar_title_sub { + font-size:13px; + color: #252525; + opacity: 0.6; + font-stretch: condensed; +} +/* +#loading { + display:flex; + flex-direction: column; +} + +#loading .img { + width: 60px; + height: 60px; + animation: spin 1s linear infinite; +} +*/ +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.dot { + fill: #499ebd; +} + +#icon_back .back_arrow { + fill: none; + stroke: #499ebd; + stroke-width: 7; +} + +#icon_back { + max-width:24px; + max-height:24px; +} + +#icon_menu_box { + display:flex; + align-items: center; + justify-content: center; +} + +#icon_menu { + max-height:24px; + cursor: pointer; + -webkit-tap-highlight-color: transparent; +} + +#action_bar_menu ul { + position: absolute; + right: 5px; + padding: 0px; + margin: 0px; + background-color: #fafafa; + max-height: 0; + transition: max-height 0.15s ease-out; + overflow: hidden; + border-radius: 5px; + z-index: 2; + position:absolute; + top:10px; +} + +#action_bar_menu ul li { + min-width: 150px; + display: flex; + align-items: center; + white-space: nowrap; +} + +#action_bar_menu ul li a { + display: inline-block; + margin: auto; + padding: 10px; + text-decoration: none; + color: black; + -webkit-tap-highlight-color: transparent; +} + +#action_bar_menu ul li:hover { + background: #eee; +} + +#action_bar_menu ul li:first-child { + border-radius: 5px 5px 0px 0px; + border-top: 1px #bbb solid; + border-left: 1px #bbb solid; + border-right: 1px #bbb solid; +} + +#action_bar_menu ul li:last-child { + border-radius: 0px 0px 5px 5px; + border-bottom: 1px #bbb solid; + border-left: 1px #bbb solid; + border-right: 1px #bbb solid; +} + +#action_bar_menu ul li:only-child { + border-radius: 5px; + border: 1px #bbb solid; +} + +#action_bar_menu ul li { + border-left: 1px #bbb solid; + border-right: 1px #bbb solid; +} + +#action_bar_menu.active ul { + max-height: 1000px; + transition: max-height 0.25s ease-in; +} + +.button { + border-radius: 5px; + border-color: #d4d4d4; + border-style: solid; + border-width: 1px; + display: inline; + padding: 8px; +} + +#power_icon_back_circle { + border-radius: 50%; + background: #3695dd; + width: 35px; + height: 35px; + margin: 10px 20px 0 auto; + display:flex; + align-items: center; +} + +.svg-class { + width: 100%; + height: 100px; +} + +#svg-status-id { + width: 100%; + height: 100%; +} + +#combo_area { + display: block; + align-items: center; + justify-content: center; + margin: 5px 0px; +} + +.mode_bar { + border-radius: 17px; + height: 30px; + width: 200px; + border: 2px solid #3695dd; +} + +.mode_bar_text { + color: #3695dd; + font-size: 17px; + text-align-last:center; +} + +.status-container { + text-align:center; + margin-bottom:0px; +} + +.status_item_title { + text-align: center; + font-weight: regular; + font-size: 15px; + color: #252525; + opacity:0.8; +} + +.status_item_content { + text-align: center; + font-weight: midium; + font-size: 15px; + color: #252525; +} + +.function_container{ + margin: 0 0 0 5%; + padding: 10px; + border-bottom: rgba(0,0,0,0.07) solid 1px; +} + +.function_item{ + height:75px; + width:100%; + color: white; +} + +.item_icon { + width:30px; + height:30px; + display:inline-block; +} + +.item_body { + width:150px; + height:40px; + display: inline-block; +} + +.function_item_singleline{ + margin: 0; + font-size: 0.8rem; + line-height: 1rem; + color: #252525; + margin-left: .8rem; + float: left; + padding-top: 1.275rem; + white-space: nowrap; + max-width: 12.4rem; + display:inline; +} +.function_item_multiline{ + padding-top: 0.8rem; + margin-left: .8rem;; + float: left; + display:inline; +} + +.function_item_multiline_1{ + margin: 0; + font-size: 0.8rem; + line-height: 0.85rem; + color: #252525; + opacity:0.9; +} + +.function_item_multiline_2{ + margin: 0; + color: #3695dd; + font-size: 0.7rem; + line-height: 0.7rem; + padding-top: 0.25rem; +} + +.row-custom { + content: ""; + clear: both; + display: block; + height: inherit; +} + +.left-col { + float: left; + width: 100%; + background-color: #fafafa; +} + +.right-col { + float: left; + width: 100%; +} + +@media only screen and (orientation: landscape) and (min-height: 360px){ + .left-col { + width: 50%; + height: inherit; + } + + .right-col { + width: 50%; + } + +.function_container{ + margin-left: 0; + } +} + +@media only screen and (min-width: 768px) { + .left-col { + height: inherit; + } +} diff --git a/plugin/plugin/icon.png b/plugin/plugin/icon.png new file mode 100644 index 0000000..e69de29 diff --git a/plugin/plugin/index.html b/plugin/plugin/index.html new file mode 100644 index 0000000..827db0c --- /dev/null +++ b/plugin/plugin/index.html @@ -0,0 +1,65 @@ + + + Sound Level Checker + + + + + + + + + + + + + + +
+ + + + +
SCHOOL - CLASS ROOM
+
Sound Level
+
+ + +
+ +
+
+ +
+
+ +
+
+
+
Loudness
+
+
+ +
+
+ 70 +  dBA +
+
+ +
+
+
+
+
+
+
+ +
+ +
+
+
+ + + diff --git a/plugin/plugin/js/capability_illuminanceMeasurement.js b/plugin/plugin/js/capability_illuminanceMeasurement.js new file mode 100644 index 0000000..0c3013a --- /dev/null +++ b/plugin/plugin/js/capability_illuminanceMeasurement.js @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2015 - 2017 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 capabilityIlluminanceMeasurement = { + 'href' : "/capability/illuminanceMeasurement/main/0", + 'illuminance_value' : 0, + + 'update' : function() { + ocfDevice.getRemoteRepresentation(this.href, this.onRepresentCallback); + }, + + 'onRepresentCallback' : function(result, deviceHandle, uri, rcsJsonString) { + scplugin.log.debug(className, arguments.callee.name, result); + scplugin.log.debug(className, arguments.callee.name, uri); + + if (result == "OCF_OK" || result == "OCF_RESOURCE_CHANGED" || result == "OCF_RES_ALREADY_SUBSCRIBED") { + this.soundLevel_value = rcsJsonString["illuminance"]; + document.getElementById("soundLevel_value").innerHTML = this.soundLevel_value; + + var def_width = 280; + this.soundLevel_value = this.soundLevel_value - 30; + + if (this.soundLevel_value < 0 ) this.soundLevel_value = 0; + + if (this.soundLevel_value > 100 ) + document.getElementById("level_bar5").style.width = 280; + else + document.getElementById("level_bar5").style.width = parseInt(def_width / 100 * this.soundLevel_value); + + if (this.soundLevel_value > 75 ) + document.getElementById("level_bar4").style.width = 280; + else + document.getElementById("level_bar4").style.width = parseInt(def_width / 75 * this.soundLevel_value); + + if (this.soundLevel_value > 55) + document.getElementById("level_bar3").style.width = 280; + else + document.getElementById("level_bar3").style.width = parseInt(def_width / 55 * this.soundLevel_value); + + if (this.soundLevel_value > 40) + document.getElementById("level_bar2").style.width = 280; + else + document.getElementById("level_bar2").style.width = parseInt(def_width / 40 * this.soundLevel_value); + + if (this.soundLevel_value > 30) + document.getElementById("level_bar1").style.width = 280; + else + document.getElementById("level_bar1").style.width = parseInt(def_width / 30 * this.soundLevel_value); + + //alert("soundLevel_value : " + this.soundLevel_value); + } + } +} diff --git a/plugin/plugin/js/capability_switch.js b/plugin/plugin/js/capability_switch.js new file mode 100644 index 0000000..ffe04b3 --- /dev/null +++ b/plugin/plugin/js/capability_switch.js @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2015 - 2017 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 capabilitySwitch = { + 'href' : "/capability/switch/main/0", + 'powerState' : "on", + + 'update' : function() { + ocfDevice.getRemoteRepresentation(this.href, this.onRepresentCallback); + }, + + 'onRepresentCallback' : function(result, deviceHandle, uri, rcsJsonString) { + scplugin.log.debug(className, arguments.callee.name, result); + scplugin.log.debug(className, arguments.callee.name, uri); + + if (result == "OCF_OK" || result == "OCF_RESOURCE_CHANGED" || result == "OCF_RES_ALREADY_SUBSCRIBED") { + capabilitySwitch.powerState = rcsJsonString["power"]; + + var image = document.getElementById("power_icon_back_circle"); + if (capabilitySwitch.powerState == "on") { + image.style.background="#3695dd"; + image.style.opacity="1"; + } else { + image.style.background="#252525"; + image.style.opacity="0.2"; + } + } + }, + + 'set' : function(state) { + scplugin.log.debug(className, arguments.callee.name, "power : " + state); + var setRcsJson = {}; + setRcsJson["power"] = state; + ocfDevice.setRemoteRepresentation(this.href, setRcsJson, this.onRepresentCallback); + }, + + 'powerToggle' : function() { + if (this.powerState == "on") { + this.set("off"); + } else { + this.set("on"); + } + } +} diff --git a/plugin/plugin/js/index-o.js b/plugin/plugin/js/index-o.js new file mode 100644 index 0000000..4d5240f --- /dev/null +++ b/plugin/plugin/js/index-o.js @@ -0,0 +1,141 @@ + +/* + * Copyright (c) 2015 - 2017 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 ocfDevice; +var className = "illuminanceMeter"; +var capabilities = [capabilitySwitch, capabilityIlluminanceMeasurement]; + +window.onload = function () { + console.log("version : 0.0.1"); + init(); + + document.body.addEventListener('click', function () { + closeListBox(); + }) +}; + +function init() { + console.log("-----------init-----------"); + scplugin.manager.getOCFDevices(getOCFDeviceCB); +} + +function getOCFDeviceCB(devices) { + console.log("getOCFDeviceCB : " + devices.length); + + for (var i in devices) { + console.log("deviceHandle: " + devices[i].deviceHandle); + console.log("deviceName: " + devices[i].deviceName); + console.log("deviceType: " + devices[i].deviceType); + console.log("metadata: " + devices[i].metadata); + } + + setMainDevice(devices[0]); + ocfDevice.subscribe(onRepresentCallback); + + for (var i = 0; i < capabilities.length; i++) { + capabilities[i].update(); + } +} + +function onRepresentCallback(result, deviceHandle, uri, rcsJsonString) { + for (var i = 0; i < capabilities.length; i++) { + if ( capabilities[i].href == uri) { + capabilities[i].onRepresentCallback(result, deviceHandle, uri, rcsJsonString); + } + } +} + +function setMainDevice(device) { + scplugin.log.debug(className, arguments.callee.name, "set ocf device : " + device.deviceName); + ocfDevice = device; +} + +function backAction() { + scplugin.manager.close(); +} + +function onPowerBtnClicked() { + capabilitySwitch.powerToggle(); +} + +function closeListBox(event) { + // var x1 = event.offsetLeft; + // var y1 = event.offsetTop; + // var x2 = event.offsetWidth; + // var y2 = event.offsetHeight; + // var x = event.onmouseout.arguments["0"].clientX; + // var y = event.onmouseout.arguments["0"].clientY; + // if(x < x1 || x > x1+x2) + // capabilityFanspeed.closeListbox(); + // else if(y < y1 || y > y1+y2) + if (document.getElementById("listbox").classList.contains('show')) { + capabilityFanspeed.closeListbox(); + } +} + +function changeLevelWidth() { + // var level_box = document.getElementById("level_bar0"); + + var def_width = 280; +// var value_bar0 = parseInt(Math.random() * 256); + var value_bar0 = parseInt(def_width * 256); + + // level_box.style.width = value_bar0; + document.getElementById("level_bar0").style.width = value_bar0; +} + +function changeLevelWidth1() { + + // var illuminance_value = document.getElementById("illuminance_value").vlaue; + var illuminance_value = 15; + var def_width = 280; + + if (illuminance_value > 140 ) + document.getElementById("level_bar5").style.width = 280; + else + document.getElementById("level_bar5").style.width = parseInt(def_width / 140 * illuminance_value); + + if (illuminance_value > 70 ) + document.getElementById("level_bar4").style.width = 280; + else + document.getElementById("level_bar4").style.width = parseInt(def_width / 70 * illuminance_value); + + if (illuminance_value > 40) + document.getElementById("level_bar3").style.width = 280; + else + document.getElementById("level_bar3").style.width = parseInt(def_width / 40 * illuminance_value); + + if (illuminance_value > 20) + document.getElementById("level_bar2").style.width = 280; + else + document.getElementById("level_bar2").style.width = parseInt(def_width / 20 * illuminance_value); + + if (illuminance_value > 10) + document.getElementById("level_bar1").style.width = 280; + else + document.getElementById("level_bar1").style.width = parseInt(def_width / 10 * illuminance_value); + +} + +/* +function changeLevelWidth() { + var levelValue = document.getElementById("illuminance_value"); + + var lb3 = document.getElementById("level_bar3"); + lb3.style.width = levelValue / 8 * 28; +} +*/ diff --git a/plugin/plugin/js/index.js b/plugin/plugin/js/index.js new file mode 100644 index 0000000..a5a982f --- /dev/null +++ b/plugin/plugin/js/index.js @@ -0,0 +1,89 @@ + +/* + * Copyright (c) 2015 - 2017 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 ocfDevice; +var className = "SoundLevelChecker"; +var capabilities = [capabilitySwitch, capabilityIlluminanceMeasurement]; + +window.onload = function () { + console.log("version : 0.0.1"); + init(); + + document.body.addEventListener('click', function () { + closeListBox(); + }) +}; + +function init() { + console.log("-----------init-----------"); + scplugin.manager.getOCFDevices(getOCFDeviceCB); +} + +function getOCFDeviceCB(devices) { + console.log("getOCFDeviceCB : " + devices.length); + + for (var i in devices) { + console.log("deviceHandle: " + devices[i].deviceHandle); + console.log("deviceName: " + devices[i].deviceName); + console.log("deviceType: " + devices[i].deviceType); + console.log("metadata: " + devices[i].metadata); + } + + setMainDevice(devices[0]); + ocfDevice.subscribe(onRepresentCallback); + + for (var i = 0; i < capabilities.length; i++) { + capabilities[i].update(); + } +} + +function onRepresentCallback(result, deviceHandle, uri, rcsJsonString) { + for (var i = 0; i < capabilities.length; i++) { + if ( capabilities[i].href == uri) { + capabilities[i].onRepresentCallback(result, deviceHandle, uri, rcsJsonString); + } + } +} + +function setMainDevice(device) { + scplugin.log.debug(className, arguments.callee.name, "set ocf device : " + device.deviceName); + ocfDevice = device; +} + +function backAction() { + scplugin.manager.close(); +} + +function onPowerBtnClicked() { + capabilitySwitch.powerToggle(); +} + +function closeListBox(event) { + // var x1 = event.offsetLeft; + // var y1 = event.offsetTop; + // var x2 = event.offsetWidth; + // var y2 = event.offsetHeight; + // var x = event.onmouseout.arguments["0"].clientX; + // var y = event.onmouseout.arguments["0"].clientY; + // if(x < x1 || x > x1+x2) + // capabilityFanspeed.closeListbox(); + // else if(y < y1 || y > y1+y2) + if (document.getElementById("listbox").classList.contains('show')) { + capabilityFanspeed.closeListbox(); + } +} + diff --git a/plugin/plugin/manifest.xml b/plugin/plugin/manifest.xml new file mode 100644 index 0000000..65c4509 --- /dev/null +++ b/plugin/plugin/manifest.xml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/plugin/plugin/res/bar-icon.png b/plugin/plugin/res/bar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7d75b4f57b19daa7c0cc49ef5a4e3c08ab8dc11e GIT binary patch literal 3124 zcmeHJSx}Q#6uuBy6oIi+_NCJ(2m!H3L9{^XhR6`nVJQ$29RxxE!={)33CpN$g`kyy zAe&$W*$ZJ8q9ULHM9?HAB!Q^N))XZ`1Y+oq4}JH+>2!wkaPQ1_&-u=|-@|wBZ(b-j z%`Jvo005fq#}1zY09Fft(lvEe2&tWRz6@=f;tsldt3#2be)d-YG-llo|LlFSKqBdpMt@=ttFK(BA09{=hqy!|(%llJC@L6*ZLCA#Vz z!`YqJMk-F~ly%-gmi>`~yT$Ot>mO^=($wIKN1Wo&c~i>!CkkW*W_?3p2j-;mV&M&f zD39o&1Woc^2ET%nc{}V`LAa^@D3)sGiZRDhI*r_*kxmeiKBZWljkYSMM~@h*tW${~VNJzpi! zPO!!x%;r1B6nBYp?M*&ekW?kfs8-jdI%M*+-W&ssyI%e1QyH>%0L3 z{Z8ZhwmCytL5yf|X+u1(fi(%W;ReaN?Dp(ovbL>LKApNkuue`+rcwHuMxqP->$n_I z@(CIoI-5#MO--Gj9wOJm8?7|Cr;aZ_u4!SrFi4DHfUGzg`L;$EIOvApn(+6NFob`Aqu&QNz_xS)@oL8AN5CUl6cw9#RX$-VbKw@ z2_n9G8&j7nKGHogbN#wqaBoJf{SFA-h%Z(kw?3dn8-UKrVVr&Or%6}Vt5?6|-MqOg zT|>2>4Tp!|a8EvI0K%gXp$h;D`FqPxIGPETZZzO~=Iva_atfKl<@&i?ka`ZTcGY)T zGea+>sHB8PpHW5{WlF}z29Vx;&6nvu`yz`h}fQ4 zu9PDB9<5ZOStROcp)XRBXYM%^ZUUsNXq6OQPZY`l>l9N;ccz*;kKBC$kaOE=!Sm9_ zu%Vn@?=rfxxjf+v*k>z-Y#eF7v2G}^p}>X$|7!(oW~$iy`YQ+n@T|{fGqA~rz5z3f zB#*?c17^4v;h;qJ*+uF7BF@MPVoX8(*DW1BK3L>p7x;=UMGgmstkZ#J|FjLBYeuW+P4iXXh8x-#g3X3 zSJy1REPO#G|1BVfNONk|-=0xl&>qzI8pS|+}=41*^~EPvf3Y* zyZgKz?153VzcNwPWuP!nUrk+ literal 0 HcmV?d00001 diff --git a/plugin/plugin/res/board_ic_arrow_left.png b/plugin/plugin/res/board_ic_arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6118e75d67c1033f078ff4a5f825792b7da293 GIT binary patch literal 603 zcmV-h0;K(kP)Ao#Z@9XoIig5to#V3yF6*K{-XiL-h{vJz(INzagM6RH` z>N0z^a^b9fpP0o0S)4t9l>{77KoW7p07=CW0VEkG`c-TM=PNc&RG_@-HaBq20J7LP z(SBm~ZoGCJKHHVkLqH4S2m;cE6BI}zPOy{o2+mO|PLLIpSKS+co#XIFTbeBdxA2Tp z1K4WC@d`8t9B)8#!SMn#C!Bx3irJmO#~W`sKv_Ok(8@wQINlO$yHxTyXf{YbuVS-6 z3h_s=0r2cNylYGIo;1(|q^2!Rku;EIq|n

X2e=n5jaFwdJY?DcWP7kv*aY0VX#@ z15H3W;W8lACkvzjNy?*Vu}G4J7epe78KAQFWd$zJ|5!=GE!-emwrYR| pNS|$KUcsD5j4{R-V~jDTxgUDi3H@y@m6iYi002ovPDHLkV1n0{{VV_g literal 0 HcmV?d00001 diff --git a/plugin/plugin/res/ic_power.svg b/plugin/plugin/res/ic_power.svg new file mode 100644 index 0000000..91f8202 --- /dev/null +++ b/plugin/plugin/res/ic_power.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/plugin/plugin/res/option_ic_more.svg b/plugin/plugin/res/option_ic_more.svg new file mode 100644 index 0000000..3ea40c9 --- /dev/null +++ b/plugin/plugin/res/option_ic_more.svg @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/plugin/plugin/res/spk-icon.png b/plugin/plugin/res/spk-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ef4815b70be9a86f0686a9efcb265baa9cd42f48 GIT binary patch literal 23435 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

O_l9gG4BIfy# zw#TCdt-N4zkU(whndeq^&I^@X`I%b2-l3~A1r4p%<6*ZjoQpg1T;e6%mz*mXn2;Jo zkglaYinBj`CXz8XDS}?hQb;dNsp!MpujawSsZImAR&!;i4bwlBD0Y*}*2-2#!dug^ zZuhZl=4Drboev|-jf`GKoE7Rg+U{5X?pfU~(bU*AiNae|Jj7}oVdJR6RK8dmWYRST zhY(Td#M6DDjg42qNDdhxfQ(<}LP`+3vZ~bL;`xrv9yrzKSr?XW50RTuP>nCd`OxC(1i(h++4_z{vb#yS*kGr>EJhbR(M$HRWi zZE#)=1D&(7^$K6q2EFV&!K9`MsIR1zj_@GetI%wM_?hd@LqW^9URb3t zHu5Of9&`+F(MNk1bq_x%MWdCc@{!135r=B4=aoReh8O>Hb@DrxAw>c-j5i=;Nl-RY zXbWF>(HH0CWXC8E90C2iyuKhFSV9`Y>7wjUA_*u;d1T&)-W?Ca0FHH&D1Wl%R=6nx zcf@_O&SCe?;0P`_YexBGyUj)y-q8WnEvfX;;EB|w;yWn&-?L0|^|hjp3>|HU4%CIg zB@MCn8YNYvF8{}SAMg}RXh0>`kb?XCISf$^ASgnA*V}D~5FncDhFzb^6y>)K0_H#R z>C%TZo}0(f!~DIFS;jxMd3Nl|msD1;(}-HqKtz%)Q#YxjK4ENLmq&dBZV+qjwe17(Hn_#*dwS>;+X; z?fD6--lGF;3A;>gbE*y5Q3g#Xl7&jqYihRwz{f@=_kV|oXa-^9Dj;-H!+5;DLkv{_ zGjx9I38zlY7xLT`LEjPItGxJWu-Cm#uAb2u#Pmoy7w8082Sm8rx?F0j7o~w2oY3jm zEH10zHLvZOl1YF6UZe2x_CIkk|G3u~)FZ=p_7Q1txIQVg(muu+WiJljD(bUc@09|; z9=GP*YFUwH%@~{N!&us3 zwe5D1gVFQ=^4fkNG@sUI2oL-V7ZVGj#o+iBB+A!)JZt4OKJE@75#Z{)+}YLT&iCb8 z+$46*d!X3arg8aAUf;dMaAW(wC8V$PZK)O7M|fR{3x3lB!8?N8oA<_z*0E-1;CmjM zf5ZPbeErS^r_`_~=+vqzdH0R6(|Ie=fwTV7vcDOikKO%Ou}I(sAf+EbfZ!J;gmFUD zTop(kK}bM5B$rlxDNQcE>EELCyZyUN>`^l-vv0Qew+oz7HZ3-`SSp}rcCyp1^CKLqpLabl#%bMg*97^B ziKdwCL$_e97p)T>0!rQyVdp(ysGwfJ5!6pB#ek9OUiKPeO0;MsX9JN-zao z*9qAYGoWw~jKfTCpl^0`X>Vii7~Xy8%fK9ALVmzHTyb`ujcl>Kk>B!dwKMlx!=YtR z1LU|u9_i0tGPzLe`Rh9U)rC;Wp%z6kb7`q^6ss6-_5a z1LzDhw%_?g%=VgUYHN`rMO9yQyzt-al&JZ-%X1Z%oJxkZ(s&Yf0SMTG$kuc1YO1l> z)Ry~|uMci;?72321r>9M5P->mZ+@)TZU(5vM+1G;D!eRn9Q|&Gn1n3DZ$%{7oaWOX_T3F6R z-qnqN4@b1?qkvi4g67~@)SkI?;dJs&`?FOLZk8@M3gL9)|1d$By%N^t&82H)=nEJs z?rM7tQQ+3ZfxyG-i~-k-tvld{upT)I9jk(zvJw!_x*^7$I_p$m%#Re7x&SPl7TASK z7^GPG1m-AQ@U~=ODu?qmCdyHfMU_(XU7uozBVj-(S{or za|h9(sbw=b$BLy!G0D1$mBHkyP}JLn9LtIerHn=~!@hpZ=7wS4w!`sm!4Xh0*?zOH z^k-6m4WN&dvftWf(U@kV1vZO@qqiW%BKQhdX)FG+%t`dIQAQu8^45^VdS6xRNYzq{ z-mnI$&Broe{H1OGi_@7-)D><6^LM3ylH38P=#NvY_V342ymbe?XT*_Pp9S(MdkFJm z5-KtUJ?5oo3C3n$>rF+TwgXSZWVhcP|9*2IVKuyS6uOsra#6NsQ1h1d{vox%=AeDZ zU)it-`srNN76FK6CnU;N^x>dRx#LK+P|9y?9wE_yZQtBN>KK8I4GUdy(HX_({eHae zDt=fiihlP-(eFoIrn9)&vgV${iWkd&i#ZQvrUpbxsw~~;>5|`KHy}v0F-%zG;e4?q=B$bL-tF~R&#%XBRWkb=#>}XXYNv zF-BW%V`kD?+=J1@s5{kfEvyyo>GJp;3i zlCaGdiV6!!S+W3J1MGf`su)t^WP06j6M@qC2^gJoTys}@HlNUuMvl`6(xNM2U!FjL zBhB&bp*3lN>N2IQva^o*qMv%ws&@aos$WIbO3c#@%af%7U^&_hNY-zVn_o{Mj~1Q_ zOPy|7)fsNiO9&^}n^l9mKbEJgmc+7AR2)J6;xxt(-wJ&Rb59G<5i&0`jP%$Sz7Kw{ zC_Pa(_=bKNG7(Rv?_QOweYVDVY}Gh;(4W^R3+_QGt^rOhX+^l8jCG8x%Hi24ZP<$O zCb_y^h?upO@Q*Kw+ZVfR`wS2<^QuGpipKd-`HrdsCc!~sx}^T640V>a2B{}Xm-PP1 z0G;}wHIeU3f570x@u-I$v&4FD8Mn(&Fl!Z=suPTF;G4=|S7bv7-Z0FIJecoTL zxS^P-)S~k8u%60L(3ky&Qk&CE&ezLql<}D<+8#FqecsugvghPGGEHxz+%5+aiL_(q zPV_G`vnn;-j**Vr!_N5b4K&#(KYeEpz_|ZB5+DJi7sw zGB?b#mFZe+lg2}!ykEA(ahW(Bk0Ns~27b3?!yz$4K}FX(#fD?kPZjwC1KyY0RiBmM z_PA{ezF)(e#(~vrI57+JC`c@;Mt22#@vr5&b1sq!;j`L_y9uSRw;?gL8_X3d8+qe^ zkrrNgzqFAm_&aMwJ|g`2(cImeQS#}U3^ZXu?HDoy5ro|0LO5Sr?l!Oyd1n^4JW^%$};)6Zt%l)f{bBrio%vv8R zZ#m^!S{k0kRuX#esi>$7W+@>V8k;^Kp#2#=k_^R; zrVS5%!=O(ZI{U73JPx~0^wHMVVvE(7aH9Tgzzp#!kDr2_qr^S*ITF#K)0~{B8*>1v z@+e?378bMCA2xecd4?x#Ra;KV)sZerhsx_^l|Q!hiHXY6XKrQg=_t3G@7G0O#9}3i zX3C(u=zhiAY-DJdtaD}160Urfbi^yR4NV1b)ZLA}jxs41M;<2#$c)&%Ff&S-pETz2 z!PL{j?V`PV-Jz7X?IsAcx6aXxAHoDH;&Z*zh(0dDrV?pGsYJTMGP&YR=lClaU;eY)x#pB4jQ0@SmtQ^8c--JZ`