1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // FIXME: A lot of these methods should throw NOT_SUPPORTED_ERR on desktop.
6 // There is no easy way to do verify which methods are supported yet.
8 // Save the latest screenState value. We use this to pass the previous
9 // state when calling the listener.
10 var screenState = undefined;
12 var defaultScreenBrightness = undefined;
13 var screenStateChangedListener;
22 'SCREEN_BRIGHT': 3 // Deprecated.
33 function callListener(oldState, newState) {
34 if (screenStateChangedListener == null)
36 var previousState = resources.SCREEN.states[oldState];
37 var changedState = resources.SCREEN.states[newState];
38 screenStateChangedListener(oldState, newState);
41 var postMessage = function(msg) {
42 extension.postMessage(JSON.stringify(msg));
45 var sendSyncMessage = function(msg) {
46 return extension.internal.sendSyncMessage(JSON.stringify(msg));
49 function getScreenState() {
51 'cmd': 'PowerGetScreenState'
53 var r = JSON.parse(sendSyncMessage(msg));
54 screenState = r.state;
57 extension.setMessageListener(function(msg) {
58 var m = JSON.parse(msg);
59 if (m.cmd == 'ScreenStateChanged') {
60 var newState = m.state;
61 if (screenState !== newState) {
62 callListener(screenState, newState);
63 screenState = newState;
68 exports.request = function(resource, state) {
69 // Validate permission to 'power'.
70 // throw new WebAPIException(SECURITY_ERR);
72 if (typeof resource !== 'string' || typeof state !== 'string') {
73 throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
76 if (!resources.hasOwnProperty(resource)) {
77 throw new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR);
80 if (!resources[resource].states.hasOwnProperty(state)) {
81 throw new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR);
84 // Exception check: SCREEN_OFF is a state cannot be requested
85 if (resource === 'SCREEN' && state === 'SCREEN_OFF') {
86 throw new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR);
90 'cmd': 'PowerRequest',
91 'resource': resources[resource].type,
92 'state': resources[resource].states[state]
96 exports.release = function(resource) {
97 // Validate permission to 'power'. Do not throw, just bail out.
99 if (typeof resource !== 'string')
100 throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
102 if (!resources.hasOwnProperty(resource))
103 throw new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR);
106 'cmd': 'PowerRelease',
107 'resource': resources[resource].type
111 exports.setScreenStateChangeListener = function(listener) {
112 // No permission validation.
114 if (typeof listener !== 'function')
115 throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
117 // FIXME: According to docs, it should throw INVALID_VALUES_ERR if input
118 // parameters contain an invalid value. Verify the Tizen 2.x impl.
120 // This will cache an initial value, that is necessary to ensure we
121 // always have a previous value.
124 screenStateChangedListener = listener;
126 'cmd': 'SetListenToScreenStateChange',
131 exports.unsetScreenStateChangeListener = function() {
132 // No permission validation.
133 screenStateChangedListener = null;
135 'cmd': 'SetListenToScreenStateChange',
140 exports.getScreenBrightness = function() {
141 var r = JSON.parse(sendSyncMessage({
142 'cmd': 'PowerGetScreenBrightness'
145 throw new tizen.WebAPIException(tizen.WebAPIException.NOT_SUPPORTED_ERR);
148 var brightness = r['brightness'];
149 if (defaultScreenBrightness === undefined)
150 defaultScreenBrightness = brightness;
154 exports.setScreenBrightness = function(brightness) {
155 // Validate permission to 'power'.
156 // throw new WebAPIException(SECURITY_ERR);
157 if (typeof brightness !== 'number' || !isFinite(brightness))
158 throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
160 if (brightness < 0 || brightness > 1)
161 throw new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR);
164 'cmd': 'PowerSetScreenBrightness',
169 exports.isScreenOn = function() {
171 if (typeof screenState !== 'number')
172 throw new tizen.WebAPIException(tizen.WebAPIException.UNKNOWN_ERR);
173 return screenState !== resources['SCREEN'].states['SCREEN_OFF'];
176 exports.restoreScreenBrightness = function() {
177 // Validate permission to 'power'.
178 // throw new WebAPIException(SECURITY_ERR);
180 if (defaultScreenBrightness === undefined)
181 exports.getScreenBrightness();
183 if (defaultScreenBrightness < 0 || defaultScreenBrightness > 1)
184 throw new tizen.WebAPIException(tizen.WebAPIException.UNKNOWN_ERR);
187 'cmd': 'PowerSetScreenBrightness',
188 'value': defaultScreenBrightness
192 exports.turnScreenOff = function() {
193 // Validate permission to 'power'.
194 // throw new WebAPIException(SECURITY_ERR);
196 // FIXME: throw UNKNOWN_ERR during failure to set the new value.
198 'cmd': 'PowerSetScreenEnabled',
203 exports.turnScreenOn = function() {
204 // Validate permission to 'power'.
205 // throw new WebAPIException(SECURITY_ERR);
207 // FIXME: throw UNKNOWN_ERR during failure to set the new value.
209 'cmd': 'PowerSetScreenEnabled',