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 = {
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, [
129 callArgs.widgetId = this.widget.id;
130 callArgs.instanceId = this.id;
131 callArgs.seconds = args.seconds;
133 var ret = native.callSync('WidgetInstance_changeUpdatePeriod', callArgs);
135 if (native.isFailure(ret)) {
136 throw native.getErrorObject(ret);
140 WidgetInstance.prototype.sendContent = function() {
141 var args = validator.validateMethod(arguments, [
144 type: types.DICTIONARY
147 name: 'updateIfPaused',
153 callArgs.widgetId = this.widget.id;
154 callArgs.instanceId = this.id;
155 callArgs.data = args.data;
156 callArgs.updateIfPaused = args.updateIfPaused;
158 var ret = native.callSync('WidgetInstance_sendContent', callArgs);
160 if (native.isFailure(ret)) {
161 throw native.getErrorObject(ret);
165 WidgetInstance.prototype.getContent = function() {
166 var args = validator.validateMethod(arguments, [
168 name: 'successCallback',
172 name: 'errorCallback',
178 callArgs.widgetId = this.widget.id;
179 callArgs.instanceId = this.id;
181 var callback = function(result) {
182 if (native.isFailure(result)) {
183 args.errorCallback(native.getErrorObject(result));
185 args.successCallback(native.getResultObject(result));
189 var result = native.call('WidgetInstance_getContent', callArgs, callback);
190 if (native.isFailure(result)) {
191 throw native.getErrorObject(result);
195 function Widget(data) {
196 Object.defineProperties(this, {
203 value: data.applicationId,
207 setupApplicationId: {
208 value: data.setupApplicationId ? data.setupApplicationId : null,
213 value: data.packageId,
218 value: data.noDisplay,
225 Widget.prototype.getName = function() {
226 var args = validator.validateMethod(arguments, [
236 callArgs.widgetId = this.id;
239 callArgs.locale = args.locale;
242 var ret = native.callSync('Widget_getName', callArgs);
244 if (native.isFailure(ret)) {
245 throw native.getErrorObject(ret);
247 return native.getResultObject(ret);
251 Widget.prototype.getInstances = function() {
252 var args = validator.validateMethod(arguments, [
254 name: 'successCallback',
258 name: 'errorCallback',
259 type: types.FUNCTION,
265 var callback = function(result) {
266 if (native.isFailure(result)) {
267 native.callIfPossible(args.errorCallback, native.getErrorObject(result));
269 var instances = createObjects(result, WidgetInstance, this);
270 args.successCallback(instances);
275 callArgs.widgetId = this.id;
277 var result = native.call('Widget_getInstances', callArgs, callback);
278 if (native.isFailure(result)) {
279 throw native.getErrorObject(result);
283 Widget.prototype.getVariant = function() {
284 var args = validator.validateMethod(arguments, [
288 values: T.getValues(WidgetSizeType)
293 callArgs.widgetId = this.id;
294 callArgs.sizeType = args.sizeType;
296 var ret = native.callSync('Widget_getVariant', callArgs);
298 if (native.isFailure(ret)) {
299 throw native.getErrorObject(ret);
301 return new WidgetVariant(native.getResultObject(ret));
305 Widget.prototype.getVariants = function() {
306 var args = validator.validateMethod(arguments, [
308 name: 'successCallback',
312 name: 'errorCallback',
313 type: types.FUNCTION,
319 var callback = function(result) {
320 if (native.isFailure(result)) {
321 native.callIfPossible(args.errorCallback, native.getErrorObject(result));
323 var variants = createObjects(result, WidgetVariant);
324 args.successCallback(variants);
329 callArgs.widgetId = this.id;
331 var result = native.call('Widget_getVariants', callArgs, callback);
332 if (native.isFailure(result)) {
333 throw native.getErrorObject(result);
337 function ListenerManager(native, listenerName) {
340 this.nativeSet = false;
341 this.native = native;
342 this.listenerName = listenerName;
345 ListenerManager.prototype.onListenerCalled = function(msg) {
346 for (var watchId in this.listeners) {
347 if (this.listeners.hasOwnProperty(watchId)) {
348 this.listeners[watchId](this.native.getResultObject(msg));
353 ListenerManager.prototype.addListener = function(callback) {
354 var id = this.nextId;
355 if (!this.nativeSet) {
356 this.native.addListener(this.listenerName, this.onListenerCalled.bind(this));
357 this.nativeSet = true;
359 this.listeners[id] = callback;
364 ListenerManager.prototype.removeListener = function(watchId) {
365 if (this.listeners.hasOwnProperty(watchId)) {
366 delete this.listeners[watchId];
370 var WIDGET_STATE_CHANGE_LISTENER = 'WidgetStateChangeCallback';
371 var widgetStateChangeListener = new ListenerManager(native, WIDGET_STATE_CHANGE_LISTENER);
373 Widget.prototype.addStateChangeListener = function() {
374 var args = validator.validateMethod(arguments, [
376 name: 'eventCallback',
381 var result = native.callSync('Widget_addStateChangeListener', { widgetId: this.id });
382 if (native.isFailure(result)) {
383 throw native.getErrorObject(result);
386 var func = function(msg) {
387 if (msg.widgetId === this.id) {
388 args.eventCallback(new WidgetInstance(msg, this), msg.event);
392 return widgetStateChangeListener.addListener(func);
395 Widget.prototype.removeStateChangeListener = function() {
396 var args = validator.validateMethod(arguments, [
403 widgetStateChangeListener.removeListener(args.watchId);
405 var result = native.callSync('Widget_removeStateChangeListener', {
408 if (native.isFailure(result)) {
409 throw native.getErrorObject(result);
413 function WidgetServiceManager() {}
415 WidgetServiceManager.prototype.getWidget = function() {
416 var args = validator.validateMethod(arguments, [
424 callArgs.widgetId = args.widgetId;
426 var ret = native.callSync('WidgetServiceManager_getWidget', callArgs);
428 if (native.isFailure(ret)) {
429 throw native.getErrorObject(ret);
431 return new Widget(native.getResultObject(ret));
435 WidgetServiceManager.prototype.getWidgets = function() {
436 var args = validator.validateMethod(arguments, [
438 name: 'successCallback',
442 name: 'errorCallback',
443 type: types.FUNCTION,
455 var callback = function(result) {
456 if (native.isFailure(result)) {
457 native.callIfPossible(args.errorCallback, native.getErrorObject(result));
459 var widgets = createObjects(result, Widget);
460 args.successCallback(widgets);
465 if (args.packageId) {
466 callArgs.packageId = args.packageId;
469 var result = native.call('WidgetServiceManager_getWidgets', callArgs, callback);
470 if (native.isFailure(result)) {
471 throw native.getErrorObject(result);
475 WidgetServiceManager.prototype.getPrimaryWidgetId = function() {
476 var args = validator.validateMethod(arguments, [
484 callArgs.id = args.id;
486 var ret = native.callSync('WidgetServiceManager_getPrimaryWidgetId', callArgs);
488 if (native.isFailure(ret)) {
489 throw native.getErrorObject(ret);
491 return native.getResultObject(ret);
495 WidgetServiceManager.prototype.getSize = function() {
496 var args = validator.validateMethod(arguments, [
500 values: T.getValues(WidgetSizeType)
505 callArgs.sizeType = args.sizeType;
507 var ret = native.callSync('WidgetServiceManager_getSize', callArgs);
509 if (native.isFailure(ret)) {
510 throw native.getErrorObject(ret);
512 return new WidgetSize(native.getResultObject(ret));
517 exports = new WidgetServiceManager();