2 * Copyright (c) 2015 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 privilege_ = xwalk.utils.privilege;
19 var types_ = validator_.Types;
20 var T_ = xwalk.utils.type;
21 var Converter_ = xwalk.utils.converter;
22 var native_ = new xwalk.utils.NativeManager(extension);
24 //enumeration SystemInfoPropertyId ////////////////////////////////////////////////////
25 var SystemInfoPropertyId = {
30 DEVICE_ORIENTATION : 'DEVICE_ORIENTATION',
34 WIFI_NETWORK : 'WIFI_NETWORK',
35 ETHERNET_NETWORK : 'ETHERNET_NETWORK',
36 CELLULAR_NETWORK : 'CELLULAR_NETWORK',
38 PERIPHERAL : 'PERIPHERAL',
40 CAMERA_FLASH : 'CAMERA_FLASH'
43 //class SystemInfoDeviceCapability ////////////////////////////////////////////////////
44 function SystemInfoDeviceCapability(data) {
45 Object.defineProperties(this, {
47 value : data.bluetooth,
57 value : data.nfcReservedPush,
62 value : Converter_.toOctet(data.multiTouchCount),
67 value : data.inputKeyboard,
71 inputKeyboardLayout : {
72 value : data.inputKeyboardLayout,
82 value : data.wifiDirect,
87 value : data.opengles,
91 openglestextureFormat : {
92 value : data.openglestextureFormat,
96 openglesVersion1_1 : {
97 value : data.openglesVersion1_1,
101 openglesVersion2_0 : {
102 value : data.openglesVersion2_0,
107 value : data.fmRadio,
113 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
114 return data.platformVersion;
121 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
122 return data.webApiVersion;
129 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
130 return data.nativeApiVersion;
136 value : data.platformName,
146 value : data.cameraFront,
151 value : data.cameraFrontFlash,
156 value : data.cameraBack,
161 value : data.cameraBackFlash,
166 value : data.location,
171 value : data.locationGps,
176 value : data.locationWps,
181 value : data.microphone,
186 value : data.usbHost,
191 value : data.usbAccessory,
196 value : data.screenOutputRca,
201 value : data.screenOutputHdmi,
205 platformCoreCpuArch : {
206 value : data.platformCoreCpuArch,
210 platformCoreFpuArch : {
211 value : data.platformCoreFpuArch,
216 value : data.sipVoip,
225 speechRecognition : {
226 value : data.speechRecognition,
231 value : data.speechSynthesis,
236 value : data.accelerometer,
240 accelerometerWakeup : {
241 value : data.accelerometerWakeup,
246 value : data.barometer,
251 value : data.barometerWakeup,
256 value : data.gyroscope,
261 value : data.gyroscopeWakeup,
266 value : data.magnetometer,
270 magnetometerWakeup : {
271 value : data.magnetometerWakeup,
276 value : data.photometer,
281 value : data.photometerWakeup,
286 value : data.proximity,
291 value : data.proximityWakeup,
296 value : data.tiltmeter,
301 value : data.tiltmeterWakeup,
306 value : data.dataEncryption,
310 graphicsAcceleration : {
311 value : data.graphicsAcceleration,
321 value : data.telephony,
326 value : data.telephonyMms,
331 value : data.telephonySms,
336 value : data.screenSizeNormal,
340 screenSize480_800 : {
341 value : data.screenSize480_800,
345 screenSize720_1280 : {
346 value : data.screenSize720_1280,
351 value : data.autoRotation,
356 value : data.shellAppWidget,
360 visionImageRecognition : {
361 value : data.visionImageRecognition,
365 visionQrcodeGeneration : {
366 value : data.visionQrcodeGeneration,
370 visionQrcodeRecognition : {
371 value : data.visionQrcodeRecognition,
375 visionFaceRecognition : {
376 value : data.visionFaceRecognition,
381 value : data.secureElement,
385 nativeOspCompatible : {
386 value : data.nativeOspCompatible,
391 value : data.profile,
398 //class SystemInfoBattery ////////////////////////////////////////////////////
399 function SystemInfoBattery(data) {
400 Object.defineProperties(this, {
407 value : data.isCharging,
414 //class SystemInfoCpu ////////////////////////////////////////////////////
415 function SystemInfoCpu(data) {
416 Object.defineProperties(this, {
425 //class SystemInfoStorageUnit ////////////////////////////////////////////////////
426 function SystemInfoStorageUnit(data) {
427 Object.defineProperties(this, {
434 value: Converter_.toUnsignedLongLong(data.capacity),
438 availableCapacity : {
439 value : Converter_.toUnsignedLongLong(data.availableCapacity),
444 value : data.isRemovable,
449 value : data.isRemovable,
456 //class SystemInfoStorage ////////////////////////////////////////////////////
457 function SystemInfoStorage(data) {
458 var len = data.storages.length;
459 var storageArray = new Array(len);
460 for (var i = 0; i < len; ++i) {
461 storageArray[i] = new SystemInfoStorageUnit(data.storages[i]);
463 Object.defineProperties(this, {
472 //class SystemInfoDisplay ////////////////////////////////////////////////////
473 function SystemInfoDisplay(data) {
474 Object.defineProperties(this, {
476 value: Converter_.toUnsignedLong(data.resolutionWidth),
481 value: Converter_.toUnsignedLong(data.resolutionHeight),
486 value: Converter_.toUnsignedLong(data.dotsPerInchWidth),
490 dotsPerInchHeight : {
491 value: Converter_.toUnsignedLong(data.dotsPerInchHeight),
496 value: Number(data.physicalWidth),
501 value: Number(data.physicalHeight),
506 value: Number(data.brightness),
513 //class SystemInfoDeviceOrientation ////////////////////////////////////////////////////
514 function SystemInfoDeviceOrientation(data) {
515 Object.defineProperties(this, {
516 status : {value: data.status, writable: false, enumerable: true},
517 isAutoRotation : {value: data.isAutoRotation, writable: false, enumerable: true}
521 //class SystemInfoBuild ////////////////////////////////////////////////////
522 function SystemInfoBuild(data) {
523 Object.defineProperties(this, {
524 model : {value: data.model, writable: false, enumerable: true},
525 manufacturer : {value: data.manufacturer, writable: false, enumerable: true},
526 buildVersion : {value: data.buildVersion, writable: false, enumerable: true}
530 //class SystemInfoLocale ////////////////////////////////////////////////////
531 function SystemInfoLocale(data) {
532 Object.defineProperties(this, {
533 language : {value: data.language, writable: false, enumerable: true},
534 country : {value: data.country, writable: false, enumerable: true}
537 //class SystemInfoNetwork ////////////////////////////////////////////////////
538 function SystemInfoNetwork(data) {
539 Object.defineProperties(this, {
540 networkType : {value: data.networkType, writable: false, enumerable: true}
544 //class SystemInfoWifiNetwork ////////////////////////////////////////////////////
545 function SystemInfoWifiNetwork(data) {
546 Object.defineProperties(this, {
547 status : {value: data.status, writable: false, enumerable: true},
548 ssid : {value: data.ssid, writable: false, enumerable: true},
549 ipAddress : {value: data.ipAddress, writable: false, enumerable: true},
550 ipv6Address : {value: data.ipv6Address, writable: false, enumerable: true},
551 macAddress : {value: data.macAddress, writable: false, enumerable: true},
552 signalStrength : {value: Number(data.signalStrength), writable: false, enumerable: true}
556 //class SystemInfoEthernetNetwork ////////////////////////////////////////////////////
557 function SystemInfoEthernetNetwork(data) {
558 Object.defineProperties(this, {
559 cable : {value: data.cable, writable: false, enumerable: true},
560 status : {value: data.status, writable: false, enumerable: true},
561 ipAddress : {value: data.ipAddress, writable: false, enumerable: true},
562 ipv6Address : {value: data.ipv6Address, writable: false, enumerable: true},
563 macAddress : {value: data.macAddress, writable: false, enumerable: true},
567 //class SystemInfoCellularNetwork ////////////////////////////////////////////////////
568 function SystemInfoCellularNetwork(data) {
569 Object.defineProperties(this, {
570 status : {value: data.status, writable: false, enumerable: true},
571 apn : {value: data.apn, writable: false, enumerable: true},
572 ipAddress : {value: data.ipAddress, writable: false, enumerable: true},
573 ipv6Address : {value: data.ipv6Address, writable: false, enumerable: true},
574 mcc : {value: Number(data.mcc), writable: false, enumerable: true},
575 mnc : {value: Number(data.mnc), writable: false, enumerable: true},
576 cellId : {value: Number(data.cellId), writable: false, enumerable: true},
577 lac : {value: Number(data.lac), writable: false, enumerable: true},
578 isRoaming : {value: data.isRoaming, writable: false, enumerable: true},
579 isFlightMode : {value: data.isFligthMode, writable: false, enumerable: true},
582 xwalk.utils.checkPrivilegeAccess4Ver("2.3.1", privilege_.TELEPHONY, privilege_.SYSTEMMANAGER);
591 //class SystemInfoSIM ////////////////////////////////////////////////////
592 function SystemInfoSIM(data) {
593 Object.defineProperties(this, {
596 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
604 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
605 return data.operatorName;
612 xwalk.utils.checkPrivilegeAccess4Ver("2.3.1", privilege_.TELEPHONY, privilege_.SYSTEMMANAGER);
620 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
628 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
629 return Number(data.mcc);
636 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
637 return Number(data.mnc);
644 xwalk.utils.checkPrivilegeAccess4Ver("2.3.1", privilege_.TELEPHONY, privilege_.SYSTEMMANAGER);
652 xwalk.utils.checkPrivilegeAccess(privilege_.SYSTEM);
661 //class SystemInfoPeripheral ////////////////////////////////////////////////////
662 function SystemInfoPeripheral(data) {
663 Object.defineProperties(this, {
664 isVideoOutputOn : {value: data.isVideoOutputOn, writable: false, enumerable: true}
668 //class SystemInfoMemory ////////////////////////////////////////////////////
669 function SystemInfoMemory(data) {
670 Object.defineProperties(this, {
671 status : {value: data.state, writable: false, enumerable: true}
675 function SystemInfoCameraFlash(data) {
676 var getBrightness = function() {
677 xwalk.utils.checkPrivilegeAccess(privilege_.LED);
679 var result = native_.callSync('SystemInfo_getBrightness', {});
680 if (native_.isSuccess(result)) {
681 return Converter_.toLong(native_.getResultObject(result)) / this.levels;
686 var getLevels = function() {
687 xwalk.utils.checkPrivilegeAccess(privilege_.LED);
689 var result = native_.callSync('SystemInfo_getMaxBrightness', {});
690 if (native_.isSuccess(result)) {
691 return Converter_.toLong(native_.getResultObject(result));
696 Object.defineProperties(this, {
697 brightness : {set : function(){}, get: getBrightness, enumerable: true},
698 camera : {value: data.camera, enumerable: true},
699 levels : {get: getLevels, enumerable: true},
703 SystemInfoCameraFlash.prototype.setBrightness = function(brightness) {
704 xwalk.utils.checkPrivilegeAccess(privilege_.LED);
706 var args = validator_.validateArgs(arguments, [
707 {name: 'brightness', type: types_.DOUBLE}
709 args.brightness = args.brightness * this.levels;
711 var result = native_.callSync('SystemInfo_setBrightness', args);
712 if (native_.isFailure(result)) {
713 throw native_.getErrorObject(result);
715 this.brightness = result;
718 //class SystemInfo ////////////////////////////////////////////////////
719 var SystemInfo = function() {
722 SystemInfo.prototype.getCapabilities = function() {
723 var result = native_.callSync('SystemInfo_getCapabilities', {});
724 if (native_.isFailure(result)) {
725 throw native_.getErrorObject(result);
727 var devCap = new SystemInfoDeviceCapability(native_.getResultObject(result));
731 SystemInfo.prototype.getCapability = function() {
732 var args = validator_.validateArgs(arguments, [
739 var result = native_.callSync('SystemInfo_getCapability', {key: args.key});
740 if (native_.isFailure(result)) {
741 throw native_.getErrorObject(result);
743 var res = native_.getResultObject(result);
744 if (res.type === 'int') {
745 return Number(res.value);
752 var _createProperty = function (property, data) {
753 if (_propertyContainer[property]){
754 return new _propertyContainer[property].constructor(data);
756 throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR, 'Property with id: ' + property + ' is not supported.');
760 var _createPropertyArray = function (property, data) {
761 var jsonArray = data.array;
762 var propertyArray = [];
763 if (_propertyContainer[property]){
764 var arrayLength = jsonArray.length;
765 for (var i = 0; i < arrayLength; i++) {
766 propertyArray.push(new _propertyContainer[property].constructor(jsonArray[i]));
769 throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR, 'Property with id: ' + property + ' is not supported.');
771 return propertyArray;
775 var getPropertyFunction = function(cppLabel, objectCreateFunction) {
777 if (arguments[0] === "CELLULAR_NETWORK") {
778 xwalk.utils.checkPrivilegeAccess4Ver("2.4", privilege_.TELEPHONY);
781 var args = validator_.validateArgs(arguments, [
785 values : T_.getValues(SystemInfoPropertyId)
788 name : 'successCallback',
789 type : types_.FUNCTION
792 name : 'errorCallback',
793 type : types_.FUNCTION,
798 var propObject = _propertyContainer[args.property];
800 throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR, 'Property with id: ' + args.property + ' is not supported.');
802 var callback = function(result) {
803 if (native_.isFailure(result)) {
804 setTimeout(function() {
805 native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
808 var resultProp = objectCreateFunction(args.property, native_.getResultObject(result));
809 args.successCallback(resultProp);
812 native_.call(cppLabel, {property: args.property}, callback);
816 SystemInfo.prototype.getPropertyValue =
817 getPropertyFunction('SystemInfo_getPropertyValue', _createProperty);
819 SystemInfo.prototype.getPropertyValueArray =
820 getPropertyFunction('SystemInfo_getPropertyValueArray', _createPropertyArray);
823 //SystemInfo helpers ///////////////////////////////////////////////////
824 var _batteryStr = SystemInfoPropertyId.BATTERY;
825 var _cpuStr = SystemInfoPropertyId.CPU;
826 var _storageStr = SystemInfoPropertyId.STORAGE;
827 var _displayStr = SystemInfoPropertyId.DISPLAY;
828 var _deviceOrientationStr = SystemInfoPropertyId.DEVICE_ORIENTATION;
829 //var _buildStr = SystemInfoPropertyId.BUILD;
830 var _localeStr = SystemInfoPropertyId.LOCALE;
831 var _networkStr = SystemInfoPropertyId.NETWORK;
832 var _wifiNetworkStr = SystemInfoPropertyId.WIFI_NETWORK;
833 var _ethernetNetworkStr = SystemInfoPropertyId.ETHERNET_NETWORK;
834 var _cellularNetworkStr = SystemInfoPropertyId.CELLULAR_NETWORK;
835 var _simStr = SystemInfoPropertyId.SIM;
836 var _peripheralStr = SystemInfoPropertyId.PERIPHERAL;
837 var _memoryStr = SystemInfoPropertyId.MEMORY;
838 var _cameraFlashStr = SystemInfoPropertyId.CAMERA_FLASH;
843 function _systeminfoBatteryListenerCallback(eventObj) {
844 var property = _batteryStr;
845 var callbacks = _propertyContainer[property].callbacks;
847 for (var watchId in callbacks) {
848 if (callbacks.hasOwnProperty(watchId)) {
849 var listener = callbacks[watchId];
850 var executeCall = (T_.isUndefined(listener.lowThreshold) ||
851 (propObj.level <= listener.lowThreshold)) ||
852 (T_.isUndefined(listener.highThreshold) ||
853 (propObj.level >= listener.highThreshold));
854 var propObj = !listener.isArrayType ?
855 _createProperty(property, eventObj.result.array[0]) :
856 _createPropertyArray(property, eventObj.result);
858 listener.callback(propObj);
864 function _systeminfoCpuListenerCallback(eventObj) {
865 var property = _cpuStr;
866 var callbacks = _propertyContainer[property].callbacks;
868 for (var watchId in callbacks) {
869 if (callbacks.hasOwnProperty(watchId)) {
870 var listener = callbacks[watchId];
871 var propObj = !listener.isArrayType ?
872 _createProperty(property, eventObj.result.array[0]) :
873 _createPropertyArray(property, eventObj.result);
874 var executeCall = (T_.isUndefined(listener.lowThreshold) ||
875 (propObj.load <= listener.lowThreshold)) ||
876 (T_.isUndefined(listener.highThreshold) ||
877 (propObj.load >= listener.highThreshold));
879 listener.callback(propObj);
885 function _systeminfoStorageListenerCallback(eventObj) {
886 var property = _storageStr;
887 var callbacks = _propertyContainer[property].callbacks;
889 for (var watchId in callbacks) {
890 if (callbacks.hasOwnProperty(watchId)) {
891 var listener = callbacks[watchId];
892 var propObj = !listener.isArrayType ?
893 _createProperty(property, eventObj.result.array[0]) :
894 _createPropertyArray(property, eventObj.result);
895 callbacks[watchId].callback(propObj);
900 function _systeminfoDisplayListenerCallback(eventObj) {
901 var property = _displayStr;
902 var callbacks = _propertyContainer[property].callbacks;
904 for (var watchId in callbacks) {
905 if (callbacks.hasOwnProperty(watchId)) {
906 var listener = callbacks[watchId];
907 var propObj = !listener.isArrayType ?
908 _createProperty(property, eventObj.result.array[0]) :
909 _createPropertyArray(property, eventObj.result);
910 var executeCall = (T_.isUndefined(listener.lowThreshold) ||
911 (propObj.brightness <= listener.lowThreshold)) ||
912 (T_.isUndefined(listener.highThreshold) ||
913 (propObj.brightness >= listener.highThreshold));
915 listener.callback(propObj);
921 function _systeminfoDeviceOrientationListenerCallback(eventObj) {
922 var property = _deviceOrientationStr;
923 var callbacks = _propertyContainer[property].callbacks;
925 for (var watchId in callbacks) {
926 if (callbacks.hasOwnProperty(watchId)) {
927 var listener = callbacks[watchId];
928 var propObj = !listener.isArrayType ?
929 _createProperty(property, eventObj.result.array[0]) :
930 _createPropertyArray(property, eventObj.result);
931 callbacks[watchId].callback(propObj);
936 function _systeminfoLocaleListenerCallback(eventObj) {
937 var property = _localeStr;
938 var callbacks = _propertyContainer[property].callbacks;
940 for (var watchId in callbacks) {
941 if (callbacks.hasOwnProperty(watchId)) {
942 var listener = callbacks[watchId];
943 var propObj = !listener.isArrayType ?
944 _createProperty(property, eventObj.result.array[0]) :
945 _createPropertyArray(property, eventObj.result);
946 callbacks[watchId].callback(propObj);
951 function _systeminfoNetworkListenerCallback(eventObj) {
952 var property = _networkStr;
953 var callbacks = _propertyContainer[property].callbacks;
955 for (var watchId in callbacks) {
956 if (callbacks.hasOwnProperty(watchId)) {
957 var listener = callbacks[watchId];
958 var propObj = !listener.isArrayType ?
959 _createProperty(property, eventObj.result.array[0]) :
960 _createPropertyArray(property, eventObj.result);
961 callbacks[watchId].callback(propObj);
966 function _systeminfoWifiNetworkListenerCallback(eventObj) {
967 var property = _wifiNetworkStr;
968 var callbacks = _propertyContainer[property].callbacks;
970 for (var watchId in callbacks) {
971 if (callbacks.hasOwnProperty(watchId)) {
972 var listener = callbacks[watchId];
973 var propObj = !listener.isArrayType ?
974 _createProperty(property, eventObj.result.array[0]) :
975 _createPropertyArray(property, eventObj.result);
976 callbacks[watchId].callback(propObj);
981 function _systeminfoEthernetNetworkListenerCallback(eventObj) {
982 var property = _ethernetNetworkStr;
983 var callbacks = _propertyContainer[property].callbacks;
985 for (var watchId in callbacks) {
986 if (callbacks.hasOwnProperty(watchId)) {
987 var listener = callbacks[watchId];
988 var propObj = !listener.isArrayType ?
989 _createProperty(property, eventObj.result.array[0]) :
990 _createPropertyArray(property, eventObj.result);
991 callbacks[watchId].callback(propObj);
996 function _systeminfoCellularNetworkListenerCallback(eventObj) {
997 var property = _cellularNetworkStr;
998 var callbacks = _propertyContainer[property].callbacks;
1000 for (var watchId in callbacks) {
1001 if (callbacks.hasOwnProperty(watchId)) {
1002 var listener = callbacks[watchId];
1003 var propObj = !listener.isArrayType ?
1004 _createProperty(property, eventObj.result.array[0]) :
1005 _createPropertyArray(property, eventObj.result);
1006 callbacks[watchId].callback(propObj);
1011 function _systeminfoSimListenerCallback(eventObj) {
1012 var property = _simStr;
1013 var callbacks = _propertyContainer[property].callbacks;
1015 for (var watchId in callbacks) {
1016 if (callbacks.hasOwnProperty(watchId)) {
1017 var listener = callbacks[watchId];
1018 var propObj = !listener.isArrayType ?
1019 _createProperty(property, eventObj.result.array[0]) :
1020 _createPropertyArray(property, eventObj.result);
1021 callbacks[watchId].callback(propObj);
1026 function _systeminfoPeripheralListenerCallback(eventObj) {
1027 var property = _peripheralStr;
1028 var callbacks = _propertyContainer[property].callbacks;
1030 for (var watchId in callbacks) {
1031 if (callbacks.hasOwnProperty(watchId)) {
1032 var listener = callbacks[watchId];
1033 var propObj = !listener.isArrayType ?
1034 _createProperty(property, eventObj.result.array[0]) :
1035 _createPropertyArray(property, eventObj.result);
1036 callbacks[watchId].callback(propObj);
1041 function _systeminfoMemoryListenerCallback(eventObj) {
1042 var property = _memoryStr;
1043 var callbacks = _propertyContainer[property].callbacks;
1045 for (var watchId in callbacks) {
1046 if (callbacks.hasOwnProperty(watchId)) {
1047 var listener = callbacks[watchId];
1048 var propObj = !listener.isArrayType ?
1049 _createProperty(property, eventObj.result.array[0]) :
1050 _createPropertyArray(property, eventObj.result);
1051 callbacks[watchId].callback(propObj);
1056 function _systeminfoCameraFlashListenerCallback(eventObj) {
1057 var property = _cameraFlashStr;
1058 var callbacks = _propertyContainer[property].callbacks;
1060 for (var watchId in callbacks) {
1061 if (callbacks.hasOwnProperty(watchId)) {
1062 var listener = callbacks[watchId];
1063 var propObj = !listener.isArrayType ?
1064 _createProperty(property, eventObj.result.array[0]) :
1065 _createPropertyArray(property, eventObj.result);
1066 callbacks[watchId].callback(propObj);
1071 var _propertyContainer = {
1074 constructor : SystemInfoBattery,
1075 broadcastFunction : _systeminfoBatteryListenerCallback,
1076 signalLabel : 'SystemInfoBatteryChangeBroadcast'
1080 constructor : SystemInfoCpu,
1081 broadcastFunction : _systeminfoCpuListenerCallback,
1082 signalLabel : 'SystemInfoCpuChangeBroadcast'
1086 constructor : SystemInfoStorage,
1087 broadcastFunction : _systeminfoStorageListenerCallback,
1088 signalLabel : 'SystemInfoStorageChangeBroadcast'
1092 constructor : SystemInfoDisplay,
1093 broadcastFunction : _systeminfoDisplayListenerCallback,
1094 signalLabel : 'SystemInfoDisplayChangeBroadcast'
1096 'DEVICE_ORIENTATION' : {
1098 constructor : SystemInfoDeviceOrientation,
1099 broadcastFunction : _systeminfoDeviceOrientationListenerCallback,
1100 signalLabel : 'SystemInfoDeviceOrientationChangeBroadcast'
1103 callbacks : {}, //adding callbacks for build is not possible
1104 constructor : SystemInfoBuild,
1105 broadcastFunction : function(){},
1110 constructor : SystemInfoLocale,
1111 broadcastFunction : _systeminfoLocaleListenerCallback,
1112 signalLabel : 'SystemInfoLocaleChangeBroadcast'
1116 constructor : SystemInfoNetwork,
1117 broadcastFunction : _systeminfoNetworkListenerCallback,
1118 signalLabel : 'SystemInfoNetworkChangeBroadcast'
1122 constructor : SystemInfoWifiNetwork,
1123 broadcastFunction : _systeminfoWifiNetworkListenerCallback,
1124 signalLabel : 'SystemInfoWifiNetworkChangeBroadcast'
1126 'ETHERNET_NETWORK' : {
1128 constructor : SystemInfoEthernetNetwork,
1129 broadcastFunction : _systeminfoEthernetNetworkListenerCallback,
1130 signalLabel : 'SystemInfoEthernetNetworkChangeBroadcast'
1132 'CELLULAR_NETWORK' : {
1134 constructor : SystemInfoCellularNetwork,
1135 broadcastFunction : _systeminfoCellularNetworkListenerCallback,
1136 signalLabel : 'SystemInfoCellularNetworkChangeBroadcast'
1140 constructor : SystemInfoSIM,
1141 broadcastFunction : _systeminfoSimListenerCallback,
1142 signalLabel : 'SystemInfoSimChangeBroadcast'
1146 constructor : SystemInfoPeripheral,
1147 broadcastFunction : _systeminfoPeripheralListenerCallback,
1148 signalLabel : 'SystemInfoPeripheralChangeBroadcast'
1152 constructor : SystemInfoMemory,
1153 broadcastFunction : _systeminfoMemoryListenerCallback,
1154 signalLabel : 'SystemInfoMemoryChangeBroadcast'
1158 constructor : SystemInfoCameraFlash,
1159 broadcastFunction : _systeminfoCameraFlashListenerCallback,
1160 signalLabel : 'SystemInfoCameraFlashChangeBroadcast'
1164 /// It common function to be called when listener would be triggered
1166 var _listenerFunction = function(msg) {
1167 var propertyId = msg.propertyId;
1169 _propertyContainer[propertyId].broadcastFunction(msg);
1171 console.log("No propertyId provided - ignoring");
1174 native_.addListener("SysteminfoCommonListenerLabel", _listenerFunction);
1176 var _registerListener = function (property, listener, errorCallback) {
1180 var propObject = _propertyContainer[property];
1182 throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR, 'Property with id: ' + property + ' is not supported.');
1184 var callbackBroadcastFunction = propObject.broadcastFunction;
1185 var signalLabel = propObject.signalLabel;
1186 var callbacksMap = propObject.callbacks;
1189 if (T_.isEmptyObject(callbacksMap)) {
1190 //registration in C++ layer
1191 result = native_.callSync(
1192 'SystemInfo_addPropertyValueChangeListener',
1193 {property: Converter_.toString(property)});
1194 fail = native_.isFailure(result);
1195 if (native_.isFailure(result)) {
1196 setTimeout(function() {
1197 native_.callIfPossible(errorCallback, native_.getErrorObject(result));
1202 watchId = ++_nextId;
1203 callbacksMap[watchId] = listener;
1206 return Converter_.toUnsignedLong(watchId);
1209 var _identifyListener = function (watchId) {
1210 for (var p in _propertyContainer) {
1211 if (_propertyContainer[p].callbacks[watchId]) {
1215 throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR, 'Listener with id: ' + watchId + ' does not exist.');
1218 var _unregisterListener = function (watchId, isTimeout) {
1221 property = _identifyListener(watchId);
1223 // if it is "auto" timeout call it should not throw an exception
1225 console.log('Listener was already deleted');
1231 var propObject = _propertyContainer[property];
1234 var callbackBroadcastFunction = propObject.broadcastFunction;
1235 var signalLabel = propObject.signalLabel;
1236 var callbacksMap = propObject.callbacks;
1238 delete callbacksMap[Number(watchId)];
1239 if (T_.isEmptyObject(callbacksMap)) {
1240 //unregistration in C++ layer
1241 result = native_.callSync(
1242 'SystemInfo_removePropertyValueChangeListener',
1243 {property: Converter_.toString(property)});
1244 if (native_.isFailure(result)) {
1245 throw native_.getErrorObject(result);
1250 var getListenerFunction = function (isArray) {
1252 if (arguments[0] === "CELLULAR_NETWORK") {
1253 xwalk.utils.checkPrivilegeAccess4Ver("2.4", privilege_.TELEPHONY);
1255 var args = validator_.validateArgs(arguments, [
1259 values : T_.getValues(SystemInfoPropertyId)
1262 name : 'successCallback',
1263 type : types_.FUNCTION
1267 type : types_.DICTIONARY,
1272 name : 'errorCallback',
1273 type : types_.FUNCTION,
1280 callback : args.successCallback,
1281 isArrayType : isArray,
1282 highThreshold : !T_.isNullOrUndefined(args.options) ?
1283 args.options.highThreshold : undefined,
1284 lowThreshold : !T_.isNullOrUndefined(args.options) ?
1285 args.options.lowThreshold : undefined
1287 var watchId = _registerListener(args.property, listener, args.errorCallback);
1289 var timeout = !T_.isNullOrUndefined(args.options) ? args.options.timeout : undefined;
1290 if (!T_.isUndefined(timeout) ){
1291 setTimeout(function(){_unregisterListener(watchId, true);}, timeout);
1298 SystemInfo.prototype.addPropertyValueChangeListener = getListenerFunction(false);
1300 SystemInfo.prototype.addPropertyValueArrayChangeListener = getListenerFunction(true);
1302 SystemInfo.prototype.removePropertyValueChangeListener = function() {
1303 var args = validator_.validateArgs(arguments, [
1306 type : types_.UNSIGNED_LONG
1310 _unregisterListener(args.watchId, false);
1313 SystemInfo.prototype.getTotalMemory = function() {
1314 var result = native_.callSync('SystemInfo_getTotalMemory', {});
1315 if (native_.isFailure(result)) {
1316 throw native_.getErrorObject(result);
1318 return native_.getResultObject(result).totalMemory;
1321 SystemInfo.prototype.getAvailableMemory = function() {
1322 var result = native_.callSync('SystemInfo_getAvailableMemory', {});
1323 if (native_.isFailure(result)) {
1324 throw native_.getErrorObject(result);
1326 return native_.getResultObject(result).availableMemory;
1329 SystemInfo.prototype.getCount = function() {
1330 var args = validator_.validateArgs(arguments, [
1334 values : T_.getValues(SystemInfoPropertyId)
1338 var result = native_.callSync('SystemInfo_getCount', {property: args.property});
1339 if (native_.isFailure(result)) {
1340 throw native_.getErrorObject(result);
1342 var res = native_.getResultObject(result);
1343 return Number(res.count);
1347 exports = new SystemInfo();