From 05e555a377a79f4e08c92f4b739d3daa6ac2cb09 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:21:56 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/ui/cordova/www/js/app0.js | 300 +++++++++++++++++++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 js/ui/cordova/www/js/app0.js diff --git a/js/ui/cordova/www/js/app0.js b/js/ui/cordova/www/js/app0.js new file mode 100644 index 0000000..1fd33cb --- /dev/null +++ b/js/ui/cordova/www/js/app0.js @@ -0,0 +1,300 @@ +/** + ** ============================== + ** O O O OOOO + ** O O O O O O + ** O O O O O O + ** OOOO OOOO O OOO OOOO + ** O O O O O O O + ** O O O O O O O + ** OOOO OOOO O O OOOO + ** ============================== + ** Dr. Stefan Bosse http://www.bsslab.de + ** + ** COPYRIGHT: THIS SOFTWARE, EXECUTABLE AND SOURCE CODE IS OWNED + ** BY THE AUTHOR(S). + ** THIS SOURCE CODE MAY NOT BE COPIED, EXTRACTED, + ** MODIFIED, OR OTHERWISE USED IN A CONTEXT + ** OUTSIDE OF THE SOFTWARE SYSTEM. + ** + ** $AUTHORS: Stefan Bosse + ** $INITIAL: (C) 2006-2019 bLAB + ** $CREATED: 12-12-18 by sbosse. + ** $VERSION: 1.1.13 + ** $INFO: + ** + ** Cordova App Initialization + ** + ** $ENDOFINFO + ** +*/ +appSensors = { + Platform : { sensor:'PLATFORM', internal:true, last:undefined, read:function () { + return App.platform }}, + Location : { sensor:'LOCATION', internal:true, last:undefined, read:function () { + var loc = Network.location; + if (!loc) return "?" + else return loc.geo.city+', '+loc.geo.country }}, + Clock : { sensor:'CLOCK', internal:true, last:undefined, read:function () { + return Math.floor(Date.now()) }}, + Time : { sensor:'TIME', internal:true, last:undefined, read:function () { + var now = new Date(); + var hour = "0" + now.getHours(); + hour = hour.substring(hour.length-2); + var minute = "0" + now.getMinutes(); + minute = minute.substring(minute.length-2); + var second = "0" + now.getSeconds(); + second = second.substring(second.length-2); + return hour + ":" + minute + ":" + second }}, + GeoLocation: { sensor:'GPS', internal:true, state:0, last:undefined, read:function () { + if (appSensors.GeoLocation.error) { + return Network.location?( + // Use IP localization + Network.location.gps.lat + ', '+ + Network.location.gps.lon + ):('? '+ appSensors.GeoLocation.error.message); + } else if (appSensors.GeoLocation.data) + return appSensors.GeoLocation.data.coords.latitude + ', '+ + appSensors.GeoLocation.data.coords.longitude + + (appSensors.GeoLocation.data.coords.altitude!=undefined? + (', '+appSensors.GeoLocation.data.coords.altitude):''); + else return Network.location?( + // Use IP localization + Network.location.gps.lat + ', '+ + Network.location.gps.lon + ):"?"; + }, init : function () { + var timer,timer0; + if (App.platform == 'node-webkit' && !navigator.geolocation) { appSensors.GeoLocation.read=undefined; return } + if (appSensors.GeoLocation.state) return; + + if (cordova.dialogGPS) + cordova.dialogGPS("Your GPS is Disabled, this app needs to be enable to works.",//message + "Use GPS, with wifi or 3G.",//description + function(buttonIndex){//callback + switch(buttonIndex) { + case 0: break;//cancel + case 1: break;//neutro option + case 2: break;//user go to configuration + }}, + "Please Turn on GPS",//title + ["Cancel","Later","Go"]);//buttons + + var onSuccess = function(position) { + appSensors.GeoLocation.error = null; + appSensors.GeoLocation.data = position + if (timer) clearInterval(timer0); + if (timer) clearTimeout(timer); + timer=setTimeout(sample,1000) + } + /* + alert('Latitude: ' + position.coords.latitude + '\n' + + 'Longitude: ' + position.coords.longitude + '\n' + + 'Altitude: ' + position.coords.altitude + '\n' + + 'Accuracy: ' + position.coords.accuracy + '\n' + + 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' + + 'Heading: ' + position.coords.heading + '\n' + + 'Speed: ' + position.coords.speed + '\n' + + 'Timestamp: ' + position.timestamp + '\n'); + */ + + // onError Callback receives a PositionError object + // + function onError(error) { + appSensors.GeoLocation.error = error + if (!timer0) timer0=setInterval(sample,2000); + } + function sample() { + navigator.geolocation.getCurrentPosition(onSuccess, onError) + } + sample(); + // Initial sampler ... called until first GPS callback response (success, error) + timer0=setInterval(sample,2000) + appSensors.GeoLocation.state=1; + }}, + Light: { sensor:'LIGHT', last:undefined, data:undefined , read:function () { + return appSensors.Light.data[0]|0 }}, + Magnetics: { sensor:'MAGNETIC_FIELD', last:undefined, data:undefined , read:function () { + return appSensors.Magnetics.data.map(function (e) { return Number(e)|0 }) }}, + Acceleration: { sensor:'ACCELEROMETER', last:undefined, data:undefined , read:function () { + return appSensors.Acceleration.data.map(function (e) { return Number(e)|0 }) }}, + Acceleration2: { sensor:'LINEAR_ACCELERATION', last:undefined, data:undefined , read:function () { + return appSensors.Acceleration2.data.map(function (e) { return Number(e)|0 }) }}, + Temperature: { sensor:'AMBIENT_TEMPERATURE', last:undefined, data:undefined , read:function () { + return appSensors.Temperature.data[0]|0 }}, + Temperature2: { sensor:'TEMPERATURE', last:undefined, data:undefined , read:function () { + return appSensors.Temperature2.data[0]|0 }}, + Gyroscope: { sensor:'GYROSCOPE', last:undefined, data:undefined , read:function () { + return appSensors.Gyroscope.data.map(function (e) { return Number(e)|0 }) }}, + Orientation: { sensor:'ORIENTATION', last:undefined, data:undefined , read:function () { + return appSensors.Orientation.data.map(function (e) { return Number(e)|0 }) }}, + Pressure: { sensor:'PRESSURE', last:undefined, data:undefined , read:function () { + return appSensors.Pressure.data[0]|0 }}, + Humidity: { sensor:'RELATIVE_HUMIDITY', last:undefined, data:undefined , read:function () { + return appSensors.Humidity.data[0]|0 }}, +} + +appSensorsMap = []; +appSensors.forEach( function(s,p) { appSensorsMap[s.sensor]=s }); + +var appSensorsInit=false; + +appCordova = { + options : { + SENSORFREQ: "NORMAL", // "GAME", + }, + exit : function () { + if (navigator.app) { + navigator.app.exitApp(); + } else if (navigator.device) { + navigator.device.exitApp(); + } else { + window.close(); + } + }, + // Application Constructor + initialize: function() { + console.log('appCordova: initialize'); + this.bindEvents(); + }, + // Bind Event Listeners + // + // Bind any events that are required on startup. Common events are: + // 'load', 'deviceready', 'offline', and 'online'. + bindEvents: function() { + document.addEventListener('deviceready', this.onDeviceReady, false); + }, + // deviceready Event Handler + // + // The scope of 'this' is the event. In order to call the 'receivedEvent' + // function, we must explicitly call 'app.receivedEvent(...);' + onDeviceReady: function() { + var id = 'deviceready'; + var parentElement = document.getElementById(id); + if (!parentElement) return console.log('appCordova.receivedEvent: No parent element found for '+id); + var listeningElement = parentElement.querySelector('.listening'); + var receivedElement = parentElement.querySelector('.received'); + + listeningElement.setAttribute('style', 'display:none;'); + receivedElement.setAttribute('style', 'display:block;'); + + console.log('appCordova handling onDeviceReady'); + + // cordova-plugin-contacts + if (navigator && navigator.contacts) { + var options = new ContactFindOptions(); + options.filter = ""; + options.multiple = true; + var fields = [navigator.contacts.fieldType.displayName, navigator.contacts.fieldType.name]; + navigator.contacts.find(fields, function (entries) { + console.log('Found '+entries.length+' contacts'); + }, function (err) { + console.log('Found no contacts (error '+err+')'); + }, options); + } + // cordova-plugin-sensors + if (!appSensorsInit) { + appSensorsInit=true; + console.log('Sensors ...'); + // Sensor initialization + function add(s) { + sensors.addSensorListener(appSensors[s].sensor, appCordova.options.SENSORFREQ, + function (event) { + appSensors[s].data=event.values; + }, + function(error) { + if (error) { appSensors[s].error=error; appSensors[s].read=undefined } + }); + } + for (var s in appSensors) { + if (appSensors[s].init) { + appSensors[s].init(); + continue; + } else if (appSensors[s].internal) continue; + add(s) + } + console.log('Sensors initialized.'); + } + // Run main schedules .. + try { + Run(); + } catch (e) { log(e) } + + // cordova-plugin-file + appCordova.receivedEvent('deviceready'); + }, + // Update DOM on a Received Event + receivedEvent: function(id) { + // console.log('appCordova receivedEvent: '+id); + }, + startstop : function () { + if (Jam.state>0) { + Jam.stop(); + if (Network.state>0) Network.stop(); + } else { + Jam.start(); + if (Network.state==0) Network.start(); + } + } +}; + +/** Asynchronous File API + * + */ +function readFile(path,file, cb, onerror) { + var pathToFile = path+'/'+file; + window.resolveLocalFileSystemURL(pathToFile, function (fileSystem) { + fileSystem.file(function (file) { + var reader = new FileReader(); + reader.onloadend = function (e) { + cb(this.result); + }; + reader.onerror = function (err) { + if (onerror) onerror(err); else cb(null,err,pathToFile); + } + reader.readAsText(file); + }, function (err) { if (onerror) onerror(err); else cb(null,err,pathToFile) }); + }, function (err) { if (onerror) onerror(err); else cb(null,err, pathToFile) }); +} +function listDir(path,cb){ + window.resolveLocalFileSystemURL(path, function (fileSystem) { + var reader = fileSystem.createReader(); + reader.readEntries( + function (entries) { + cb(entries); + }, + function (err) { + cb(null,err); + } + ); + }, function (err) { + cb(null,err); + } + ); +} +function writeFile(path, filename , data, cb, onerror) { + window.resolveLocalFileSystemURL(path, function(dir) { + dir.getFile(filename, {create: true, exclusive: false}, function(file) { + file.createWriter(function(fileWriter) { + fileWriter.onwriteend = function() { + // log('fileWriter done') + if (cb) cb(); + }; + fileWriter.onerror = function (err) { + log(inspect(err)) + if (onerror) onerror(err); else if (cb) cb(err) + }; + var blob = new Blob([data], {type:'text/plain'}); + fileWriter.write(blob); + // if (cb) cb(); + }, function (err) { if (onerror) onerror(err); else if (cb) cb(err) }); + }, function (err) { if (onerror) onerror(err); else if (cb) cb(err) }); + }); +} +function checkIfFileExists(path,filename, cb) { + window.resolveLocalFileSystemURL(path, function(dir) { + dir.getFile(filename, {create: false}, + function () { cb(true) }, + function () { cb(false) } + ) + }) +}