From e578cab4e2c21d8a7f607b1792655caefaa8d2cd Mon Sep 17 00:00:00 2001 From: Denis Buzdalov Date: Sun, 5 May 2024 21:14:26 +0300 Subject: [PATCH] [ upstream ] Return new code with settings back to the original `andark` --- apps/andark/ChangeLog | 4 +- apps/andark/README.md | 14 +- apps/andark/andark_screen.png | Bin 3660 -> 3710 bytes apps/andark/app.js | 210 +++++++++++++++----------- apps/andark/metadata.json | 7 +- apps/{andark_w => andark}/settings.js | 2 +- apps/andark_w/ChangeLog | 1 - apps/andark_w/README.md | 17 --- apps/andark_w/andark_w_icon.png | Bin 1359 -> 0 bytes apps/andark_w/andark_w_screen.png | Bin 3710 -> 0 bytes apps/andark_w/app.js | 148 ------------------ apps/andark_w/app_icon.js | 1 - apps/andark_w/metadata.json | 18 --- 13 files changed, 139 insertions(+), 283 deletions(-) rename apps/{andark_w => andark}/settings.js (94%) delete mode 100644 apps/andark_w/ChangeLog delete mode 100644 apps/andark_w/README.md delete mode 100644 apps/andark_w/andark_w_icon.png delete mode 100644 apps/andark_w/andark_w_screen.png delete mode 100644 apps/andark_w/app.js delete mode 100644 apps/andark_w/app_icon.js delete mode 100644 apps/andark_w/metadata.json diff --git a/apps/andark/ChangeLog b/apps/andark/ChangeLog index 341868930..748f10fad 100644 --- a/apps/andark/ChangeLog +++ b/apps/andark/ChangeLog @@ -1,4 +1,6 @@ 0.01: Release 0.02: Rename app 0.03: Add type "clock" -0.04: changed update cylce, when locked +0.04: Changed update cylce, when locked +0.05: Fix support for dark theme + support widgets + + add settings for widgets, order of drawing and hour hand length diff --git a/apps/andark/README.md b/apps/andark/README.md index 3770c1017..9034677c2 100644 --- a/apps/andark/README.md +++ b/apps/andark/README.md @@ -1,10 +1,16 @@ -# Analog Clock +# Dark Analog Clock ## Features -* second hand +* second hand (only on unlocked screen) * date -* battery percantage -* no widgets +* battery percentage (showing charge status with color) +* turned off or swipeable widgets (choose in settings) ![logo](andark_screen.png) + +## Settings + +* whether to load widgets, or not; if widgets are loaded, they are swipeable from the top; if not, NO ACTIONS of widgets are available +* date and battery can be printed both below hands (as if hands were physical) and above (more readable) +* hour hand can be made slighly shorter to improve readability when minute hand is behind a number diff --git a/apps/andark/andark_screen.png b/apps/andark/andark_screen.png index 2ac54c1cd160a6f314f9d7b2bae433fdd36672b0..1f0e5b089fcd851c7f03add436ef478ff8ff3667 100644 GIT binary patch literal 3710 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 literal 3660 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 e%?Zc0r|v)X{}o=3H&nR*000012){ - h=h-12; - } - //calculates the position of the minute, second and hour hand - h=2*Math.PI/12*(h+m/60)-Math.PI/2; - //more accurate - //m=2*Math.PI/60*(m+s/60)-Math.PI/2; - m=2*Math.PI/60*(m)-Math.PI/2; - - s=2*Math.PI/60*s-Math.PI/2; - g.setFontAlign(0,0); - g.setFont("Vector",10); - let dateStr = " "+require("locale").date(d)+" "; - g.drawString(dateStr, c.x, c.y+20, true); - // g.drawString(d.getDate(),1.4*c.x,c.y,true); - g.drawString(Math.round(E.getBattery()/5)*5+"%",c.x,c.y+40,true); - drawlet(); - //g.setColor(1,0,0); - const hz = zeiger(100,5,h); - g.fillPoly(hz,true); - // g.setColor(1,1,1); - const minz = zeiger(150,5,m); - g.fillPoly(minz,true); - if (unlock){ - const sekz = zeiger(150,2,s); - g.fillPoly(sekz,true); - } - g.fillCircle(c.x,c.y,4); - - - -} -//draws the scale once the app is startet -function drawScale(){ - for(let i=-14;i<47;i++){ - const win=i*2*Math.PI/60; - let d=2; - if(i%5==0){d=5;} - g.fillPoly(zeiger(300,d,win),true); - g.setColor(0,0,0); - g.fillRect(10,10,2*c.x-10,2*c.x-10); - g.setColor(1,1,1); - } -} - -//draws the numbers on the screen - -function drawlet(){ - g.setFont("Vector",20); - for(let i = 0;i<12;i++){ - g.drawString(zahlpos[i][0],zahlpos[i][1],zahlpos[i][2]); - } -} -//calcultes the Position of the numbers when app starts and saves them in an array +//calculates the Position of the numbers when app starts and saves them in an array function setlet(){ let sk=1; for(let i=-10;i<50;i+=5){ @@ -89,36 +25,130 @@ function setlet(){ } } setlet(); + +let unlock = false; + +function zeiger(len,dia,tim){ + const x=c.x+ Math.cos(tim)*len/2, + y=c.y + Math.sin(tim)*len/2, + d={"d":3,"x":dia/2*Math.cos(tim+Math.PI/2),"y":dia/2*Math.sin(tim+Math.PI/2)}, + pol=[c.x-d.x,c.y-d.y,c.x+d.x,c.y+d.y,x+d.x,y+d.y,x-d.x,y-d.y]; + return pol; + +} + +function drawHands(d) { + let m=d.getMinutes(), h=d.getHours(), s=d.getSeconds(); + g.setColor(1,1,1); + + if(h>12){ + h=h-12; + } + //calculates the position of the minute, second and hour hand + h=2*Math.PI/12*(h+m/60)-Math.PI/2; + //more accurate + //m=2*Math.PI/60*(m+s/60)-Math.PI/2; + m=2*Math.PI/60*(m)-Math.PI/2; + + s=2*Math.PI/60*s-Math.PI/2; + //g.setColor(1,0,0); + const hz = zeiger(settings.shortHrHand?88:100,5,h); + g.fillPoly(hz,true); + //g.setColor(1,1,1); + const minz = zeiger(150,5,m); + g.fillPoly(minz,true); + if (unlock){ + const sekz = zeiger(150,2,s); + g.fillPoly(sekz,true); + } + g.fillCircle(c.x,c.y,4); +} + +function drawText(d) { + g.setFont("Vector",10); + g.setBgColor(0,0,0); + g.setColor(1,1,1); + let dateStr = require("locale").date(d); + g.drawString(dateStr, c.x, c.y+20, true); + let batStr = Math.round(E.getBattery()/5)*5+"%"; + if (Bangle.isCharging()) { + g.setBgColor(1,0,0); + } + g.drawString(batStr, c.x, c.y+40, true); +} + +function drawNumbers() { + //draws the numbers on the screen + g.setFont("Vector",20); + g.setColor(1,1,1); + g.setBgColor(0,0,0); + for(let i = 0;i<12;i++){ + g.drawString(zahlpos[i][0],zahlpos[i][1],zahlpos[i][2],true); + } +} + +function draw(){ + // draw black rectangle in the middle to clear screen from scale and hands + g.setColor(0,0,0); + g.fillRect(10,10,2*c.x-10,2*c.x-10); + // prepare for drawing the text + g.setFontAlign(0,0); + // do drawing + drawNumbers(); + const d=new Date(); + if (settings.textAboveHands) { + drawHands(d); drawText(d); + } else { + drawText(d); drawHands(d); + } +} + +//draws the scale once the app is startet +function drawScale(){ + // clear the screen + g.setBgColor(0,0,0); + g.clear(); + // draw the ticks of the scale + for(let i=-14;i<47;i++){ + const win=i*2*Math.PI/60; + let d=2; + if(i%5==0){d=5;} + g.fillPoly(zeiger(300,d,win),true); + g.setColor(0,0,0); + g.fillRect(10,10,2*c.x-10,2*c.x-10); + g.setColor(1,1,1); + } +} + +//// main running sequence //// + +if (settings.loadWidgets) { + // Prepare widgets + Bangle.loadWidgets(); + require("widget_utils").swipeOn(); +} // Clear the screen once, at startup -g.setBgColor(0,0,0); -g.clear(); drawScale(); draw(); -let secondInterval= setInterval(draw, 1000); -// Stop updates when LCD is off, restart when on +let secondInterval = setInterval(draw, 1000); +// Stop updates when LCD is off, restart when on Bangle.on('lcdPower',on=>{ if (secondInterval) clearInterval(secondInterval); secondInterval = undefined; if (on) { - secondInterval = setInterval(draw, 1000); - draw(); // draw immediately + secondInterval = setInterval(draw, 1000); + draw(); // draw immediately } }); Bangle.on('lock',on=>{ + unlock = !on; if (secondInterval) clearInterval(secondInterval); - secondInterval = undefined; - if (!on) { - secondInterval = setInterval(draw, 1000); - unlock = true; - draw(); // draw immediately - }else{ - secondInterval = setInterval(draw, 60000); - unlock = false; - draw(); - } - }); + secondInterval = setInterval(draw, unlock ? 1000 : 60000); + draw(); // draw immediately +}); +Bangle.on('charging',on=>{draw();}); // Show launcher when middle button pressed Bangle.setUI("clock"); diff --git a/apps/andark/metadata.json b/apps/andark/metadata.json index 3e2b3116e..706b962e9 100644 --- a/apps/andark/metadata.json +++ b/apps/andark/metadata.json @@ -1,15 +1,18 @@ { "id": "andark", "name": "Analog Dark", "shortName":"AnDark", - "version":"0.04", + "version":"0.05", "description": "analog clock face without disturbing widgets", "icon": "andark_icon.png", "type": "clock", "tags": "clock", "supports" : ["BANGLEJS2"], + "screenshots": [{"url":"andark_screen.png"}], "readme": "README.md", "storage": [ {"name":"andark.app.js","url":"app.js"}, + {"name":"andark.settings.js","url":"settings.js"}, {"name":"andark.img","url":"app_icon.js","evaluate":true} - ] + ], + "data": [{"name":"andark.json"}] } diff --git a/apps/andark_w/settings.js b/apps/andark/settings.js similarity index 94% rename from apps/andark_w/settings.js rename to apps/andark/settings.js index a9092cc74..708913705 100644 --- a/apps/andark_w/settings.js +++ b/apps/andark/settings.js @@ -9,7 +9,7 @@ const save = () => require('Storage').write('andark.json', settings); const appMenu = { - '': {title: 'alarm'}, '< Back': back, + '': {title: 'andark'}, '< Back': back, /*LANG*/'Load widgets': { value : !!settings.loadWidgets, onchange : v => { settings.loadWidgets=v; save();} diff --git a/apps/andark_w/ChangeLog b/apps/andark_w/ChangeLog deleted file mode 100644 index 102a6612d..000000000 --- a/apps/andark_w/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -0.01: Release based on andark v0.04 diff --git a/apps/andark_w/README.md b/apps/andark_w/README.md deleted file mode 100644 index bf86b52a8..000000000 --- a/apps/andark_w/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Analog Clock with widgets - -## Features - -* second hand -* date -* battery percentage -* swipeable widgets - -![logo](andark_w_screen.png) - -## Changes from the original Analog Clock (`andark`) - -* behaves correctly on the light theme (no change in the image) -* date, battery and numbers are printed above hands -* hour hand is slighly shorter to improve readability when minute hand is behind a number -* widgets are loaded and are swipeable from the top diff --git a/apps/andark_w/andark_w_icon.png b/apps/andark_w/andark_w_icon.png deleted file mode 100644 index ab9cb0ac3a88ab199c32c0509094fb9a70f2f4c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1359 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt3#k#FX`Y^13>-iXP$eS^10zTc z5HljNnHZTFn1Nz#Kr94ggVcbq6eBB`?g6r;q3kI@wgyxUNRJ^S69X@ho&&^2K(+{w zUIoON?GU^60ofqH0fy#G3}6*7+TGJPK*31Q&_K`F45;70$i&LP*vimI!O+CY#N5i* z7-&D^0)&e|CfP@sJO{e3CDYkCz|+}Tp`a)~Ei)&TfuUkf?L=FT!wxb>a_)=I+hw_|`Qk{9t_a=E0H| zN~-_#HMewpeXv9R{X5%t_ZXe_o-tXi&6cq%cbQP3;pA9R=Jg*I^E1zI@JO3xsP5@m zA`}1p!^f|Br#4&7|6Sa2WzJEC`5rRKZJEOP0_SsXu|2PSWT1UY>!anz9iHMUbx(FZ z`Y8Rp=`_=Mp4l(2*c8r)(Al!_(y=ueSw}7(5e&Vo8GoW;P0_taYo@MVQ|bTjP=a54 z55CV^ z`{&A%=^{PMclG-|8*;IfHM*TG+}AI=ypZX~{6_7)PuE{*yy<@_TUWP;lfv1aONXEUlk!Ssw3CNSe4}F^0Z8QuSO*ym#ngaMsU;Nv3I`4GY;TWr%cei~$TQj$88xMoK&%-&* zhGIW-PFXlkYGR5k4>B^#kXfG}Q@hATp=)`Gr`D?NlLXGMuvAW%RPKB+{HT&ypVP7c zwJTA7rV9p$vYy+SEmQRj7@tjkKP6?#75}HnB)}lzRdv&EkE|SvFSYO=T9&yte$m%r+tyF<;Lv{ z1`-mJT2D;2wsu&m^kVW^rq7laUf)zMDpC1ey8B>chO+(Ed-s;qRdLOkd-8>i?M-E; zw>5kvR(T8|1}vg{g?(4niTJurYVUSkxPL$MTCoig4As>RJ9VO}($BbE%R8Mj={$3L zyHkDb)QJf^J9Y`JEzOnKEL>mLWj1}XiDK7;?Wa?J{yp8D$Z%qDPp66HT&BPKY=w63 z-lEL({d*gug0kltnfjV7`)B*zy|2!9;ANopae29hn`fkBZglw^zt1VFSryIi@^|m1 zUI!tD5)t2t>mz*^hPo{;H}hJ!zhvtxNyfPfC2r;uqrIkXbyvzXdB-|m@OOij!2Ko> W>FawkpLPM0BZH@_pUXO@geCw}5)PUG diff --git a/apps/andark_w/andark_w_screen.png b/apps/andark_w/andark_w_screen.png deleted file mode 100644 index 1f0e5b089fcd851c7f03add436ef478ff8ff3667..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3710 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 diff --git a/apps/andark_w/app.js b/apps/andark_w/app.js deleted file mode 100644 index 2120d75a3..000000000 --- a/apps/andark_w/app.js +++ /dev/null @@ -1,148 +0,0 @@ -const defaultSettings = { - loadWidgets : false, - textAboveHands : false, - shortHrHand : false -} -const settings = Object.assign(defaultSettings, require('Storage').readJSON('andark.json',1)||{}); - -const c={"x":g.getWidth()/2,"y":g.getHeight()/2}; - -let zahlpos=[]; -//calculates the Position of the numbers when app starts and saves them in an array -function setlet(){ - let sk=1; - for(let i=-10;i<50;i+=5){ - let win=i*2*Math.PI/60; - let xsk =c.x+2+Math.cos(win)*(c.x-10), - ysk =c.y+2+Math.sin(win)*(c.x-10); - if(sk==3){xsk-=10;} - if(sk==6){ysk-=10;} - if(sk==9){xsk+=10;} - if(sk==12){ysk+=10;} - if(sk==10){xsk+=3;} - zahlpos.push([sk,xsk,ysk]); - sk+=1; - } -} -setlet(); - -let unlock = false; - -function zeiger(len,dia,tim){ - const x=c.x+ Math.cos(tim)*len/2, - y=c.y + Math.sin(tim)*len/2, - d={"d":3,"x":dia/2*Math.cos(tim+Math.PI/2),"y":dia/2*Math.sin(tim+Math.PI/2)}, - pol=[c.x-d.x,c.y-d.y,c.x+d.x,c.y+d.y,x+d.x,y+d.y,x-d.x,y-d.y]; - return pol; - -} - -function drawHands(d) { - let m=d.getMinutes(), h=d.getHours(), s=d.getSeconds(); - //draw black rectangle in the middle to clear screen from scale and hands - g.setColor(0,0,0); - g.fillRect(10,10,2*c.x-10,2*c.x-10); - g.setColor(1,1,1); - - if(h>12){ - h=h-12; - } - //calculates the position of the minute, second and hour hand - h=2*Math.PI/12*(h+m/60)-Math.PI/2; - //more accurate - //m=2*Math.PI/60*(m+s/60)-Math.PI/2; - m=2*Math.PI/60*(m)-Math.PI/2; - - s=2*Math.PI/60*s-Math.PI/2; - //g.setColor(1,0,0); - const hz = zeiger(settings.shortHrHand?88:100,5,h); - g.fillPoly(hz,true); - // g.setColor(1,1,1); - const minz = zeiger(150,5,m); - g.fillPoly(minz,true); - if (unlock){ - const sekz = zeiger(150,2,s); - g.fillPoly(sekz,true); - } - g.fillCircle(c.x,c.y,4); -} - -function drawText(d) { - g.setFontAlign(0,0); - g.setFont("Vector",10); - g.setBgColor(0,0,0); - g.setColor(1,1,1); - let dateStr = require("locale").date(d); - g.drawString(dateStr, c.x, c.y+20, true); - // g.drawString(d.getDate(),1.4*c.x,c.y,true); - let batStr = Math.round(E.getBattery()/5)*5+"%"; - if (Bangle.isCharging()) { - g.setColor(1,0,0); - } - g.drawString(batStr, c.x, c.y+40, true); - - //draws the numbers on the screen - g.setFont("Vector",20); - g.setColor(1,1,1); - for(let i = 0;i<12;i++){ - g.drawString(zahlpos[i][0],zahlpos[i][1],zahlpos[i][2],true); - } -} - -function draw(){ - const d=new Date(); - if (settings.textAboveHands) { - drawHands(); drawText(); - } else { - drawText(); drawHands(); - } -} - -//draws the scale once the app is startet -function drawScale(){ - // clear the screen - g.setBgColor(0,0,0); - g.clear(); - // draw the ticks of the scale - for(let i=-14;i<47;i++){ - const win=i*2*Math.PI/60; - let d=2; - if(i%5==0){d=5;} - g.fillPoly(zeiger(300,d,win),true); - g.setColor(0,0,0); - g.fillRect(10,10,2*c.x-10,2*c.x-10); - g.setColor(1,1,1); - } -} - -//// main running sequence //// - -if (settings.loadWidgets) { - // Prepare widgets - Bangle.loadWidgets(); - require("widget_utils").swipeOn(); -} -// Clear the screen once, at startup -drawScale(); -draw(); - -let secondInterval = setInterval(draw, 1000); - -// Stop updates when LCD is off, restart when on -Bangle.on('lcdPower',on=>{ - if (secondInterval) clearInterval(secondInterval); - secondInterval = undefined; - if (on) { - secondInterval = setInterval(draw, 1000); - draw(); // draw immediately - } -}); -Bangle.on('lock',on=>{ - unlock = !on; - if (secondInterval) clearInterval(secondInterval); - secondInterval = setInterval(draw, unlock ? 1000 : 60000); - draw(); // draw immediately -}); - -// Show launcher when middle button pressed -Bangle.setUI("clock"); diff --git a/apps/andark_w/app_icon.js b/apps/andark_w/app_icon.js deleted file mode 100644 index e755d50f8..000000000 --- a/apps/andark_w/app_icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("mEwxH+CiHXAhARMADoiHFRAzVJMQrMF7pseAH630RWw2Q67+EAAQnRMSYoFAYQwPNrAnGF9wuXP4xUHAY4tKZR4NEF54hRF6xNCJ4QFFF8bVXF6rmVF/avJGC7LNDqIaYF/4v/DUgvZDAQcTCYkHh0Og4FEhwMCAoovfEYQvpEYoECMwQ1GF9abCF8IkBAYQ2CBQgYEFyYvGKgYDDF4omSeCQoDGQgviXYiSERw4vjGxAvoS4guceBIvsMAaHDF8YwFAE4vvSA4v/SHgjCABgkkF74waX9zxuGYYw/GGAA==")) diff --git a/apps/andark_w/metadata.json b/apps/andark_w/metadata.json deleted file mode 100644 index 522da2430..000000000 --- a/apps/andark_w/metadata.json +++ /dev/null @@ -1,18 +0,0 @@ -{ "id": "andark_w", - "name": "Analog Dark with widgets support", - "shortName":"AnDarkW", - "version":"0.01", - "description": "analog clock face with swipeable widgets", - "icon": "andark_w_icon.png", - "type": "clock", - "tags": "clock", - "supports" : ["BANGLEJS2"], - "screenshots": [{"url":"andark_w_screen.png"}], - "readme": "README.md", - "storage": [ - {"name":"andark_w.app.js","url":"app.js"}, - {"name":"andark_w.settings.js","url":"settings.js"}, - {"name":"andark_w.img","url":"app_icon.js","evaluate":true} - ] - "data": [{"name":"andark.json"}] -}