2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 var validator = xwalk.utils.validator;
18 var converter = xwalk.utils.converter;
19 var types = validator.Types;
20 var T = xwalk.utils.type;
21 var native = new xwalk.utils.NativeManager(extension);
23 var WidgetSizeType = {
33 EASY_1x1 : 'EASY_1x1',
34 EASY_3x1 : 'EASY_3x1',
35 EASY_3x3 : 'EASY_3x3',
39 function createObjects(data, func, widget) {
41 var objects = native.getResultObject(data);
43 objects.forEach(function (d) {
44 array.push(new func(d, widget));
50 function WidgetSize(data) {
51 Object.defineProperties(this, {
65 function WidgetVariant(data) {
66 Object.defineProperties(this, {
83 value: data.previewImagePath,
88 value: data.needsMouseEvents,
93 value: data.needsTouchEffect,
98 value: data.needsFrame,
105 function WidgetInstance(data, widget) {
106 Object.defineProperties(this, {
120 WidgetInstance.prototype.changeUpdatePeriod = function() {
121 var args = validator.validateMethod(arguments, [{
127 callArgs.widgetId = this.widget.id;
128 callArgs.instanceId = this.id;
129 callArgs.seconds = args.seconds;
131 var ret = native.callSync('WidgetInstance_changeUpdatePeriod', callArgs);
133 if (native.isFailure(ret)) {
134 throw native.getErrorObject(ret);
138 WidgetInstance.prototype.sendContent = function() {
139 var args = validator.validateMethod(arguments, [{
141 type: types.DICTIONARY,
143 name : 'updateIfPaused',
144 type : types.BOOLEAN,
148 callArgs.widgetId = this.widget.id;
149 callArgs.instanceId = this.id;
150 callArgs.data = args.data;
151 callArgs.updateIfPaused = args.updateIfPaused;
153 var ret = native.callSync('WidgetInstance_sendContent', callArgs);
155 if (native.isFailure(ret)) {
156 throw native.getErrorObject(ret);
160 WidgetInstance.prototype.getContent = function() {
161 var args = validator.validateMethod(arguments, [{
162 name : 'successCallback',
163 type : types.FUNCTION,
165 name : 'errorCallback',
166 type : types.FUNCTION,
170 callArgs.widgetId = this.widget.id;
171 callArgs.instanceId = this.id;
173 var callback = function(result) {
174 if (native.isFailure(result)) {
175 args.errorCallback(native.getErrorObject(result));
177 args.successCallback(native.getResultObject(result));
181 var result = native.call('WidgetInstance_getContent', callArgs, callback);
182 if (native.isFailure(result)) {
183 throw native.getErrorObject(result);
187 function Widget(data) {
188 Object.defineProperties(this, {
195 value: data.applicationId,
199 setupApplicationId: {
200 value: data.setupApplicationId ? data.setupApplicationId : null,
205 value: data.packageId,
210 value: data.noDisplay,
217 Widget.prototype.getName = function() {
218 var args = validator.validateMethod(arguments, [{
226 callArgs.widgetId = this.id;
229 callArgs.locale = args.locale;
232 var ret = native.callSync('Widget_getName', callArgs);
234 if (native.isFailure(ret)) {
235 throw native.getErrorObject(ret);
237 return native.getResultObject(ret);
241 Widget.prototype.getInstances = function() {
242 var args = validator.validateMethod(arguments, [{
243 name : 'successCallback',
244 type : types.FUNCTION,
246 name : 'errorCallback',
247 type : types.FUNCTION,
252 var callback = function(result) {
253 if (native.isFailure(result)) {
254 native.callIfPossible(args.errorCallback, native.getErrorObject(result));
256 var instances = createObjects(result, WidgetInstance, this);
257 args.successCallback(instances);
262 callArgs.widgetId = this.id;
264 var result = native.call('Widget_getInstances', callArgs, callback);
265 if (native.isFailure(result)) {
266 throw native.getErrorObject(result);
270 Widget.prototype.getVariant = function() {
271 var args = validator.validateMethod(arguments, [{
274 values: T.getValues(WidgetSizeType)
278 callArgs.widgetId = this.id;
279 callArgs.sizeType = args.sizeType;
281 var ret = native.callSync('Widget_getVariant', callArgs);
283 if (native.isFailure(ret)) {
284 throw native.getErrorObject(ret);
286 return new WidgetVariant(native.getResultObject(ret));
290 Widget.prototype.getVariants = function() {
291 var args = validator.validateMethod(arguments, [{
292 name : 'successCallback',
293 type : types.FUNCTION,
295 name : 'errorCallback',
296 type : types.FUNCTION,
301 var callback = function(result) {
302 if (native.isFailure(result)) {
303 native.callIfPossible(args.errorCallback, native.getErrorObject(result));
305 var variants = createObjects(result, WidgetVariant);
306 args.successCallback(variants);
311 callArgs.widgetId = this.id;
313 var result = native.call('Widget_getVariants', callArgs, callback);
314 if (native.isFailure(result)) {
315 throw native.getErrorObject(result);
319 function ListenerManager(native, listenerName) {
322 this.nativeSet = false;
323 this.native = native;
324 this.listenerName = listenerName;
327 ListenerManager.prototype.onListenerCalled = function(msg) {
328 for (var watchId in this.listeners) {
329 if (this.listeners.hasOwnProperty(watchId) ) {
330 this.listeners[watchId](this.native.getResultObject(msg));
335 ListenerManager.prototype.addListener = function(callback) {
336 var id = this.nextId;
337 if (!this.nativeSet) {
338 this.native.addListener(this.listenerName, this.onListenerCalled.bind(this));
339 this.nativeSet = true;
341 this.listeners[id] = callback;
346 ListenerManager.prototype.removeListener = function(watchId) {
347 if (this.listeners.hasOwnProperty(watchId)) {
348 delete this.listeners[watchId];
352 var WIDGET_STATE_CHANGE_LISTENER = 'WidgetStateChangeCallback';
353 var widgetStateChangeListener = new ListenerManager(native, WIDGET_STATE_CHANGE_LISTENER);
355 Widget.prototype.addStateChangeListener = function() {
356 var args = validator.validateMethod(arguments, [{
357 name : 'eventCallback',
358 type : types.FUNCTION,
361 var result = native.callSync('Widget_addStateChangeListener', {widgetId : this.id});
362 if (native.isFailure(result)) {
363 throw native.getErrorObject(result);
366 var func = function(msg) {
367 if (msg.widgetId === this.id) {
368 args.eventCallback(new WidgetInstance(msg, this), msg.event);
372 return widgetStateChangeListener.addListener(func);
375 Widget.prototype.removeStateChangeListener = function() {
376 var args = validator.validateMethod(arguments, [{
381 widgetStateChangeListener.removeListener(args.watchId);
383 var result = native.callSync('Widget_removeStateChangeListener', {widgetId : this.id});
384 if (native.isFailure(result)) {
385 throw native.getErrorObject(result);
389 function WidgetServiceManager() {
392 WidgetServiceManager.prototype.getWidget = function() {
393 var args = validator.validateMethod(arguments, [{
399 callArgs.widgetId = args.widgetId;
401 var ret = native.callSync('WidgetServiceManager_getWidget', callArgs);
403 if (native.isFailure(ret)) {
404 throw native.getErrorObject(ret);
406 return new Widget(native.getResultObject(ret));
410 WidgetServiceManager.prototype.getWidgets = function() {
411 var args = validator.validateMethod(arguments, [{
412 name : 'successCallback',
413 type : types.FUNCTION,
415 name : 'errorCallback',
416 type : types.FUNCTION,
426 var callback = function(result) {
427 if (native.isFailure(result)) {
428 native.callIfPossible(args.errorCallback, native.getErrorObject(result));
430 var widgets = createObjects(result, Widget);
431 args.successCallback(widgets);
436 if (args.packageId) {
437 callArgs.packageId = args.packageId;
440 var result = native.call('WidgetServiceManager_getWidgets', callArgs, callback);
441 if (native.isFailure(result)) {
442 throw native.getErrorObject(result);
446 WidgetServiceManager.prototype.getPrimaryWidgetId = function() {
447 var args = validator.validateMethod(arguments, [{
453 callArgs.id = args.id;
455 var ret = native.callSync('WidgetServiceManager_getPrimaryWidgetId', callArgs);
457 if (native.isFailure(ret)) {
458 throw native.getErrorObject(ret);
460 return native.getResultObject(ret);
464 WidgetServiceManager.prototype.getSize = function() {
465 var args = validator.validateMethod(arguments, [{
468 values: T.getValues(WidgetSizeType)
472 callArgs.sizeType = args.sizeType;
474 var ret = native.callSync('WidgetServiceManager_getSize', callArgs);
476 if (native.isFailure(ret)) {
477 throw native.getErrorObject(ret);
479 return new WidgetSize(native.getResultObject(ret));
484 exports = new WidgetServiceManager();