From 2f57490a125e92aa799d7a878d48e78e7afb8dc5 Mon Sep 17 00:00:00 2001 From: Rarder44 Date: Fri, 18 Nov 2022 17:25:51 +0100 Subject: [PATCH 1/3] added app "Messages Light" --- apps/messages_light/ChangeLog | 7 + apps/messages_light/README.md | 11 + apps/messages_light/app-icon.js | 1 + apps/messages_light/app-icon.png | Bin 0 -> 2841 bytes apps/messages_light/app.png | Bin 0 -> 2300 bytes apps/messages_light/full-size-app.png | Bin 0 -> 3287 bytes apps/messages_light/messages_light.app.js | 525 ++++++++++++++++++ apps/messages_light/messages_light.boot.js | 33 ++ .../messages_light.messagesProxy.js | 30 + .../messages_light/messages_light.settings.js | 1 + apps/messages_light/metadata.json | 22 + apps/messages_light/screenshot-call.png | Bin 0 -> 2768 bytes apps/messages_light/screenshot-long-text1.png | Bin 0 -> 3699 bytes apps/messages_light/screenshot-long-text2.png | Bin 0 -> 3767 bytes apps/messages_light/screenshot-notify.png | Bin 0 -> 3139 bytes 15 files changed, 630 insertions(+) create mode 100644 apps/messages_light/ChangeLog create mode 100644 apps/messages_light/README.md create mode 100644 apps/messages_light/app-icon.js create mode 100644 apps/messages_light/app-icon.png create mode 100644 apps/messages_light/app.png create mode 100644 apps/messages_light/full-size-app.png create mode 100644 apps/messages_light/messages_light.app.js create mode 100644 apps/messages_light/messages_light.boot.js create mode 100644 apps/messages_light/messages_light.messagesProxy.js create mode 100644 apps/messages_light/messages_light.settings.js create mode 100644 apps/messages_light/metadata.json create mode 100644 apps/messages_light/screenshot-call.png create mode 100644 apps/messages_light/screenshot-long-text1.png create mode 100644 apps/messages_light/screenshot-long-text2.png create mode 100644 apps/messages_light/screenshot-notify.png diff --git a/apps/messages_light/ChangeLog b/apps/messages_light/ChangeLog new file mode 100644 index 000000000..328e2a120 --- /dev/null +++ b/apps/messages_light/ChangeLog @@ -0,0 +1,7 @@ +1.0: New App! +1.1: fix app opening when a remove notification arrives +1.2: message_light overrides require() by sending requests to "message" to a proxy library which overrides pushMessage + settings now points to message settings + implemented use of the "messageicons" library + removed lib no longer used +1.3: icon changed \ No newline at end of file diff --git a/apps/messages_light/README.md b/apps/messages_light/README.md new file mode 100644 index 000000000..00fe39bd0 --- /dev/null +++ b/apps/messages_light/README.md @@ -0,0 +1,11 @@ +# Messages app + +This app handles the display of messages and message notifications. + +It is a GUI replacement for the `messages` apps. + + +## Creator + +Rarder44 + diff --git a/apps/messages_light/app-icon.js b/apps/messages_light/app-icon.js new file mode 100644 index 000000000..7d1da35c9 --- /dev/null +++ b/apps/messages_light/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UA/4ACBIMQwhL/ABMBqoAEoALDioLFqgLDBQoABERIkEBZcFBY9QBYVe1QAB1YLGrSlC/YLGrYHCr4Lrr9drpLC1oLEAAN5rxKB/ILHEYV5EY4LIHYoLorRaBqoPCBYlfUoXrBYwGBrdeDIILIvXVBZFa1I+CBY/5BZIHBBwOq1ILGrXVvf//oLGq+trLLFBYVVvQxCBY9XJIQLCgILDHoVVoALHAAQLCgALHBQUAioKFqgLDEgwiDAH4AGA")) \ No newline at end of file diff --git a/apps/messages_light/app-icon.png b/apps/messages_light/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b4b62ac2eadee63a98380856f9337d0050578a GIT binary patch literal 2841 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 literal 0 HcmV?d00001 diff --git a/apps/messages_light/full-size-app.png b/apps/messages_light/full-size-app.png new file mode 100644 index 0000000000000000000000000000000000000000..2df7915ed7274599f2d12f7b608e57107d25f65b GIT binary patch literal 3287 zcmcIn3sh2h8mDQ>nzqN*G(DVA!kX3$FP8uXMN-MML|U~m*UGMNMNGKJMNxc}Jw_`l zd)K7wI4PNxQ?8bpnblOQ6+>=Xsp-iI7{|p2WuoX_d`+EGyUp%d&Uc^x-|u_>zk5hu z7G?axM-xp;8#Q zPPUHY%itj*M~IJv!H#hv35LeuTv>4vh_@M*;lp5oP|PG4$}0(YA)iSIqH;(ai63+c$y=L$Rm+xcqh6eNTbjw&P(xR5*Y+YAOMnyAeBKSGstxO$d7h#a-I z1T;c`*^mro60nkE#RiF>b0A1zETb?e&JHAyK_U%9IS5}E9{)Zl6=Z<4cc56m@gW)X zF<=gd;Uh+6keCPiu$ctRDMz7@&)~rj2-D~!B9#YHh%ku)5yPl73K61{z;Guz4GJfP z4f%!f*$6MjlD<(sALDycSCD8{Li2EEk8-(EA-2h& zsQ*p}pT`JCq#_9G2%!iPz<@+7AmGO;!|+6+5Gj^8EW67rO^-!q@fVf~V`09R6cOQv znvo%VPX4eNCV#Ix*ACIN*o zp9v!`-{xJwl`@G z~c6B2P*2CeD6{I){%)@ve_OUC+#=!vNzmnoozRid$2-z$evj^SHED7&LVd)JFfZ6i)V}KZvUN; zLPm`>U2glAjepV?e9kjwQ%mmlf}XanKHi?&fZa#4zQ$-Madp{3yGi zk^uYLK`|Sez$E@DLGZ*~=77|}a}OUT6ecRG{eifKD*?onCS_JjbYxva<{MoZ(_F6c zs*Y?6S=Ae_IsddI2&fFYXQ*WxCD_ABe;9~NO*yBhn+wub*&jtt zW!JZ#&I(?2Ftftyho}OF()~TT*|F!d=J`C#uin@}+^Ebhsq$vC3Qtsp&QGX$ard;) z*j6UqyNVfg4WrIF3@q7bs9y#>Um2hDrhZXvU$*>+O?~^l zt-1r5SDq>wyaaJ2J0wQ&scrl0t9##pD>aJra5u>u0*$qpMiARh{QU`)!?fWDdBtbq$QC zdJNu|ac5Q>(5V;wf~Hq|qTxo|R2idYBrdwI*JrjkkRPa3OS!6f>gF<+4xM^3oAv#- zz~jcVeaSOsqSBlqp%;k#OY?f%ZB%CU_uqBN^Q&)> z9taflF6&p?#U?P2{;cxEYnOV1N3s1;z1jJnE>(K!(;F#?ZsvA%1-GYsW9i29Wc($K ze8Ulj`f9_j=F)*gUxU@!Rl&-YFN>l$eViWc0#jA-9&F*u>=B9{fvetChE$rMq;AQ-> z&a?m0i=GsgR#9rka1Je15)@)*{ z^Fp@VYgM^vzDz3frzvW?Gj4f553JDsD6dVa9RSm^_ob&qRJ6oz(T%Ho#n5G&k8^Gd5=x0{{m(3V66ZE literal 0 HcmV?d00001 diff --git a/apps/messages_light/messages_light.app.js b/apps/messages_light/messages_light.app.js new file mode 100644 index 000000000..8baeb7c01 --- /dev/null +++ b/apps/messages_light/messages_light.app.js @@ -0,0 +1,525 @@ +/* MESSAGES is a list of: + {id:int, + src, + title, + subject, + body, + sender, + tel:string, + new:true // not read yet + } +*/ + +let LOG=function(){ + //print.apply(null, arguments); +} + + + + +let settings= (()=>{ + let tmp={}; + tmp.NewEventFileName="messages_light.NewEvent.json"; + + tmp.fontSmall = "6x8"; + tmp.fontMedium = g.getFonts().includes("Vector")?"Vector:16":"6x8:2"; + tmp.fontBig = g.getFonts().includes("12x20")?"12x20":"6x8:2"; + tmp.fontLarge = g.getFonts().includes("6x15")?"6x15:2":"6x8:4"; + + + tmp.colHeadBg = g.theme.dark ? "#141":"#4f4"; + tmp.colBg = g.theme.dark ? "#000":"#fff"; + tmp.colLock = g.theme.dark ? "#ff0000":"#ff0000"; + + tmp.quiet=((require('Storage').readJSON('setting.json', 1) || {}).quiet) + + return tmp; +})(); +let EventQueue=[]; //in posizione 0, c'è quello attualmente visualizzato +let callInProgress=false; + + +let main = function(){ + LOG("Main"); + //quando apro quest'app, do per scontato che c'è un messaggio da leggere posto in un file particolare ( NewMessage.json ) + let eventToShow = require('Storage').readJSON(settings.NewEventFileName, true); + //require("Storage").erase(settings.NewEventFileName) + if( eventToShow!==undefined) + manageEvent(eventToShow); + else + load(); +}; + + +//TODO: RICORDARSI DI FARE IL DELETE +var manageEvent = function(event) { + + event.new=true; + + + LOG("manageEvent"); + if( event.id=="call") + { + showCall(event); + return; + } + switch(event.t) + { + case "add": + EventQueue.unshift(event); + + if(!callInProgress) + showMessage(event); + break; + + case "modify": + //cerco l'evento nella lista, se lo trovo, lo modifico, altrimenti lo pusho + let find=false; + EventQueue.forEach(element => { + if(element.id == event.id) + { + find=true; + Object.assign(element,event); + } + }); + if(!find) //se non l'ho trovato, lo aggiungo in fondo + EventQueue.unshift(event); + + if(!callInProgress) + showMessage(event); + break; + + case "remove": + + //se non c'è niente nella queue e non c'è una chiamata in corso + if( EventQueue.length==0 && !callInProgress) + next(); + + //se l'id è uguale a quello attualmente visualizzato ( e non siamo in chiamata ) + if(!callInProgress && EventQueue[0] !== undefined && EventQueue[0].id == event.id) + next(); //passo al messaggio successivo ( per la rimozione ci penserà la next ) + + else{ + //altrimenti rimuovo tutti gli elementi con quell'id( creando un nuovo array ) + let newEventQueue=[]; + EventQueue.forEach(element => { + if(element.id != event.id) + newEventQueue.push(element); + }); + EventQueue=newEventQueue; + } + + + + + break; + case "musicstate": + case "musicinfo": + + break; + } +}; + + + + + + +let showMessage = function(msg){ + LOG("showMessage"); + LOG(msg); + g.setBgColor(settings.colBg); + + + if(typeof msg.CanScrollDown==="undefined") + msg.CanScrollDown=false; + if(typeof msg.CanScrollUp==="undefined") + msg.CanScrollUp=false; + + + + + + // Normal text message display + let title=msg.title, titleFont = settings.fontLarge, lines; + if (title) { + let w = g.getWidth()-48; + if (g.setFont(titleFont).stringWidth(title) > w) + titleFont = settings.fontMedium; + if (g.setFont(titleFont).stringWidth(title) > w) { + lines = g.wrapString(title, w); + title = (lines.length>2) ? lines.slice(0,2).join("\n")+"..." : lines.join("\n"); + } + } + + + + let Layout = require("Layout"); + layout = new Layout({ type:"v", c: [ + {type:"h", fillx:1, bgCol:settings.colHeadBg, c: [ + { type:"btn", src:require("messageicons").getImage(msg), col:require("messageicons").getColor(msg), pad: 3}, + { type:"v", fillx:1, c: [ + {type:"txt", font:settings.fontSmall, label:msg.src||/*LANG*/"Message", bgCol:settings.colHeadBg, fillx:1, pad:2, halign:1 }, + title?{type:"txt", font:titleFont, label:title, bgCol:settings.colHeadBg, fillx:1, pad:2 }:{}, + ]}, + ]}, + {type:"v",fillx:1,filly:1,pad:2 ,halign:-1,c:[]}, + + + + + ]}); + + + if (!settings.quiet && msg.new) + { + msg.new=false; + Bangle.buzz(); + } + + + g.clearRect(Bangle.appRect); + layout.render(); + + PrintMessageStrings(msg); + Bangle.setLCDPower(1); + + DrawLock(); + +}; +let DrawLock=function() +{ + let w=8,h=8; + let x = g.getWidth()-w; + let y = 0; + if(Bangle.isLocked()) + g.setBgColor(settings.colLock); + else + g.setBgColor(settings.colHeadBg); + g.clearRect(x,y,x+w,y+h); +}; + + + + + + +let showCall = function(msg) +{ + LOG("showCall"); + LOG(msg); + // se anche prima era una call PrevMessage==msg.id + //non so perchè prima era cosi + if( msg.t=="remove") + { + LOG("hide call screen"); + next(); //dont shift + return; + } + + callInProgress=true; + + + + //se è una chiamata ( o una nuova chiamata, diversa dalla precedente ) + //la visualizzo + + var title=msg.title, titleFont = settings.fontLarge, lines; + if (title) { + var w = g.getWidth()-48; + if (g.setFont(titleFont).stringWidth(title) > w) + titleFont = settings.fontMedium; + if (g.setFont(titleFont).stringWidth(title) > w) { + lines = g.wrapString(title, w); + title = (lines.length>2) ? lines.slice(0,2).join("\n")+"..." : lines.join("\n"); + } + } + let Layout = require("Layout"); + layout = new Layout({ type:"v", c: [ + {type:"h", fillx:1, bgCol:settings.colHeadBg, c: [ + { type:"btn", src:require("messageicons").getImage(msg), col:require("messageicons").getColor(msg), pad: 3}, + { type:"v", fillx:1, c: [ + {type:"txt", font:settings.fontSmall, label:msg.src||/*LANG*/"Message", bgCol:settings.colHeadBg, fillx:1, pad:2, halign:1 }, + title?{type:"txt", font:titleFont, label:title, bgCol:settings.colHeadBg, fillx:1, pad:2 }:{}, + ]}, + ]}, + {type:"txt", font:settings.fontMedium, label:msg.body, fillx:1,filly:1,pad:2 ,halign:0} + ]}); + + + StopBuzzCall(); + if ( !settings.quiet ) { + if(msg.new) + { + msg.new=false; + CallBuzzTimer = setInterval(function() { + Bangle.buzz(500); + }, 1000); + + Bangle.buzz(500); + } + } + g.clearRect(Bangle.appRect); + layout.render(); + PrintMessageStrings(msg); + Bangle.setLCDPower(1); + DrawLock(); +}; + + + + + + + + + +let next=function(){ + LOG("next"); + StopBuzzCall(); + + + //se c'è una chiamata, non shifto + if(!callInProgress) + EventQueue.shift(); //passa al messaggio successivo, se presente - tolgo il primo + + callInProgress=false; + if( EventQueue.length == 0) + { + LOG("no element in queue - closing") + setTimeout(_ => load()); + return; + } + + + showMessage(EventQueue[0]); + +}; + + + + + + + + + + + +let showMapMessage=function(msg) { + + g.clearRect(Bangle.appRect); + PrintMessageStrings({body:"Not implemented!"}); + /*var m; + var distance, street, target, eta; + m=msg.title.match(/(.*) - (.*)/); + if (m) { + distance = m[1]; + street = m[2]; + } else street=msg.title; + m=msg.body.match(/(.*) - (.*)/); + if (m) { + target = m[1]; + eta = m[2]; + } else target=msg.body; + layout = new Layout({ type:"v", c: [ + {type:"txt", font:settings.fontMedium, label:target, bgCol:settings.colBg, fillx:1, pad:2 }, + {type:"h", bgCol:settings.colBg, fillx:1, c: [ + {type:"txt", font:"6x8", label:"Towards" }, + {type:"txt", font:settings.fontLarge, label:street } + ]}, + {type:"h",fillx:1, filly:1, c: [ + msg.img?{type:"img",src:atob(msg.img), scale:2}:{}, + {type:"v", fillx:1, c: [ + {type:"txt", font:settings.fontLarge, label:distance||"" } + ]}, + ]}, + {type:"txt", font:"6x8:2", label:eta } + ]}); + g.clearRect(Bangle.appRect); + layout.render(); + Bangle.setUI("updown",function() { + // any input to mark as not new and return to menu + msg.new = false; + layout = undefined; + checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); + });*/ +} + + + + + +var CallBuzzTimer=null; +let StopBuzzCall=function() +{ + if (CallBuzzTimer){ + clearInterval(CallBuzzTimer); + CallBuzzTimer=null; + } +} +let DrawTriangleUp=function() +{ + g.fillPoly([169,46,164,56,174,56]); +} +let DrawTriangleDown=function() +{ + g.fillPoly([169,170,164,160,174,160]); +} + + + + +let ScrollUp=function() +{ + msg= EventQueue[0]; + + if(typeof msg.FirstLine==="undefined") + msg.FirstLine=0; + if(typeof msg.CanScrollUp==="undefined") + msg.CanScrollUp=false; + + if(!msg.CanScrollUp) return; + + msg.FirstLine = msg.FirstLine>0?msg.FirstLine-1:0; + + PrintMessageStrings(msg); +} +let ScrollDown=function() +{ + msg= EventQueue[0]; + if(typeof msg.FirstLine==="undefined") + msg.FirstLine=0; + if(typeof msg.CanScrollDown==="undefined") + msg.CanScrollDown=false; + + if(!msg.CanScrollDown) return; + + msg.FirstLine = msg.FirstLine+1; + PrintMessageStrings(msg); +} + + + + + + +let PrintMessageStrings=function(msg) +{ + let MyWrapString = function (str,maxWidth) + { + str=str.replace("\r\n","\n").replace("\r","\n"); + return g.wrapString(str,maxWidth); + } + + + if(typeof msg.FirstLine==="undefined") msg.FirstLine=0; + + var bodyFont = typeof msg.bodyFont==="undefined"? settings.fontMedium : msg.bodyFont; + var Padding=2; + if(typeof msg.lines==="undefined") + { + g.setFont(bodyFont); + msg.lines = MyWrapString(msg.body,g.getWidth()-(Padding*2)) + if ( msg.lines.length<=2) + { + bodyFont= g.getFonts().includes("Vector")?"Vector:20":"6x8:3"; + g.setFont(bodyFont); + msg.lines = MyWrapString(msg.body,g.getWidth()-(Padding*2)) + msg.bodyFont = bodyFont; + } + } + + + + //prendo le linee da stampare + var NumLines=8; + var linesToPrint = (msg.lines.length>NumLines) ? msg.lines.slice(msg.FirstLine,msg.FirstLine+NumLines):msg.lines; + + + var yText=45; + + //invalido l'area e disegno il testo + g.setBgColor(settings.colBg); + g.clearRect(0,yText,176,176); + var xText=Padding; + yText+=Padding; + g.setFont(bodyFont); + var HText=g.getFontHeight(); + + yText=((176-yText)/2)-(linesToPrint.length * HText / 2) + yText; + + if( linesToPrint.length<=2) + { + g.setFontAlign(0,-1); + xText = g.getWidth()/2; + } + else + g.setFontAlign(-1,-1); + + + linesToPrint.forEach((line, i)=>{ + g.drawString(line,xText,yText+HText*i); + }); + + //disegno le freccie + if(msg.FirstLine!=0) + { + msg.CanScrollUp=true; + DrawTriangleUp(); + } + else + msg.CanScrollUp=false; + + if(msg.FirstLine+linesToPrint.length < msg.lines.length) + { + msg.CanScrollDown=true; + DrawTriangleDown(); + } + else + msg.CanScrollDown=false; + + +} + + + + + + +g.clear(); + +Bangle.on('lock', function(on) { + DrawLock(); +}); + +//se c'è una chiamata in corso NON devo togliere niente dal next ( in q) +setWatch(_=> next(), BTN1,{repeat: true}); + + +//il tap è il tocco con l'accellerometro! +Bangle.on('tap', function(data) { + if( data.double) //solo se in double + { + Bangle.setLocked(false); + Bangle.setLCDPower(1); + } +}); +Bangle.on('touch', function(button, xy) { + var height=176; //g.getHeight(); -> 176 B2 + height/=2; + + if(xy.y backup purpose + +let messageBootManager=function(type,event){ + //se l'app non è aperta + if ("undefined"==typeof manageEvent) + { + if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app + + //la apro + require("Storage").writeJSON("messages_light.NewEvent.json",{"event":event,"type":type}); + load("messages_light.app.js"); + } + else + { + //altrimenti gli dico di gestire il messaggio + manageEvent(type,event); + } +} +Bangle.on("message", messageBootManager); +Bangle.on("call", messageBootManager);*/ + + + +//override require to filter require("message") +global.require_real=global.require; +global.require = (_require => file => { + if (file==="messages") file = "messagesProxy"; + //else if (file==="messages_REAL") file = "messages"; //backdoor to real message + + return _require(file); +})(require); + diff --git a/apps/messages_light/messages_light.messagesProxy.js b/apps/messages_light/messages_light.messagesProxy.js new file mode 100644 index 000000000..7213ec7cb --- /dev/null +++ b/apps/messages_light/messages_light.messagesProxy.js @@ -0,0 +1,30 @@ + +//gestisco il messaggio a modo mio +exports.pushMessage = function(event) { + + //TODO: musica non ancora gestita dall'app -> passo a message + if( event.id=="music") return require_real("messages").pushMessage(event); + + //se l'app non è aperta + if ("undefined"==typeof manageEvent) + { + if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app + + //la apro + require_real("Storage").writeJSON("messages_light.NewEvent.json",event); + load("messages_light.app.js"); + } + else + { + //altrimenti gli dico di gestire il messaggio + manageEvent(event); + } +} + + +//Call original message library +exports.clearAll = function() { return require_real("messages").clearAll()} +exports.getMessages = function() { return require_real("messages").getMessages()} +exports.status = function() { return require_real("messages").status()} +exports.buzz = function() { return require_real("messages").buzz(msgSrc)} +exports.stopBuzz = function() { return require_real("messages").stopBuzz()} \ No newline at end of file diff --git a/apps/messages_light/messages_light.settings.js b/apps/messages_light/messages_light.settings.js new file mode 100644 index 000000000..b7197c70a --- /dev/null +++ b/apps/messages_light/messages_light.settings.js @@ -0,0 +1 @@ +eval(require("Storage").read("messages.settings.js")); diff --git a/apps/messages_light/metadata.json b/apps/messages_light/metadata.json new file mode 100644 index 000000000..9b7ca50a8 --- /dev/null +++ b/apps/messages_light/metadata.json @@ -0,0 +1,22 @@ +{ + "id": "messages_light", + "name": "Messages Light", + "version": "1.3", + "description": "A light implementation of messages App (display notifications from iOS and Gadgetbridge/Android)", + "icon": "app.png", + "type": "app", + "tags": "tool,system", + "supports": ["BANGLEJS","BANGLEJS2"], + "dependencies" : { "messageicons":"module","messages":"app" }, + "readme": "README.md", + "storage": [ + {"name":"messages_light.app.js","url":"messages_light.app.js"}, + {"name":"messages_light.settings.js","url":"messages_light.settings.js"}, + {"name":"messages_light.img","url":"app-icon.js","evaluate":true}, + {"name":"messagesProxy","url":"messages_light.messagesProxy.js"}, + {"name":"messages_light.boot.js","url":"messages_light.boot.js"} + ], + "data": [{"name":"messages_light.settings.json"},{"name":"messages_light.NewMessage.json"}], + "screenshots": [{"url":"screenshot-notify.png"} ,{"url":"screenshot-long-text1.png"},{"url":"screenshot-long-text2.png"}, {"url":"screenshot-call.png"} ], + "sortorder": -9 +} diff --git a/apps/messages_light/screenshot-call.png b/apps/messages_light/screenshot-call.png new file mode 100644 index 0000000000000000000000000000000000000000..703faad6fbf5198b95ee0ae769e51e785094fd96 GIT binary patch literal 2768 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 LqorD=jC=Jz5!(e7 literal 0 HcmV?d00001 diff --git a/apps/messages_light/screenshot-long-text2.png b/apps/messages_light/screenshot-long-text2.png new file mode 100644 index 0000000000000000000000000000000000000000..5408f20597c65831ec183ab44723bfaeebcfd99a GIT binary patch literal 3767 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 Date: Fri, 18 Nov 2022 18:35:44 +0100 Subject: [PATCH 2/3] changed all var into let cleanup main --- apps/messages_light/messages_light.app.js | 115 ++++++++-------------- 1 file changed, 43 insertions(+), 72 deletions(-) diff --git a/apps/messages_light/messages_light.app.js b/apps/messages_light/messages_light.app.js index 8baeb7c01..5d5363d38 100644 --- a/apps/messages_light/messages_light.app.js +++ b/apps/messages_light/messages_light.app.js @@ -39,16 +39,6 @@ let EventQueue=[]; //in posizione 0, c'è quello attualmente visualizzato let callInProgress=false; -let main = function(){ - LOG("Main"); - //quando apro quest'app, do per scontato che c'è un messaggio da leggere posto in un file particolare ( NewMessage.json ) - let eventToShow = require('Storage').readJSON(settings.NewEventFileName, true); - //require("Storage").erase(settings.NewEventFileName) - if( eventToShow!==undefined) - manageEvent(eventToShow); - else - load(); -}; //TODO: RICORDARSI DI FARE IL DELETE @@ -224,9 +214,9 @@ let showCall = function(msg) //se è una chiamata ( o una nuova chiamata, diversa dalla precedente ) //la visualizzo - var title=msg.title, titleFont = settings.fontLarge, lines; + let title=msg.title, titleFont = settings.fontLarge, lines; if (title) { - var w = g.getWidth()-48; + let w = g.getWidth()-48; if (g.setFont(titleFont).stringWidth(title) > w) titleFont = settings.fontMedium; if (g.setFont(titleFont).stringWidth(title) > w) { @@ -310,47 +300,14 @@ let showMapMessage=function(msg) { g.clearRect(Bangle.appRect); PrintMessageStrings({body:"Not implemented!"}); - /*var m; - var distance, street, target, eta; - m=msg.title.match(/(.*) - (.*)/); - if (m) { - distance = m[1]; - street = m[2]; - } else street=msg.title; - m=msg.body.match(/(.*) - (.*)/); - if (m) { - target = m[1]; - eta = m[2]; - } else target=msg.body; - layout = new Layout({ type:"v", c: [ - {type:"txt", font:settings.fontMedium, label:target, bgCol:settings.colBg, fillx:1, pad:2 }, - {type:"h", bgCol:settings.colBg, fillx:1, c: [ - {type:"txt", font:"6x8", label:"Towards" }, - {type:"txt", font:settings.fontLarge, label:street } - ]}, - {type:"h",fillx:1, filly:1, c: [ - msg.img?{type:"img",src:atob(msg.img), scale:2}:{}, - {type:"v", fillx:1, c: [ - {type:"txt", font:settings.fontLarge, label:distance||"" } - ]}, - ]}, - {type:"txt", font:"6x8:2", label:eta } - ]}); - g.clearRect(Bangle.appRect); - layout.render(); - Bangle.setUI("updown",function() { - // any input to mark as not new and return to menu - msg.new = false; - layout = undefined; - checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); - });*/ + } -var CallBuzzTimer=null; +let CallBuzzTimer=null; let StopBuzzCall=function() { if (CallBuzzTimer){ @@ -415,8 +372,8 @@ let PrintMessageStrings=function(msg) if(typeof msg.FirstLine==="undefined") msg.FirstLine=0; - var bodyFont = typeof msg.bodyFont==="undefined"? settings.fontMedium : msg.bodyFont; - var Padding=2; + let bodyFont = typeof msg.bodyFont==="undefined"? settings.fontMedium : msg.bodyFont; + let Padding=2; if(typeof msg.lines==="undefined") { g.setFont(bodyFont); @@ -433,19 +390,19 @@ let PrintMessageStrings=function(msg) //prendo le linee da stampare - var NumLines=8; - var linesToPrint = (msg.lines.length>NumLines) ? msg.lines.slice(msg.FirstLine,msg.FirstLine+NumLines):msg.lines; + let NumLines=8; + let linesToPrint = (msg.lines.length>NumLines) ? msg.lines.slice(msg.FirstLine,msg.FirstLine+NumLines):msg.lines; - var yText=45; + let yText=45; //invalido l'area e disegno il testo g.setBgColor(settings.colBg); g.clearRect(0,yText,176,176); - var xText=Padding; + let xText=Padding; yText+=Padding; g.setFont(bodyFont); - var HText=g.getFontHeight(); + let HText=g.getFontHeight(); yText=((176-yText)/2)-(linesToPrint.length * HText / 2) + yText; @@ -485,28 +442,15 @@ let PrintMessageStrings=function(msg) - - -g.clear(); - -Bangle.on('lock', function(on) { - DrawLock(); -}); - -//se c'è una chiamata in corso NON devo togliere niente dal next ( in q) -setWatch(_=> next(), BTN1,{repeat: true}); - - -//il tap è il tocco con l'accellerometro! -Bangle.on('tap', function(data) { +let doubleTapUnlock=function(data) { if( data.double) //solo se in double { Bangle.setLocked(false); Bangle.setLCDPower(1); } -}); -Bangle.on('touch', function(button, xy) { - var height=176; //g.getHeight(); -> 176 B2 +} +let toushScroll=function(button, xy) { + let height=176; //g.getHeight(); -> 176 B2 height/=2; if(xy.y next(), BTN1,{repeat: true}); + + //il tap è il tocco con l'accellerometro! + Bangle.on('tap', doubleTapUnlock); + Bangle.on('touch', toushScroll); + + //quando apro quest'app, do per scontato che c'è un messaggio da leggere posto in un file particolare ( NewMessage.json ) + let eventToShow = require('Storage').readJSON(settings.NewEventFileName, true); + require("Storage").erase(settings.NewEventFileName) + if( eventToShow!==undefined) + manageEvent(eventToShow); + else + { + LOG("file not found!"); + setTimeout(_ => load(), 0); + } +}; From 765f17b89abd0f9084e9f2d297cb8212da32b45e Mon Sep 17 00:00:00 2001 From: Rarder44 Date: Fri, 18 Nov 2022 18:58:58 +0100 Subject: [PATCH 3/3] comment --- apps/messages_light/messages_light.messagesProxy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/messages_light/messages_light.messagesProxy.js b/apps/messages_light/messages_light.messagesProxy.js index 7213ec7cb..723397057 100644 --- a/apps/messages_light/messages_light.messagesProxy.js +++ b/apps/messages_light/messages_light.messagesProxy.js @@ -2,7 +2,7 @@ //gestisco il messaggio a modo mio exports.pushMessage = function(event) { - //TODO: musica non ancora gestita dall'app -> passo a message + //TODO: now i can't handle the music, so i call the real message app if( event.id=="music") return require_real("messages").pushMessage(event); //se l'app non è aperta