From b25611ee8481be3ae00cce6f91803588fedb4e5f Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Sat, 19 Feb 2022 16:37:34 -0500 Subject: [PATCH 01/37] Fix track name, artist, and album names clipping --- apps/messages/app.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index 4aaf97369..f0ee249e2 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -165,6 +165,10 @@ function showMapMessage(msg) { }); } +function reduceStringAndPad(text, maxLen) { + return text.length > maxLen ? text.substr(0, maxLen - 1) + '...' : text; +} + function showMusicMessage(msg) { function fmtTime(s) { var m = Math.floor(s/60); @@ -178,15 +182,20 @@ function showMusicMessage(msg) { layout = undefined; checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); } + + var trackName = reduceStringAndPad(msg.track, 13); + var artistName = reduceStringAndPad(msg.artist, 21); + var albumName = reduceStringAndPad(msg.album, 21); + layout = new Layout({ type:"v", c: [ {type:"h", fillx:1, bgCol:colBg, c: [ { type:"btn", src:getBackImage, cb:back }, { type:"v", fillx:1, c: [ - { type:"txt", font:fontMedium, label:msg.artist, pad:2 }, - { type:"txt", font:fontMedium, label:msg.album, pad:2 } + { type:"txt", font:fontMedium, label:artistName, pad:2 }, + { type:"txt", font:fontMedium, label:albumName, pad:2 } ]} ]}, - {type:"txt", font:fontLarge, label:msg.track, fillx:1, filly:1, pad:2 }, + {type:"txt", font:fontLarge, label:trackName, fillx:1, filly:1, pad:2 }, Bangle.musicControl?{type:"h",fillx:1, c: [ {type:"btn", pad:8, label:"\0"+atob("FhgBwAADwAAPwAA/wAD/gAP/gA//gD//gP//g///j///P//////////P//4//+D//gP/4A/+AD/gAP8AA/AADwAAMAAA"), cb:()=>Bangle.musicControl("play")}, // play {type:"btn", pad:8, label:"\0"+atob("EhaBAHgHvwP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP3gHg"), cb:()=>Bangle.musicControl("pause")}, // pause From 4e1cec0993629281ea1e1b3906591aeca85c71f2 Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Sat, 19 Feb 2022 16:37:50 -0500 Subject: [PATCH 02/37] Increment app version --- apps/messages/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index 6834693ae..e84d9f0d9 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.21", + "version": "0.22", "description": "App to display notifications from iOS and Gadgetbridge", "icon": "app.png", "type": "app", From 7d9ef97800115cbccbdc3f822b55bba7bddfa4ea Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Sat, 19 Feb 2022 17:18:21 -0500 Subject: [PATCH 03/37] Make music text scroll --- apps/messages/app.js | 68 +++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index f0ee249e2..7d3d78e2e 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -165,11 +165,20 @@ function showMapMessage(msg) { }); } -function reduceStringAndPad(text, maxLen) { - return text.length > maxLen ? text.substr(0, maxLen - 1) + '...' : text; +function reduceStringAndPad(text, offset, maxLen) { + var sliceLength = offset + maxLen > text.length ? text.length - offset : maxLen; + return text.substr(offset, sliceLength).padEnd(maxLen, " "); } function showMusicMessage(msg) { + var updateLabelsInterval; + var trackScrollOffset = 0; + var artistScrollOffset = 0; + var albumScrollOffset = 0; + var trackName = ''; + var artistName = ''; + var albumName = ''; + function fmtTime(s) { var m = Math.floor(s/60); s = (parseInt(s%60)).toString().padStart(2,0); @@ -177,34 +186,47 @@ function showMusicMessage(msg) { } function back() { + clearInterval(updateLabelsInterval); msg.new = false; saveMessages(); layout = undefined; checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); } - var trackName = reduceStringAndPad(msg.track, 13); - var artistName = reduceStringAndPad(msg.artist, 21); - var albumName = reduceStringAndPad(msg.album, 21); + function updateLabels() { + trackName = reduceStringAndPad(msg.track, trackScrollOffset, 13); + artistName = reduceStringAndPad(msg.artist, artistScrollOffset, 21); + albumName = reduceStringAndPad(msg.album, albumScrollOffset, 21); - layout = new Layout({ type:"v", c: [ - {type:"h", fillx:1, bgCol:colBg, c: [ - { type:"btn", src:getBackImage, cb:back }, - { type:"v", fillx:1, c: [ - { type:"txt", font:fontMedium, label:artistName, pad:2 }, - { type:"txt", font:fontMedium, label:albumName, pad:2 } - ]} - ]}, - {type:"txt", font:fontLarge, label:trackName, fillx:1, filly:1, pad:2 }, - Bangle.musicControl?{type:"h",fillx:1, c: [ - {type:"btn", pad:8, label:"\0"+atob("FhgBwAADwAAPwAA/wAD/gAP/gA//gD//gP//g///j///P//////////P//4//+D//gP/4A/+AD/gAP8AA/AADwAAMAAA"), cb:()=>Bangle.musicControl("play")}, // play - {type:"btn", pad:8, label:"\0"+atob("EhaBAHgHvwP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP3gHg"), cb:()=>Bangle.musicControl("pause")}, // pause - {type:"btn", pad:8, label:"\0"+atob("EhKBAMAB+AB/gB/wB/8B/+B//B//x//5//5//x//B/+B/8B/wB/gB+AB8ABw"), cb:()=>Bangle.musicControl("next")}, // next - ]}:{}, - {type:"txt", font:"6x8:2", label:msg.dur?fmtTime(msg.dur):"--:--" } - ]}); - g.clearRect(Bangle.appRect); - layout.render(); + layout = new Layout({ type:"v", c: [ + {type:"h", fillx:1, bgCol:colBg, c: [ + { type:"btn", src:getBackImage, cb:back }, + { type:"v", fillx:1, c: [ + { type:"txt", font:fontMedium, label:artistName, pad:2 }, + { type:"txt", font:fontMedium, label:albumName, pad:2 } + ]} + ]}, + {type:"txt", font:fontLarge, label:trackName, fillx:1, filly:1, pad:2 }, + Bangle.musicControl?{type:"h",fillx:1, c: [ + {type:"btn", pad:8, label:"\0"+atob("FhgBwAADwAAPwAA/wAD/gAP/gA//gD//gP//g///j///P//////////P//4//+D//gP/4A/+AD/gAP8AA/AADwAAMAAA"), cb:()=>Bangle.musicControl("play")}, // play + {type:"btn", pad:8, label:"\0"+atob("EhaBAHgHvwP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP3gHg"), cb:()=>Bangle.musicControl("pause")}, // pause + {type:"btn", pad:8, label:"\0"+atob("EhKBAMAB+AB/gB/wB/8B/+B//B//x//5//5//x//B/+B/8B/wB/gB+AB8ABw"), cb:()=>Bangle.musicControl("next")}, // next + ]}:{}, + {type:"txt", font:"6x8:2", label:msg.dur?fmtTime(msg.dur):"--:--" } + ]}); + g.reset().clearRect(Bangle.appRect); + layout.render(); + + trackScrollOffset++; + artistScrollOffset++; + albumScrollOffset++; + + if (trackScrollOffset > trackName.length) trackScrollOffset = 0; + if (artistScrollOffset > artistName.length) artistScrollOffset = 0; + if (albumScrollOffset > albumName.length) albumScrollOffset = 0; + } + + updateLabelsInterval = setInterval(updateLabels, 1000); } function showMessageScroller(msg) { From 405711e82b44fb1562e5b18b8446548883d8b5b4 Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Sat, 19 Feb 2022 17:31:29 -0500 Subject: [PATCH 04/37] End scrolling at end of text --- apps/messages/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index 7d3d78e2e..67738bc70 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -221,9 +221,9 @@ function showMusicMessage(msg) { artistScrollOffset++; albumScrollOffset++; - if (trackScrollOffset > trackName.length) trackScrollOffset = 0; - if (artistScrollOffset > artistName.length) artistScrollOffset = 0; - if (albumScrollOffset > albumName.length) albumScrollOffset = 0; + if ((trackScrollOffset + 13) > msg.track.length) trackScrollOffset = 0; + if ((artistScrollOffset + 21) > msg.artist.length) artistScrollOffset = 0; + if ((albumScrollOffset + 21) > msg.album.length) albumScrollOffset = 0; } updateLabelsInterval = setInterval(updateLabels, 1000); From d420f928203d0efbe7ce5f2eac7d5427320d0d6c Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Mon, 21 Feb 2022 16:44:35 +0100 Subject: [PATCH 05/37] Update 7x7dotsclock.app.js Fix Message indicator position, Fix Date visibility --- apps/7x7dotsclock/7x7dotsclock.app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.app.js b/apps/7x7dotsclock/7x7dotsclock.app.js index 3f2e9b9b1..15259ea8f 100644 --- a/apps/7x7dotsclock/7x7dotsclock.app.js +++ b/apps/7x7dotsclock/7x7dotsclock.app.js @@ -278,7 +278,7 @@ function drawWidgeds() { var x1M = 100; var y1M = y1B; - var x2M = x1M + 30; + var x2M = x1M + 25; var y2M = y2B; if (messages.some(m=>m.new)) { @@ -295,6 +295,7 @@ function drawWidgeds() { print(strDow[dow] + ' ' + day + '.' + month + ' ' + year); + g.setColor(g.theme.fg); g.setFontAlign(-1, -1,0); g.setFont("Vector", 20); g.drawString(strDow[dow] + ' ' + day, 0, 0, true); From 25e700e577df1f0796feedbb02995720cfd5a302 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Mon, 21 Feb 2022 17:07:32 +0100 Subject: [PATCH 06/37] Update 7x7dotsclock.app.js respect theme colors --- apps/7x7dotsclock/7x7dotsclock.app.js | 32 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.app.js b/apps/7x7dotsclock/7x7dotsclock.app.js index 15259ea8f..1f846a340 100644 --- a/apps/7x7dotsclock/7x7dotsclock.app.js +++ b/apps/7x7dotsclock/7x7dotsclock.app.js @@ -13,9 +13,8 @@ var Xs = 0, Ys = 30,Xe = 175, Ye=175; var SegH = (Ye-Ys)/2,SegW = (Xe-Xs)/2; var Dx = SegW/14, Dy = SegH/16; -const hColor = [1,1,1]; + const mColor = [0.3,0.3,1]; -const bColor = [0.2,0.2,0.2]; const Font = [ [ @@ -114,16 +113,21 @@ const Font = [ var dho = -1, eho = -1, dmo = -1, emo = -1; -function drawHSeg(x1,y1,x2,y2,Num,dColor,Size) { - g.setColor(0,0,0); +function drawHSeg(x1,y1,x2,y2,Num,Color,Size) { + //g.setColor(0,0,0); + g.setColor(g.theme.bg); g.fillRect(x1, y1, x2, y2); for (let i = 1; i < 8; i++) { for (let j = 1; j < 8; j++) { if (Font[Num][j-1][i-1] == 1) { - g.setColor(dColor[0],dColor[1],dColor[2]); + if (Color == "fg") { + g.setColor(g.theme.fg); + } else { + g.setColor(mColor[0],mColor[1],mColor[2]); + } g.fillCircle(x1+Dx+(i-1)*(x2-x1)/7,y1+Dy+(j-1)*(y2-y1)/7,Size); } else { - g.setColor(bColor[0],bColor[1],bColor[2]); + g.setColor(g.theme.fg); g.fillCircle(x1+Dx+(i-1)*(x2-x1)/7,y1+Dy+(j-1)*(y2-y1)/7,1); } } @@ -131,11 +135,15 @@ function drawHSeg(x1,y1,x2,y2,Num,dColor,Size) { } -function drawSSeg(x1,y1,x2,y2,Num,dColor,Size) { +function drawSSeg(x1,y1,x2,y2,Num,Color,Size) { for (let i = 1; i < 8; i++) { for (let j = 1; j < 8; j++) { if (Font[Num][j-1][i-1] == 1) { - g.setColor(dColor[0],dColor[1],dColor[2]); + if (Color == "fg") { + g.setColor(g.theme.fg); + } else { + g.setColor(mColor[0],mColor[1],mColor[2]); + } g.fillCircle(x1+(i-1)*(x2-x1)/7,y1+(j-1)*(y2-y1)/7,Size); } } @@ -185,25 +193,25 @@ function draw() { g.reset(); if (dh != dho) { g.setColor(1,1,1); - drawHSeg(Xs, Ys, Xs+SegW, Ys+SegH,dh,hColor,4); + drawHSeg(Xs, Ys, Xs+SegW, Ys+SegH,dh,"fg",4); dho = dh; } if (eh != eho) { g.setColor(1,1,1); - drawHSeg(Xs+SegW+Dx, Ys, Xs+SegW*2, Ys+SegH,eh,hColor,4); + drawHSeg(Xs+SegW+Dx, Ys, Xs+SegW*2, Ys+SegH,eh,"fg",4); eho = eh; } if (dm != dmo) { g.setColor(0.3,0.3,1); - drawHSeg(Xs, Ys+SegH+Dy, Xs+SegW, Ys+SegH*2,dm,mColor,4); + drawHSeg(Xs, Ys+SegH+Dy, Xs+SegW, Ys+SegH*2,dm,"",4); dmo = dm; } if (em != emo) { g.setColor(0.3,0.3,1); - drawHSeg(Xs+SegW+Dx, Ys+SegH+Dy, Xs+SegW*2, Ys+SegH*2,em,mColor,4); + drawHSeg(Xs+SegW+Dx, Ys+SegH+Dy, Xs+SegW*2, Ys+SegH*2,em,"",4); emo = em; } From 81b0097fa9672a1ffec0281c5e6e657dcb2672bf Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Mon, 21 Feb 2022 17:35:32 +0100 Subject: [PATCH 07/37] Update 7x7dotsclock.app.js --- apps/7x7dotsclock/7x7dotsclock.app.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.app.js b/apps/7x7dotsclock/7x7dotsclock.app.js index 1f846a340..c6daee542 100644 --- a/apps/7x7dotsclock/7x7dotsclock.app.js +++ b/apps/7x7dotsclock/7x7dotsclock.app.js @@ -15,6 +15,7 @@ var Dx = SegW/14, Dy = SegH/16; const mColor = [0.3,0.3,1]; +const bColor = [0.3,0.3,0.3]; const Font = [ [ @@ -123,11 +124,11 @@ function drawHSeg(x1,y1,x2,y2,Num,Color,Size) { if (Color == "fg") { g.setColor(g.theme.fg); } else { - g.setColor(mColor[0],mColor[1],mColor[2]); + g.setColor(mColor[0],mColor[1],mColor[2]); } g.fillCircle(x1+Dx+(i-1)*(x2-x1)/7,y1+Dy+(j-1)*(y2-y1)/7,Size); } else { - g.setColor(g.theme.fg); + g.setColor(bColor[0],bColor[1],bColor[2]); g.fillCircle(x1+Dx+(i-1)*(x2-x1)/7,y1+Dy+(j-1)*(y2-y1)/7,1); } } @@ -142,7 +143,7 @@ function drawSSeg(x1,y1,x2,y2,Num,Color,Size) { if (Color == "fg") { g.setColor(g.theme.fg); } else { - g.setColor(mColor[0],mColor[1],mColor[2]); + g.setColor(g.theme.fgH); } g.fillCircle(x1+(i-1)*(x2-x1)/7,y1+(j-1)*(y2-y1)/7,Size); } @@ -152,7 +153,7 @@ function drawSSeg(x1,y1,x2,y2,Num,Color,Size) { function ShowSecons() { - g.setColor(1,1,1); + g.setColor(g.theme.bgH); g.fillRect((Xe-Xs) / 2 - 14 + Xs -3, (Ye-Ys) / 2 - 7 + Ys -3, (Xe-Xs) / 2 + 14 + Xs +1, @@ -163,13 +164,13 @@ function ShowSecons() { (Ye-Ys) / 2 - 7 + Ys , (Xe-Xs) / 2 + Xs -1, (Ye-Ys) / 2 + 7 + Ys, - ds,mColor,1); + ds,"",1); drawSSeg( (Xe-Xs) / 2 + Xs +1, (Ye-Ys) / 2 - 7 + Ys, (Xe-Xs) / 2 + 14 + Xs +1, (Ye-Ys) / 2 + 7 + Ys, - es,mColor,1); + es,"",1); } From 6110724f025cddb27f283493d7e2828d6aaa84b1 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Mon, 21 Feb 2022 17:44:08 +0100 Subject: [PATCH 08/37] Update 7x7dotsclock.settings.js better menu naming --- apps/7x7dotsclock/7x7dotsclock.settings.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.settings.js b/apps/7x7dotsclock/7x7dotsclock.settings.js index 42473ec17..c2b5d6c2b 100644 --- a/apps/7x7dotsclock/7x7dotsclock.settings.js +++ b/apps/7x7dotsclock/7x7dotsclock.settings.js @@ -7,10 +7,10 @@ function showMainMenu() { const mainMenu = { "": {"title": "7x7 Dots Clock Settings"}, "< Back": ()=>load(), - "sw-up": ()=>showSelAppMenu("swupApp"), - "sw-down": ()=>showSelAppMenu("swdownApp"), - "sw-left": ()=>showSelAppMenu("swleftApp"), - "sw-right": ()=>showSelAppMenu("swrightApp") + "swipe-up": ()=>showSelAppMenu("swupApp"), + "swipe-down": ()=>showSelAppMenu("swdownApp"), + "swipe-left": ()=>showSelAppMenu("swleftApp"), + "swipe-right": ()=>showSelAppMenu("swrightApp") }; From 3a608bf1f52e69859ae02f5e8938adc52e4bc4d6 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Mon, 21 Feb 2022 17:47:03 +0100 Subject: [PATCH 09/37] Update README.md theme infos --- apps/7x7dotsclock/README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/apps/7x7dotsclock/README.md b/apps/7x7dotsclock/README.md index 7f899ff0f..76684bc1a 100644 --- a/apps/7x7dotsclock/README.md +++ b/apps/7x7dotsclock/README.md @@ -2,16 +2,14 @@ ![](dotsfontclock.png) -looks best with dark theme so far - * A Clock with big numbers made of 7x7 dots * system widgeds ar not (yet) supported * when screen is locked it shows hours and minutes in full screen mode +* respects theme colors ![](dotsfontclock-scr1.png) -* when screen is unlocked it shows additional info: bluetooth, battery, new message, date and seconds -* you can configure a app per swipe direction -* when swiping the configured apps are launced +* when screen is unlocked it shows additional info: bluetooth, battery, new message state, date and seconds +* you can configure an app per swipe direction +* when swiping the configured apps are launched * button press opens launcher - From 849c439e11c13d26043bed2d20a1570edcac98f8 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Mon, 21 Feb 2022 17:54:53 +0100 Subject: [PATCH 10/37] Update metadata.json Allow emulator --- apps/7x7dotsclock/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/7x7dotsclock/metadata.json b/apps/7x7dotsclock/metadata.json index 7b2c52512..6bdeaa6b8 100644 --- a/apps/7x7dotsclock/metadata.json +++ b/apps/7x7dotsclock/metadata.json @@ -6,7 +6,8 @@ "icon": "dotsfontclock.png", "tags": "clock", "type": "clock", - "supports" : ["BANGLEJS2"], + "supports" : ["BANGLEJS2"], + "allow_emulator": true, "readme": "README.md", "storage": [ {"name":"7x7dotsclock.app.js","url":"7x7dotsclock.app.js"}, From 7af6dcd91460f8c2433a5e5707502046fd7fc365 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Mon, 21 Feb 2022 17:56:41 +0100 Subject: [PATCH 11/37] Update metadata.json --- apps/7x7dotsclock/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/7x7dotsclock/metadata.json b/apps/7x7dotsclock/metadata.json index 6bdeaa6b8..9f997e10d 100644 --- a/apps/7x7dotsclock/metadata.json +++ b/apps/7x7dotsclock/metadata.json @@ -1,7 +1,7 @@ { "id": "7x7dotsclock", "name": "7x7 Dots Clock", "shortName":"7x7 Dots Clock", - "version":"0.01", + "version":"0.02", "description": "A clock with a big 7x7 dots Font", "icon": "dotsfontclock.png", "tags": "clock", From c2f55bde72903d8d40bbf35de00cee65cce3455f Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Tue, 22 Feb 2022 11:44:50 +0100 Subject: [PATCH 12/37] Update 7x7dotsclock.settings.js Color Settings of Minutes and Seconds --- apps/7x7dotsclock/7x7dotsclock.settings.js | 51 ++++++++++++++++------ 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.settings.js b/apps/7x7dotsclock/7x7dotsclock.settings.js index c2b5d6c2b..fe9fbc022 100644 --- a/apps/7x7dotsclock/7x7dotsclock.settings.js +++ b/apps/7x7dotsclock/7x7dotsclock.settings.js @@ -1,21 +1,8 @@ (function(back) { -let settings = Object.assign({ swupApp: "",swdownApp: "", swleftApp: "", swrightApp: ""}, require("Storage").readJSON("7x7dotsclock.json", true) || {}); +let settings = Object.assign({ swupApp: "",swdownApp: "", swleftApp: "", swrightApp: "",ColorMinutes: ""}, require("Storage").readJSON("7x7dotsclock.json", true) || {}); -function showMainMenu() { - const mainMenu = { - "": {"title": "7x7 Dots Clock Settings"}, - "< Back": ()=>load(), - "swipe-up": ()=>showSelAppMenu("swupApp"), - "swipe-down": ()=>showSelAppMenu("swdownApp"), - "swipe-left": ()=>showSelAppMenu("swleftApp"), - "swipe-right": ()=>showSelAppMenu("swrightApp") - - }; - - E.showMenu(mainMenu); -} function setSetting(key,value) { print("call " + key + " = " + value); @@ -26,6 +13,42 @@ function setSetting(key,value) { } + // Helper method which uses int-based menu item for set of string values + function stringItems(key, startvalue, values) { + return { + value: (startvalue === undefined ? 0 : values.indexOf(startvalue)), + format: v => values[v], + min: 0, + max: values.length - 1, + wrap: true, + step: 1, + onchange: v => { + setSetting(key,values[v]); + } + }; + } + + // Helper method which breaks string set settings down to local settings object + function stringInSettings(name, values) { + return stringItems(name,settings[name], values); + } + +function showMainMenu() { + const mainMenu = { + "": {"title": "7x7 Dots Clock Settings"}, + "< Back": ()=>load(), + "Minutes": stringInSettings("ColorMinutes", ["blue","pink","green"]), + "swipe-up": ()=>showSelAppMenu("swupApp"), + "swipe-down": ()=>showSelAppMenu("swdownApp"), + "swipe-left": ()=>showSelAppMenu("swleftApp"), + "swipe-right": ()=>showSelAppMenu("swrightApp") + + }; + + E.showMenu(mainMenu); +} + + function showSelAppMenu(key) { var Apps = require("Storage").list(/\.info$/) .map(app => {var a=storage.readJSON(app, 1);return ( From 3b3c01677abb0584a63cb6937a695b5e8f4b084b Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Tue, 22 Feb 2022 11:46:08 +0100 Subject: [PATCH 13/37] Update 7x7dotsclock.app.js Color Settings of Minutes and Seconds --- apps/7x7dotsclock/7x7dotsclock.app.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.app.js b/apps/7x7dotsclock/7x7dotsclock.app.js index c6daee542..ce2b3011d 100644 --- a/apps/7x7dotsclock/7x7dotsclock.app.js +++ b/apps/7x7dotsclock/7x7dotsclock.app.js @@ -5,7 +5,7 @@ by Peter Kuppelwieser */ -let settings = Object.assign({ swupApp: "",swdownApp: "", swleftApp: "", swrightApp: ""}, require("Storage").readJSON("7x7dotsclock.json", true) || {}); +let settings = Object.assign({ swupApp: "",swdownApp: "", swleftApp: "", swrightApp: "", ColorMinutes: ""}, require("Storage").readJSON("7x7dotsclock.json", true) || {}); // position on screen var Xs = 0, Ys = 30,Xe = 175, Ye=175; @@ -13,8 +13,19 @@ var Xs = 0, Ys = 30,Xe = 175, Ye=175; var SegH = (Ye-Ys)/2,SegW = (Xe-Xs)/2; var Dx = SegW/14, Dy = SegH/16; - -const mColor = [0.3,0.3,1]; +switch(ColorMinutes) { + case "blue": + var mColor = [0.3,0.3,1]; + break; + case "pink": + var mColor = [1,0.3,1]; + break; + case "green": + var mColor = [0.3,1,0.3]; + break; + default: + var mColor = [0.3,0.3,1]; +} const bColor = [0.3,0.3,0.3]; const Font = [ @@ -141,9 +152,9 @@ function drawSSeg(x1,y1,x2,y2,Num,Color,Size) { for (let j = 1; j < 8; j++) { if (Font[Num][j-1][i-1] == 1) { if (Color == "fg") { - g.setColor(g.theme.fg); + g.setColor(mColor[0],mColor[1],mColor[2]); } else { - g.setColor(g.theme.fgH); + g.setColor(g.theme.fg); } g.fillCircle(x1+(i-1)*(x2-x1)/7,y1+(j-1)*(y2-y1)/7,Size); } @@ -153,7 +164,7 @@ function drawSSeg(x1,y1,x2,y2,Num,Color,Size) { function ShowSecons() { - g.setColor(g.theme.bgH); + g.setColor(g.theme.fg); g.fillRect((Xe-Xs) / 2 - 14 + Xs -3, (Ye-Ys) / 2 - 7 + Ys -3, (Xe-Xs) / 2 + 14 + Xs +1, @@ -164,13 +175,13 @@ function ShowSecons() { (Ye-Ys) / 2 - 7 + Ys , (Xe-Xs) / 2 + Xs -1, (Ye-Ys) / 2 + 7 + Ys, - ds,"",1); + ds,"fg",1); drawSSeg( (Xe-Xs) / 2 + Xs +1, (Ye-Ys) / 2 - 7 + Ys, (Xe-Xs) / 2 + 14 + Xs +1, (Ye-Ys) / 2 + 7 + Ys, - es,"",1); + es,"fg",1); } From aa86b3ffdb63f59d9b0823360855e8c40f86d02a Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Wed, 23 Feb 2022 10:44:16 +0100 Subject: [PATCH 14/37] Update 7x7dotsclock.app.js Add color yellow for minutes and seconds Better color contrast for seconds --- apps/7x7dotsclock/7x7dotsclock.app.js | 57 ++++++++++++++++----------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.app.js b/apps/7x7dotsclock/7x7dotsclock.app.js index ce2b3011d..53b4c1bd6 100644 --- a/apps/7x7dotsclock/7x7dotsclock.app.js +++ b/apps/7x7dotsclock/7x7dotsclock.app.js @@ -13,18 +13,26 @@ var Xs = 0, Ys = 30,Xe = 175, Ye=175; var SegH = (Ye-Ys)/2,SegW = (Xe-Xs)/2; var Dx = SegW/14, Dy = SegH/16; -switch(ColorMinutes) { - case "blue": - var mColor = [0.3,0.3,1]; - break; - case "pink": - var mColor = [1,0.3,1]; - break; - case "green": - var mColor = [0.3,1,0.3]; - break; - default: - var mColor = [0.3,0.3,1]; +switch(settings.ColorMinutes) { +case "blue": + var mColor = [0.3,0.3,1]; + var sColor = [0,0,1]; + break; +case "pink": + var mColor = [1,0.3,1]; + var sColor = [1,0,1]; + break; +case "green": + var mColor = [0.3,1,0.3]; + var sColor = [0,1,0]; + break; +case "yellow": + var mColor = [1,1,0.3]; + var sColor = [1,1,0]; + break; +default: + var sColor = [0,0,1]; + var mColor = [0.3,0.3,1]; } const bColor = [0.3,0.3,0.3]; @@ -152,9 +160,10 @@ function drawSSeg(x1,y1,x2,y2,Num,Color,Size) { for (let j = 1; j < 8; j++) { if (Font[Num][j-1][i-1] == 1) { if (Color == "fg") { - g.setColor(mColor[0],mColor[1],mColor[2]); + g.setColor(sColor[0],sColor[1],sColor[2]); } else { g.setColor(g.theme.fg); + //g.setColor(0.7,0.7,0.7); } g.fillCircle(x1+(i-1)*(x2-x1)/7,y1+(j-1)*(y2-y1)/7,Size); } @@ -164,23 +173,25 @@ function drawSSeg(x1,y1,x2,y2,Num,Color,Size) { function ShowSecons() { + //g.setColor(bColor[0],bColor[1],bColor[2]); + //g.setColor(0.7,0.7,0.7); g.setColor(g.theme.fg); - g.fillRect((Xe-Xs) / 2 - 14 + Xs -3, - (Ye-Ys) / 2 - 7 + Ys -3, - (Xe-Xs) / 2 + 14 + Xs +1, - (Ye-Ys) / 2 + 7 + Ys +1); + g.fillRect((Xe-Xs) / 2 - 14 + Xs -4, + (Ye-Ys) / 2 - 7 + Ys -4, + (Xe-Xs) / 2 + 14 + Xs +4, + (Ye-Ys) / 2 + 7 + Ys +4); drawSSeg( (Xe-Xs) / 2 - 14 + Xs -1, - (Ye-Ys) / 2 - 7 + Ys , + (Ye-Ys) / 2 - 7 + Ys +1, (Xe-Xs) / 2 + Xs -1, - (Ye-Ys) / 2 + 7 + Ys, + (Ye-Ys) / 2 + 7 + Ys +1, ds,"fg",1); - drawSSeg( (Xe-Xs) / 2 + Xs +1, - (Ye-Ys) / 2 - 7 + Ys, - (Xe-Xs) / 2 + 14 + Xs +1, - (Ye-Ys) / 2 + 7 + Ys, + drawSSeg( (Xe-Xs) / 2 + Xs +2, + (Ye-Ys) / 2 - 7 + Ys +1, + (Xe-Xs) / 2 + 14 + Xs +2, + (Ye-Ys) / 2 + 7 + Ys +1, es,"fg",1); } From 66e1fa4e2f45c5fb8a2606f0d34036793af5cfa4 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Wed, 23 Feb 2022 10:45:35 +0100 Subject: [PATCH 15/37] Update README.md --- apps/7x7dotsclock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/7x7dotsclock/README.md b/apps/7x7dotsclock/README.md index 76684bc1a..28fcac1b1 100644 --- a/apps/7x7dotsclock/README.md +++ b/apps/7x7dotsclock/README.md @@ -5,7 +5,7 @@ * A Clock with big numbers made of 7x7 dots * system widgeds ar not (yet) supported * when screen is locked it shows hours and minutes in full screen mode -* respects theme colors +* adjustable color for minutes and seconds ![](dotsfontclock-scr1.png) From b21da11e6c01d6b998d1388339764e53b62e580d Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:21:10 +0100 Subject: [PATCH 16/37] Add files via upload --- apps/7x7dotsclock/dotsfontclock-scr1.png | Bin 3874 -> 3737 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/7x7dotsclock/dotsfontclock-scr1.png b/apps/7x7dotsclock/dotsfontclock-scr1.png index dc86396c0606f0a4c5ea4895bc17543f2e51024a..5ab2e48639a4b5dcffbeb59e83b7819f89c4228d 100644 GIT binary patch delta 3724 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 Y?43dq;SVfZ;Q#;t07*qoM6N<$f-v!GOaK4? From 0a9516dee03586a53fc63580ec08fecf56a6409f Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:21:54 +0100 Subject: [PATCH 17/37] Add files via upload --- apps/7x7dotsclock/dotsfontclock-scr2.png | Bin 0 -> 3386 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/7x7dotsclock/dotsfontclock-scr2.png diff --git a/apps/7x7dotsclock/dotsfontclock-scr2.png b/apps/7x7dotsclock/dotsfontclock-scr2.png new file mode 100644 index 0000000000000000000000000000000000000000..f301bb50c7217253516345c09a3482f7e745455c GIT binary patch literal 3386 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 Date: Wed, 23 Feb 2022 11:24:30 +0100 Subject: [PATCH 18/37] Update metadata.json Added screenshots --- apps/7x7dotsclock/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/7x7dotsclock/metadata.json b/apps/7x7dotsclock/metadata.json index 9f997e10d..41f0836d3 100644 --- a/apps/7x7dotsclock/metadata.json +++ b/apps/7x7dotsclock/metadata.json @@ -14,5 +14,6 @@ {"name":"7x7dotsclock.settings.js","url":"7x7dotsclock.settings.js"}, {"name":"7x7dotsclock.img","url":"7x7dotsclock.img.js","evaluate":true} ], - "data": [{"name":"7x7dotsclock.json"}] + "data": [{"name":"7x7dotsclock.json"}], + "screenshots": [{"url":"dotsfontclock.png"},{"url":"dotsfontclock-scr1.png"},{"url":"dotsfontclock-scr2.png"}] } From 040d765d946f245fa4bdb62f073c2f8da23b7545 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:28:56 +0100 Subject: [PATCH 19/37] Update 7x7dotsclock.settings.js add yellow color --- apps/7x7dotsclock/7x7dotsclock.settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.settings.js b/apps/7x7dotsclock/7x7dotsclock.settings.js index fe9fbc022..34935d668 100644 --- a/apps/7x7dotsclock/7x7dotsclock.settings.js +++ b/apps/7x7dotsclock/7x7dotsclock.settings.js @@ -37,7 +37,7 @@ function showMainMenu() { const mainMenu = { "": {"title": "7x7 Dots Clock Settings"}, "< Back": ()=>load(), - "Minutes": stringInSettings("ColorMinutes", ["blue","pink","green"]), + "Minutes": stringInSettings("ColorMinutes", ["blue","pink","green","yellow"]), "swipe-up": ()=>showSelAppMenu("swupApp"), "swipe-down": ()=>showSelAppMenu("swdownApp"), "swipe-left": ()=>showSelAppMenu("swleftApp"), From ca1b94fa8948df9cfb788a147a3ff9ed6a88ebe6 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:30:38 +0100 Subject: [PATCH 20/37] Update ChangeLog --- apps/7x7dotsclock/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/7x7dotsclock/ChangeLog b/apps/7x7dotsclock/ChangeLog index 50c5eca4a..d2c98a472 100644 --- a/apps/7x7dotsclock/ChangeLog +++ b/apps/7x7dotsclock/ChangeLog @@ -1 +1,2 @@ 0.01: Initial version for upload +0.02: better theme support, configurable colors, small improvements From ffa5b96de6eaf89db9f2a9e3b5238fadaa288b91 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 10:44:48 +0000 Subject: [PATCH 21/37] messages +0.23: Change message colors to match current theme instead of using green + Now attempt to use Large/Big/Medium fonts, and allow minimum font size to be configured --- apps/messages/ChangeLog | 6 ++- apps/messages/README.md | 3 ++ apps/messages/app.js | 69 ++++++++++++++++++++--------------- apps/messages/metadata.json | 2 +- apps/messages/screenshot.png | Bin 2931 -> 4194 bytes apps/messages/settings.js | 6 +++ 6 files changed, 53 insertions(+), 33 deletions(-) diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index 07da48198..1e6ac71d7 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -32,5 +32,7 @@ 0.20: Allow tapping on the body to show a scrollable view of the message and title in a bigger font (fix #1405, #1031) 0.21: Improve list readability on dark theme 0.22: Add Home Assistant icon -0.22: Allow repeat to be switched Off, so there is no buzzing repetition. - Also gave the widget a pixel more room to the right \ No newline at end of file + Allow repeat to be switched Off, so there is no buzzing repetition. + Also gave the widget a pixel more room to the right +0.23: Change message colors to match current theme instead of using green + Now attempt to use Large/Big/Medium fonts, and allow minimum font size to be configured diff --git a/apps/messages/README.md b/apps/messages/README.md index a355a58ac..cce4391e7 100644 --- a/apps/messages/README.md +++ b/apps/messages/README.md @@ -16,6 +16,9 @@ and `Messages`: * `Unread Timer` - when a new message is received we go into the Messages app. If there is no user input for this amount of time then the app will exit and return to the clock where a ringing bell will be shown in the Widget bar. +* `Min Font` - the minimum font size used when displaying messages on the screen. A bigger font +is chosen if there isn't much message text, but this specifies the smallest the font should get before +it starts getting clipped. ## New Messages diff --git a/apps/messages/app.js b/apps/messages/app.js index 96c48f02f..0cf13db2c 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -21,13 +21,11 @@ */ var Layout = require("Layout"); +var settings = require('Storage').readJSON("messages.settings.json", true) || {}; var fontSmall = "6x8"; var fontMedium = g.getFonts().includes("6x15")?"6x15":"6x8:2"; var fontBig = g.getFonts().includes("12x20")?"12x20":"6x8:2"; var fontLarge = g.getFonts().includes("6x15")?"6x15:2":"6x8:4"; -var colBg = g.theme.dark ? "#141":"#4f4"; -var colSBg1 = g.theme.dark ? "#121":"#cFc"; -var colSBg2 = g.theme.dark ? "#000":"#9F9"; // hack for 2v10 firmware's lack of ':size' font handling try { g.setFont("6x8:2"); @@ -143,8 +141,8 @@ function showMapMessage(msg) { eta = m[2]; } else target=msg.body; layout = new Layout({ type:"v", c: [ - {type:"txt", font:fontMedium, label:target, bgCol:colBg, fillx:1, pad:2 }, - {type:"h", bgCol:colBg, fillx:1, c: [ + {type:"txt", font:fontMedium, label:target, bgCol:g.theme.bgH, col: g.theme.fgH, fillx:1, pad:2 }, + {type:"h", bgCol:g.theme.bgH, col: g.theme.fgH, fillx:1, c: [ {type:"txt", font:"6x8", label:"Towards" }, {type:"txt", font:fontLarge, label:street } ]}, @@ -181,7 +179,7 @@ function showMusicMessage(msg) { checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); } layout = new Layout({ type:"v", c: [ - {type:"h", fillx:1, bgCol:colBg, c: [ + {type:"h", fillx:1, bgCol:g.theme.bgH, col: g.theme.fgH, c: [ { type:"btn", src:getBackImage, cb:back }, { type:"v", fillx:1, c: [ { type:"txt", font:fontMedium, label:msg.artist, pad:2 }, @@ -214,7 +212,9 @@ function showMessageScroller(msg) { // a function to draw a menu item draw : function(idx, r) { // FIXME: in 2v13 onwards, clearRect(r) will work fine. There's a bug in 2v12 - g.setBgColor(idx=lines.length-2) @@ -270,13 +270,31 @@ function showMessage(msgid) { var title=msg.title, titleFont = fontLarge, lines; if (title) { var w = g.getWidth()-48; - if (g.setFont(titleFont).stringWidth(title) > w) - titleFont = fontMedium; + if (g.setFont(titleFont).stringWidth(title) > w) { + titleFont = fontBig; + if (settings.fontSize!=1 && g.setFont(titleFont).stringWidth(title) > w) + titleFont = 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"); } } + // If body of message is only two lines long w/ large font, use large font. + var body=msg.body, bodyFont = fontLarge; + if (body) { + var w = g.getWidth()-10; + if (g.setFont(bodyFont).stringWidth(body) > w * 2) { + bodyFont = fontBig; + if (settings.fontSize!=1 && g.setFont(bodyFont).stringWidth(body) > w * 3) + bodyFont = fontMedium; + } + if (g.setFont(bodyFont).stringWidth(body) > w) { + lines = g.setFont(bodyFont).wrapString(msg.body, w); + var maxLines = Math.floor((g.getHeight()-110) / g.getFontHeight()); + body = (lines.length>maxLines) ? lines.slice(0,maxLines).join("\n")+"..." : lines.join("\n"); + } + } function goBack() { msg.new = false; saveMessages(); // read mail cancelReloadTimeout(); // don't auto-reload to clock now @@ -303,27 +321,17 @@ function showMessage(msgid) { checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); }}); } - // If body of message is only two lines long w/ large font, use large font. - var body=msg.body, bodyFont = fontLarge, lines; - if (body) { - var w = g.getWidth()-48; - if (g.setFont(bodyFont).stringWidth(body) > w * 2) - bodyFont = fontMedium; - if (g.setFont(bodyFont).stringWidth(body) > w) { - lines = g.setFont(bodyFont).wrapString(msg.body, g.getWidth()-10); - body = (lines.length>4) ? lines.slice(0,4).join("\n")+"..." : lines.join("\n"); - } - } + layout = new Layout({ type:"v", c: [ - {type:"h", fillx:1, bgCol:colBg, c: [ + {type:"h", fillx:1, bgCol:g.theme.bgH, col: g.theme.fgH, c: [ { type:"btn", src:getMessageImage(msg), col:getMessageImageCol(msg), pad: 3, cb:()=>{ cancelReloadTimeout(); // don't auto-reload to clock now showMessageSettings(msg); }}, { type:"v", fillx:1, c: [ - {type:"txt", font:fontSmall, label:msg.src||/*LANG*/"Message", bgCol:colBg, fillx:1, pad:2, halign:1 }, - title?{type:"txt", font:titleFont, label:title, bgCol:colBg, fillx:1, pad:2 }:{}, + {type:"txt", font:fontSmall, label:msg.src||/*LANG*/"Message", bgCol:g.theme.bgH, col: g.theme.fgH, fillx:1, pad:2, halign:1 }, + title?{type:"txt", font:titleFont, label:title, bgCol:g.theme.bgH, col: g.theme.fgH, fillx:1, pad:2 }:{}, ]}, ]}, {type:"txt", font:bodyFont, label:body, fillx:1, filly:1, pad:2, cb:()=>{ @@ -374,9 +382,8 @@ function checkMessages(options) { c : Math.max(MESSAGES.length+1,3), // workaround for 2v10.219 firmware (min 3 not needed for 2v11) draw : function(idx, r) {"ram" var msg = MESSAGES[idx-1]; - if (msg && msg.new) g.setBgColor(colBg); - else g.setBgColor((idx&1) ? colSBg1 : colSBg2); - g.clearRect(r.x,r.y,r.x+r.w-1,r.y+r.h-1).setColor(g.theme.fg); + if (msg && msg.new) g.setBgColor(g.theme.bgH).setColor(g.theme.fgH); + else g.setColor(g.theme.fg); if (idx==0) msg = {id:"back", title:"< Back"}; if (!msg) return; var x = r.x+2, title = msg.title, body = msg.body; @@ -391,18 +398,20 @@ function checkMessages(options) { .setColor(fg); // only color the icon x += 50; } - var m = msg.title+"\n"+msg.body; - if (msg.src) g.setFontAlign(1,1).setFont("6x8").drawString(msg.src, r.x+r.w-2, r.y+r.h-2); + var m = msg.title+"\n"+msg.body, longBody=false; if (title) g.setFontAlign(-1,-1).setFont(fontBig).drawString(title, x,r.y+2); if (body) { g.setFontAlign(-1,-1).setFont("6x8"); - var l = g.wrapString(body, r.w-14); + var l = g.wrapString(body, r.w-(x+14)); if (l.length>3) { l = l.slice(0,3); l[l.length-1]+="..."; } + longBody = l.length>2; g.drawString(l.join("\n"), x+10,r.y+20); } + if (!longBody && msg.src) g.setFontAlign(1,1).setFont("6x8").drawString(msg.src, r.x+r.w-2, r.y+r.h-2); + g.setColor("#888").fillRect(r.x,r.y+r.h-1,r.x+r.w-1,r.y+r.h-1); // dividing line between items }, select : idx => { if (idx==0) load(); @@ -422,7 +431,7 @@ g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); setTimeout(() => { - var unreadTimeoutSecs = (require('Storage').readJSON("messages.settings.json", true) || {}).unreadTimeout; + var unreadTimeoutSecs = settings.unreadTimeout; if (unreadTimeoutSecs===undefined) unreadTimeoutSecs=60; if (unreadTimeoutSecs) unreadTimeout = setTimeout(function() { diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index 7488c792e..e8ed83099 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.22", + "version": "0.23", "description": "App to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", diff --git a/apps/messages/screenshot.png b/apps/messages/screenshot.png index a95045400bf4ef49d1e3a6df99cca54b8cb73aff..a64416f7d47d1918e3f1d8928b80517b4bd33f32 100644 GIT binary patch delta 4185 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 h0=qG5Oh v?v+"s":/*LANG*/"Off", onchange: v => updateSetting("unreadTimeout", v) }, + /*LANG*/'Min Font': { + value: 0|settings().fontSize, + min: 0, max: 1, + format: v => [/*LANG*/"Small",/*LANG*/"Medium"][v], + onchange: v => updateSetting("fontSize", v) + }, }; E.showMenu(mainmenu); }) From 17b7d85950e4c6339f9250a858cf18e9ad8f057c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 10:45:18 +0000 Subject: [PATCH 22/37] Layout: remove 'fsz' hack as any firmware 2v11+ will support font size in the string now --- modules/Layout.js | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/modules/Layout.js b/modules/Layout.js index 1b0bbd47f..4223867a4 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -180,13 +180,6 @@ function Layout(layout, options) { if (l.id) ll[l.id] = l; // fix type up if (!l.type) l.type=""; - // FIXME ':'/fsz not needed in new firmwares - Font:12 is handled internally - // fix fonts for pre-2v11 firmware - if (l.font && l.font.includes(":")) { - var f = l.font.split(":"); - l.font = f[0]; - l.fsz = f[1]; - } if (l.c) l.c.forEach(recurser); } recurser(this._l); @@ -241,13 +234,13 @@ Layout.prototype.render = function (l) { "":function(){}, "txt":function(l){ if (l.wrap) { - g.setFont(l.font,l.fsz).setFontAlign(0,-1); + g.setFont(l.font).setFontAlign(0,-1); var lines = g.wrapString(l.label, l.w); var y = l.y+((l.h-g.getFontHeight()*lines.length)>>1); // TODO: on 2v11 we can just render in a single drawString call lines.forEach((line, i) => g.drawString(line, l.x+(l.w>>1), y+g.getFontHeight()*i)); } else { - g.setFont(l.font,l.fsz).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); + g.setFont(l.font).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); } }, "btn":function(l){ var x = l.x+(0|l.pad), y = l.y+(0|l.pad), @@ -365,7 +358,7 @@ Layout.prototype.update = function() { if (l.wrap) { l._h = l._w = 0; } else { - var m = g.setFont(l.font,l.fsz).stringMetrics(l.label); + var m = g.setFont(l.font).stringMetrics(l.label); l._w = m.width; l._h = m.height; } }, "btn": function(l) { From d79915d67e068bad2e7e2e864367b0edba564313 Mon Sep 17 00:00:00 2001 From: pkkpp <52079346+pkkpp@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:49:19 +0100 Subject: [PATCH 23/37] Update 7x7dotsclock.app.js --- apps/7x7dotsclock/7x7dotsclock.app.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/7x7dotsclock/7x7dotsclock.app.js b/apps/7x7dotsclock/7x7dotsclock.app.js index 53b4c1bd6..aa174b2d2 100644 --- a/apps/7x7dotsclock/7x7dotsclock.app.js +++ b/apps/7x7dotsclock/7x7dotsclock.app.js @@ -17,22 +17,27 @@ switch(settings.ColorMinutes) { case "blue": var mColor = [0.3,0.3,1]; var sColor = [0,0,1]; + var sbColor = [1,1,1]; break; case "pink": var mColor = [1,0.3,1]; var sColor = [1,0,1]; + var sbColor = [1,1,1]; break; case "green": var mColor = [0.3,1,0.3]; var sColor = [0,1,0]; + var sbColor = [1,1,1]; break; case "yellow": var mColor = [1,1,0.3]; var sColor = [1,1,0]; + var sbColor = [0,0,0]; break; default: var sColor = [0,0,1]; var mColor = [0.3,0.3,1]; + var sbColor = [1,1,1]; } const bColor = [0.3,0.3,0.3]; @@ -134,7 +139,8 @@ var dho = -1, eho = -1, dmo = -1, emo = -1; function drawHSeg(x1,y1,x2,y2,Num,Color,Size) { - //g.setColor(0,0,0); + + g.setColor(g.theme.bg); g.fillRect(x1, y1, x2, y2); for (let i = 1; i < 8; i++) { @@ -172,10 +178,10 @@ function drawSSeg(x1,y1,x2,y2,Num,Color,Size) { } -function ShowSecons() { - //g.setColor(bColor[0],bColor[1],bColor[2]); - //g.setColor(0.7,0.7,0.7); - g.setColor(g.theme.fg); +function ShowSeconds() { + + g.setColor(sbColor[0],sbColor[1],sbColor[2]); + g.fillRect((Xe-Xs) / 2 - 14 + Xs -4, (Ye-Ys) / 2 - 7 + Ys -4, (Xe-Xs) / 2 + 14 + Xs +4, @@ -238,7 +244,7 @@ function draw() { emo = em; } - if (!Bangle.isLocked()) ShowSecons(); + if (!Bangle.isLocked()) ShowSeconds(); } From 0ef8ad6d5ec30ff936c0c2bd26876fcf0dd485d5 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 12:10:14 +0000 Subject: [PATCH 24/37] add simple interlaced font clock --- apps/intclock/ChangeLog | 12 +++++++ apps/intclock/README.md | 4 +++ apps/intclock/app-icon.js | 1 + apps/intclock/app.js | 60 +++++++++++++++++++++++++++++++++++ apps/intclock/app.png | Bin 0 -> 3480 bytes apps/intclock/metadata.json | 16 ++++++++++ apps/intclock/screenshot.png | Bin 0 -> 2101 bytes 7 files changed, 93 insertions(+) create mode 100644 apps/intclock/ChangeLog create mode 100644 apps/intclock/README.md create mode 100644 apps/intclock/app-icon.js create mode 100644 apps/intclock/app.js create mode 100644 apps/intclock/app.png create mode 100644 apps/intclock/metadata.json create mode 100644 apps/intclock/screenshot.png diff --git a/apps/intclock/ChangeLog b/apps/intclock/ChangeLog new file mode 100644 index 000000000..aa910b6f6 --- /dev/null +++ b/apps/intclock/ChangeLog @@ -0,0 +1,12 @@ +0.02: Modified for use with new bootloader and firmware +0.03: add hour ticks, remove timers +0.04: add day-date display +0.07: make date and face bigger +0.08: make dots bigger and date more readable +0.09: center date, remove box around it, internal refactor to remove redundant code. +0.10: remove debug, refactor seconds to show elapsed secs each time app is displayed +0.11: shift face down for widget area, maximize face size, 0 pad single digit date, use locale for date +0.12: Fix regression after 0.11 +0.13: Fix broken date padding (fix #376) +0.14: Remove hardcoded hour buzz (you can install widchime if you miss it) +0.15: Add color scheme support diff --git a/apps/intclock/README.md b/apps/intclock/README.md new file mode 100644 index 000000000..7d31cdae2 --- /dev/null +++ b/apps/intclock/README.md @@ -0,0 +1,4 @@ +# Analogue Clock + +![](screenshot_analog.png) + diff --git a/apps/intclock/app-icon.js b/apps/intclock/app-icon.js new file mode 100644 index 000000000..8c62a192e --- /dev/null +++ b/apps/intclock/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgP/AH4Aq+GEkPh4E/BZMAh4LGw/h8MPBZHggIXJ/EB4ALI//h/4LHwk/BagA/ACY=")) diff --git a/apps/intclock/app.js b/apps/intclock/app.js new file mode 100644 index 000000000..1324a422c --- /dev/null +++ b/apps/intclock/app.js @@ -0,0 +1,60 @@ +Graphics.prototype.setFontUndo = function(scale) { + // Actual height 19 (20 - 2) + this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqKAqooCqigKqKAAAACgAAKAAAoAACgAAAAAAAAACgAAKAAAoAACgAAAAAAKCgAoKAKqqAqqoCqqgKqqAKCgAoKAKqqAqqoCqqgKqqAKCgAoKAAAAAKgoAqCgKqKAqooKiioqKKiooqKiioKKqAoqoCgqAKCoAAAACoCgKgKAiCoCIKgKioAqKgACoAAKgACoAAKgACoqAKioCoIgKgiAoCoCgKgAAAAKqgAqqAKqqAqqoKiioqKKiooqKiioKAKAoAoCgCgKAKAAAACgAAKAAAoAACgAAAAAAKqgAqqAKqqAqqoCgCgKAKAAAACgCgKAKAqqoCqqgCqoAKqgAAAACigAKKAAqoACqgAqoACqgAKqAAqoAAqoACqgAKKAAooAAAAAAoAACgAAKAAAoAAqqACqoAKqgAqqAAKAAAoAACgAAKAAAAAAACoAAKgAAqAACoAAAAAoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAAAAACgAAKAAAoAACgAAAAAAoAACgAAqAACoAAqAACoAAqAACoAAqAACoAAqAACoAAqAACoAAKAAAoAAAAAACqoAKqgCqqgKqqAoAoCgCgKAKAoAoCqqgKqqAKqgAqqAAAAAqqoCqqgKqqAqqoAAAAKCqAoKoCiqgKKqAoooCiigKKKAoooCqigKqKAKgoAqCgAAAAoAoCgCgKAKAoAoCiigKKKAoooCiigKqqAqqoAqqACqoAAAACqAAKoAAqoACqgAAKAAAoAACgAAKAAqqoCqqgKqqAqqoAAAAKoKAqgoCqigKqKAoooCiigKKKAoooCiqgKKqAoKgCgqAAAAAKqgAqqAKqqAqqoCiigKKKAoooCiigKKqAoqoCgqAKCoAAAACgAAKAAAoAACgAAKAAAoAACgAAKAAAqqoCqqgCqqAKqoAAAACqoAKqgCqqgKqqAoooCiigKKKAoooCqqgKqqAKqgAqqAAAAAKgAAqAAKqAAqoACigAKKAAooACigAKqqAqqoAqqgCqqAAAACgCgKAKAoAoCgCgAAAAoAqCgCoKAKgoAqAAAAAKAAAoAAKoAAqgAKqgAqqAKgqAqCoCgCgKAKAAAAAoKACgoAKCgAoKACgoAKCgAoKACgoAKCgAoKACgoAKCgAAAAKAKAoAoCoKgKgqAKqgAqqAAqgACqAACgAAKAAAAACgAAKAAAoAACgAAKKKAoooCiigKKKAqoACqgACoAAKgAAAAACqqAKqoCqqgKqqAoAACgAAKCoAoKgCiqgKKqAoooCiigKqqAqqoAqqACqoAAAAAqqgCqqAqqoCqqgKKAAooACigAKKAAqqoCqqgCqqAKqoAAAAKqqAqqoCqqgKqqAoooCiigKKKAoooCqqgKqqAKCgAoKAAAAAKqgAqqAKqqAqqoCgCgKAKAoAoCgCgKAKAoAoCgCgKAKAAAACqqgKqqAqqoCqqgKAKAoAoCoKgKgqAKqgAqqAAqgACqAAAAACqoAKqgCqqgKqqAoooCiigKKKAoooCgCgKAKAoAoCgCgAAAAKqoAqqgKqqAqqoCigAKKAAooACigAKAAAoAACgAAKAAAAAAAqqACqoAqqoCqqgKAKAoAoCiigKKKAoqoCiqgKKqAoqoAAAAKqqAqqoCqqgKqqAAoAACgAAKAAAoACqqgKqqAqqoCqqgAAAAoAoCgCgKAKAoAoCqqgKqqAqqoCqqgKAKAoAoCgCgKAKAAAAAAKAAAoAACoAAKgAAKAAAoAACgAAKAqqoCqqgKqoAqqgAAAAKqqAqqoCqqgKqqACqAAKoACqoAKqgCoKgKgqAoAoCgCgAAAAqqgCqqAKqqAqqoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAACqqgKqqAqqoCqqgCoAAKgAAKgAAqAAKgAAqAAKqqAqqoCqqgKqqAAAACqqgKqqAqqoCqqgCoAAKgAAKgAAqAAqqoCqqgKqqAqqoAAAACqoAKqgCqqgKqqAoAoCgCgKAKAoAoCqqgKqqAKqgAqqAAAAAqqoCqqgKqqAqqoCigAKKAAooACigAKqAAqoAAqAACoAAAAAAqqACqoAqqoCqqgKAKAoAoCgKgKAqAqqoCqqgCqqAKqoAAAAKqqAqqoCqqgKqqAooACigAKKgAoqACqqgKqqAKioAqKgAAAAKgoAqCgKqKAqooCiigKKKAoooCiigKKqAoqoCgqAKCoAAAACgAAKAAAoAACgAAKqqAqqoCqqgKqqAoAACgAAKAAAoAAAAAAKqoAqqgCqqgKqqAAAoAACgAAKAAAoCqqgKqqAqqgCqqAAAAAqqACqoAKqoAqqgAAKgAAqAACoAAKgKqoAqqgCqoAKqgAAAACqqgKqqAqqoCqqgACoAAKgACoAAKgAAKgAAqAKqqAqqoCqqgKqqAAAACoKgKgqAqqoCqqgAqgACqAAKoAAqgAqqoCqqgKgqAqCoAAAAKoAAqgACqgAKqAAAqoACqgAKqAAqoCqgAKqAAqgACqAAAAAAoCoCgKgKCqAoKoCiqgKKqAqooCqigKoKAqgoCoCgKgKAAAACqqgKqqAqqoCqqgKAKAoAoAAAAKAAAoAACoAAKgAAKgAAqAAAqAACoAACoAAKgAAKgAAqAAAqAACoAACgAAKAAAACgCgKAKAqqoCqqgKqqAqqoAAA"), 32, atob("DQULDw0RDQUHBw0NBQ0FEQ0FDQ0NDQ0NDQ0FBQsNCw0RDQ0NDQ0NDQ0NDQ0NDw0NDQ0NDQ0NDQ8NDQ0HEQc="), 22+(scale<<8)+(1<<16)); + return this; +} + +// timeout used to update every minute +var drawTimeout; + +// schedule a draw for the next minute +function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +} + + +function draw() { + var x = g.getWidth()/2; + var y = g.getHeight()/2 - 10; + g.reset(); + // work out locale-friendly date/time + var date = new Date(); + var timeStr = require("locale").time(date,1).trim(); + var dateStr = require("locale").date(date).toUpperCase(); + + + // draw time + g.setFontAlign(0,0).setFont("Undo:3"); + g.clearRect(0,y-30,g.getWidth(),y+30); // clear the background + g.drawString(timeStr,x,y); + // draw date + y += 40; + g.setFontAlign(0,0).setFont("Undo"); + g.clearRect(0,y-10,g.getWidth(),y+20); // clear the background + g.drawString(dateStr,x,y); + // queue draw in one minute + queueDraw(); +} + +// Clear the screen once, at startup +g.clear(); +// draw immediately at first, queue update +draw(); +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } +}); +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +Bangle.loadWidgets(); +Bangle.drawWidgets(); \ No newline at end of file diff --git a/apps/intclock/app.png b/apps/intclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..dacbceb733035cae976a896ffdb648fe7c578234 GIT binary patch literal 3480 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 Bg0lbs literal 0 HcmV?d00001 diff --git a/apps/intclock/metadata.json b/apps/intclock/metadata.json new file mode 100644 index 000000000..fff4c58b0 --- /dev/null +++ b/apps/intclock/metadata.json @@ -0,0 +1,16 @@ +{ + "id": "intclock", + "name": "Interlaced Clock", + "version": "0.01", + "description": "A lightweight digital clock using an 'interlaced' font", + "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS","BANGLEJS2"], + "allow_emulator": true, + "storage": [ + {"name":"intclock.app.js","url":"app.js"}, + {"name":"intclock.img","url":"app-icon.js","evaluate":true} + ] +} diff --git a/apps/intclock/screenshot.png b/apps/intclock/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..33a459f1f768a3421412409d86188397e04fa723 GIT binary patch literal 2101 zcmeHJ{ZrEU7XBcOAgR|oWmyW9Jw{{qK#xyx622d~C+^H}#*hUvK<>uYmb}u;n=H#n4f8{UfF=s9e(fDZWro)F z)yjt=Lzl7two^eP8dsXZp#JO63*Vm0w&TQ_5>Y2DVI+pWs{8r_Y_R)w2 zUg7Xz)DJXX065UPM9=QOOEA;-Gwz4b!)%!(akiLavx5F06`vpLCOacDb@Z^0nH-zL z!)-x{%8wG>F8EQi^{i-~n>{3MAuY`=2uH{6ak|N4@4eE~zlAlOvs_c1+r)Uj<=Qn` zsmA#1))V{=e%{=WMB--+^qeOEkE*Ln3fzQyi@dVRKq%{eVn1lv39S$>PjE#~u+*uJ z!wM$bEB^HG0BCtO>wZ-2=6TZILcj1^*;c7s+TK$){-#2Q6llB)^(%1*Lhb1 zXP&7F)sClV$4K4ilxR$^51V==SN-K zZ09&F?5#IgK-C9aF$ha*MQZjz!%G_n3Joy1GZFeYYXyp`8Hl??W7 zww;zW;Q##d?ab|&C>XSB7qEoFxe?1~oMbO*4C26rI!Kfc@3sci`f^#LoD~d9Xr8*6 zit1KTOkeE$DsF|WYMNfr9 zkdNYd-~e>+PAe-oar`Xq#?2~+-!+o^(}|Vxa+0Yj--ZxQa0}e=9Y#uAF^BLu_Yavv z0pHj$;Tfiro9kkK7{KXk;lR?CbOb;oF>xMP!v6@`p!n}Q+3L|WhICH0_=_q?j8)f+ zWQI1jgxn*g((8Ih+r2YKJ+_AV?v}h@VGv%RL3eb;NnhiRp-*|X6g9T{D*S}(17U^C<7k_;Tr%c*d#5Q5zU5pvIWplWD`ANlC=D<9=F5nN;=YnWR_SEtv_L&XnSuO6`aT!jhVMC|-xo23Ero+( p7yrH9V889vqjmqs|Eq%$wtH_rNf=6*H2nd<$NQ@jHC|!Y{{!gi${GLw literal 0 HcmV?d00001 From a452887ba6b8bdc1f33fdcc940d1aaf2dfc84227 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 16:11:34 +0000 Subject: [PATCH 25/37] Fix settings wrapping code for new menu system --- apps/alarm/ChangeLog | 1 + apps/alarm/app.js | 16 ++++++++-------- apps/alarm/metadata.json | 2 +- apps/hardalarm/ChangeLog | 1 + apps/hardalarm/app.js | 18 +++++++++--------- apps/hardalarm/metadata.json | 2 +- apps/tabata/ChangeLog | 1 + apps/tabata/metadata.json | 2 +- apps/tabata/tabata.js | 19 +++++++++---------- 9 files changed, 32 insertions(+), 30 deletions(-) diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index d129e9f9f..4576237a5 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -13,3 +13,4 @@ Widgets now shown on Alarm screen 0.13: Alarm widget state now updates when setting/resetting an alarm 0.14: Order of 'back' menu item +0.15: Fix hour/minute wrapping code for new menu system diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 17062d44a..f7edcd1c4 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -73,12 +73,12 @@ function editAlarm(alarmIndex) { '': { 'title': /*LANG*/'Alarm' }, /*LANG*/'< Back' : showMainMenu, /*LANG*/'Hours': { - value: hrs, - onchange: function(v){if (v<0)v=23;if (v>23)v=0;hrs=v;this.value=v;} // no arrow fn -> preserve 'this' + value: hrs, min : 0, max : 23, wrap : true, + onchange: v => hrs=v; }, /*LANG*/'Minutes': { - value: mins, - onchange: function(v){if (v<0)v=59;if (v>59)v=0;mins=v;this.value=v;} // no arrow fn -> preserve 'this' + value: mins, min : 0, max : 59, wrap : true, + onchange: v => mins=v; }, /*LANG*/'Enabled': { value: en, @@ -138,12 +138,12 @@ function editTimer(alarmIndex) { const menu = { '': { 'title': /*LANG*/'Timer' }, /*LANG*/'Hours': { - value: hrs, - onchange: function(v){if (v<0)v=23;if (v>23)v=0;hrs=v;this.value=v;} // no arrow fn -> preserve 'this' + value: hrs, min : 0, max : 23, wrap : true, + onchange: v => hrs=v; }, /*LANG*/'Minutes': { - value: mins, - onchange: function(v){if (v<0)v=59;if (v>59)v=0;mins=v;this.value=v;} // no arrow fn -> preserve 'this' + value: mins, min : 0, max : 59, wrap : true, + onchange: v => mins=v; }, /*LANG*/'Enabled': { value: en, diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index 3e109bda9..d29298309 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Default Alarm & Timer", "shortName": "Alarms", - "version": "0.14", + "version": "0.15", "description": "Set and respond to alarms and timers", "icon": "app.png", "tags": "tool,alarm,widget", diff --git a/apps/hardalarm/ChangeLog b/apps/hardalarm/ChangeLog index 7e9b17f2a..dac7d317e 100644 --- a/apps/hardalarm/ChangeLog +++ b/apps/hardalarm/ChangeLog @@ -1,2 +1,3 @@ 0.01: Add a number to match to turn off alarm 0.02: Respect Quiet Mode +0.03: Fix hour/minute wrapping code for new menu system diff --git a/apps/hardalarm/app.js b/apps/hardalarm/app.js index 61467b421..09b73d318 100644 --- a/apps/hardalarm/app.js +++ b/apps/hardalarm/app.js @@ -56,25 +56,25 @@ function editAlarm(alarmIndex) { } const menu = { '': { 'title': 'Alarms' }, - 'Hours': { - value: hrs, - onchange: function(v){if (v<0)v=23;if (v>23)v=0;hrs=v;this.value=v;} // no arrow fn -> preserve 'this' + /*LANG*/'Hours': { + value: hrs, min : 0, max : 23, wrap : true, + onchange: v => hrs=v; }, - 'Minutes': { - value: mins, - onchange: function(v){if (v<0)v=59;if (v>59)v=0;mins=v;this.value=v;} // no arrow fn -> preserve 'this' + /*LANG*/'Minutes': { + value: mins, min : 0, max : 59, wrap : true, + onchange: v => mins=v; }, - 'Enabled': { + /*LANG*/'Enabled': { value: en, format: v=>v?"On":"Off", onchange: v=>en=v }, - 'Repeat': { + /*LANG*/'Repeat': { value: en, format: v=>v?"Yes":"No", onchange: v=>repeat=v }, - 'Auto snooze': { + /*LANG*/'Auto snooze': { value: as, format: v=>v?"Yes":"No", onchange: v=>as=v diff --git a/apps/hardalarm/metadata.json b/apps/hardalarm/metadata.json index 13a8fb920..1dab4501d 100644 --- a/apps/hardalarm/metadata.json +++ b/apps/hardalarm/metadata.json @@ -2,7 +2,7 @@ "id": "hardalarm", "name": "Hard Alarm", "shortName": "HardAlarm", - "version": "0.02", + "version": "0.03", "description": "Make sure you wake up! Count to the right number to turn off the alarm", "icon": "app.png", "tags": "tool,alarm,widget", diff --git a/apps/tabata/ChangeLog b/apps/tabata/ChangeLog index 5560f00bc..86faf17a5 100644 --- a/apps/tabata/ChangeLog +++ b/apps/tabata/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Fix settings wrapping code for new menu system diff --git a/apps/tabata/metadata.json b/apps/tabata/metadata.json index 14429090f..a840c9c8b 100644 --- a/apps/tabata/metadata.json +++ b/apps/tabata/metadata.json @@ -2,7 +2,7 @@ "id": "tabata", "name": "Tabata", "shortName": "Tabata - Control High-Intensity Interval Training", - "version": "0.01", + "version": "0.02", "description": "Control high-intensity interval training (according to tabata: https://en.wikipedia.org/wiki/Tabata_method).", "icon": "tabata.png", "tags": "workout,health", diff --git a/apps/tabata/tabata.js b/apps/tabata/tabata.js index 603cf96ee..f6addc35b 100644 --- a/apps/tabata/tabata.js +++ b/apps/tabata/tabata.js @@ -30,18 +30,17 @@ function showMainMenu() { }, 'Pause sec.': { value: settings.pause, - onchange: function(v){ - if (v<0)v=MAX_SECONDS; - if (v>MAX_SECONDS)v=0; + min : 0, max : MAX_SECONDS, wrap : true, + onchange: v => { settings.pause=v; - this.value=v; saveSettingsDebounce(); } }, 'Trainig sec.': { value: settings.training, - onchange: function(v){if (v<0)v=MAX_SECONDS;if (v>MAX_SECONDS)v=0;settings.training=v; - this.value=v; + min : 0, max : MAX_SECONDS, wrap : true, + onchange: v => { + settings.training=v; saveSettingsDebounce(); } }, @@ -61,8 +60,8 @@ function startTabata() { g.clear(); Bangle.setLCDMode("doublebuffered"); g.flip(); - var pause = settings.pause, - training = settings.training, + var pause = settings.pause, + training = settings.training, round = 1, active = true, clearBtn1, clearBtn2, clearBtn3, timer; @@ -86,7 +85,7 @@ function startTabata() { exitTraining(); return; } - + if (active) { drawCountDown(round, training, active); training--; @@ -117,7 +116,7 @@ function drawCountDown(round, count, active) { g.setFontAlign(0,0); g.setFont("6x8", 2); - g.drawString("Round " + round + "/" + settings.rounds,120,6); + g.drawString("Round " + round + "/" + settings.rounds,120,6); g.setFont("6x8", 6); g.drawString("" + count,120,80); From 79e434d0c2ba06fc8da29181da35e08fb7495814 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 16:22:54 +0000 Subject: [PATCH 26/37] color adjustment - all 'accented' background items are now bg2, only unread messages are bgH --- apps/messages/app.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index 0cf13db2c..6feda9494 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -141,8 +141,8 @@ function showMapMessage(msg) { eta = m[2]; } else target=msg.body; layout = new Layout({ type:"v", c: [ - {type:"txt", font:fontMedium, label:target, bgCol:g.theme.bgH, col: g.theme.fgH, fillx:1, pad:2 }, - {type:"h", bgCol:g.theme.bgH, col: g.theme.fgH, fillx:1, c: [ + {type:"txt", font:fontMedium, label:target, bgCol:g.theme.bg2, col: g.theme.fg2, fillx:1, pad:2 }, + {type:"h", bgCol:g.theme.bg2, col: g.theme.fg2, fillx:1, c: [ {type:"txt", font:"6x8", label:"Towards" }, {type:"txt", font:fontLarge, label:street } ]}, @@ -179,7 +179,7 @@ function showMusicMessage(msg) { checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1}); } layout = new Layout({ type:"v", c: [ - {type:"h", fillx:1, bgCol:g.theme.bgH, col: g.theme.fgH, c: [ + {type:"h", fillx:1, bgCol:g.theme.bg2, col: g.theme.fg2, c: [ { type:"btn", src:getBackImage, cb:back }, { type:"v", fillx:1, c: [ { type:"txt", font:fontMedium, label:msg.artist, pad:2 }, @@ -212,8 +212,8 @@ function showMessageScroller(msg) { // a function to draw a menu item draw : function(idx, r) { // FIXME: in 2v13 onwards, clearRect(r) will work fine. There's a bug in 2v12 - g.setBgColor(idx{ cancelReloadTimeout(); // don't auto-reload to clock now showMessageSettings(msg); }}, { type:"v", fillx:1, c: [ - {type:"txt", font:fontSmall, label:msg.src||/*LANG*/"Message", bgCol:g.theme.bgH, col: g.theme.fgH, fillx:1, pad:2, halign:1 }, - title?{type:"txt", font:titleFont, label:title, bgCol:g.theme.bgH, col: g.theme.fgH, fillx:1, pad:2 }:{}, + {type:"txt", font:fontSmall, label:msg.src||/*LANG*/"Message", bgCol:g.theme.bg2, col: g.theme.fg2, fillx:1, pad:2, halign:1 }, + title?{type:"txt", font:titleFont, label:title, bgCol:g.theme.bg2, col: g.theme.fg2, fillx:1, pad:2 }:{}, ]}, ]}, {type:"txt", font:bodyFont, label:body, fillx:1, filly:1, pad:2, cb:()=>{ From 75694c9be12cb414dec7f11e74359d9577f16f42 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 16:29:06 +0000 Subject: [PATCH 27/37] change default background for dark theme to something a bit less extreme --- apps/setting/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 09d95934f..f74c94db0 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -226,7 +226,7 @@ function showThemeMenu() { /*LANG*/'Dark BW': ()=>{ upd({ fg:cl("#fff"), bg:cl("#000"), - fg2:cl("#0ff"), bg2:cl("#000"), + fg2:cl("#fff"), bg2:cl("#004"), fgH:cl("#fff"), bgH:cl("#00f"), dark:true }); From d811398a59c7e38f6a90b2b1513853aaa2080986 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 16:36:25 +0000 Subject: [PATCH 28/37] oops - fix errors in prev commit --- apps/alarm/app.js | 8 ++++---- apps/hardalarm/app.js | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index f7edcd1c4..56184edf1 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -74,11 +74,11 @@ function editAlarm(alarmIndex) { /*LANG*/'< Back' : showMainMenu, /*LANG*/'Hours': { value: hrs, min : 0, max : 23, wrap : true, - onchange: v => hrs=v; + onchange: v => hrs=v }, /*LANG*/'Minutes': { value: mins, min : 0, max : 59, wrap : true, - onchange: v => mins=v; + onchange: v => mins=v }, /*LANG*/'Enabled': { value: en, @@ -139,11 +139,11 @@ function editTimer(alarmIndex) { '': { 'title': /*LANG*/'Timer' }, /*LANG*/'Hours': { value: hrs, min : 0, max : 23, wrap : true, - onchange: v => hrs=v; + onchange: v => hrs=v }, /*LANG*/'Minutes': { value: mins, min : 0, max : 59, wrap : true, - onchange: v => mins=v; + onchange: v => mins=v }, /*LANG*/'Enabled': { value: en, diff --git a/apps/hardalarm/app.js b/apps/hardalarm/app.js index 09b73d318..0c72a2c8f 100644 --- a/apps/hardalarm/app.js +++ b/apps/hardalarm/app.js @@ -58,11 +58,11 @@ function editAlarm(alarmIndex) { '': { 'title': 'Alarms' }, /*LANG*/'Hours': { value: hrs, min : 0, max : 23, wrap : true, - onchange: v => hrs=v; + onchange: v => hrs=v }, /*LANG*/'Minutes': { value: mins, min : 0, max : 59, wrap : true, - onchange: v => mins=v; + onchange: v => mins=v }, /*LANG*/'Enabled': { value: en, From 582b00e08bc47c1fde66e0b4acd4b15bc6f48832 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 16:37:01 +0000 Subject: [PATCH 29/37] copy/paste error --- apps/intclock/ChangeLog | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/apps/intclock/ChangeLog b/apps/intclock/ChangeLog index aa910b6f6..2ad07562f 100644 --- a/apps/intclock/ChangeLog +++ b/apps/intclock/ChangeLog @@ -1,12 +1 @@ -0.02: Modified for use with new bootloader and firmware -0.03: add hour ticks, remove timers -0.04: add day-date display -0.07: make date and face bigger -0.08: make dots bigger and date more readable -0.09: center date, remove box around it, internal refactor to remove redundant code. -0.10: remove debug, refactor seconds to show elapsed secs each time app is displayed -0.11: shift face down for widget area, maximize face size, 0 pad single digit date, use locale for date -0.12: Fix regression after 0.11 -0.13: Fix broken date padding (fix #376) -0.14: Remove hardcoded hour buzz (you can install widchime if you miss it) -0.15: Add color scheme support +0.01: Initial commit From 597d1172be39b9692485eb1a70b40c955a4166e6 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 23 Feb 2022 16:38:26 +0000 Subject: [PATCH 30/37] changelog tweak --- apps/speedalt2/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt2/ChangeLog b/apps/speedalt2/ChangeLog index 602147856..73e9bfc40 100644 --- a/apps/speedalt2/ChangeLog +++ b/apps/speedalt2/ChangeLog @@ -12,4 +12,4 @@ 1.10: Adds Kalman filter. 1.14: Add VMG and coordinates screens 1.43: Adds mirroring of the watch face to an Android device. See README.md -1.48: Droidscript mirroring prog automatically uses last connection address. Auto connects when run. +1.49: Droidscript mirroring prog automatically uses last connection address. Auto connects when run. From 54ca2eed97906fc9362fcdc1b25294ffb1b4c91a Mon Sep 17 00:00:00 2001 From: copoer Date: Wed, 23 Feb 2022 12:57:22 -0400 Subject: [PATCH 31/37] Fix step count --- modules/exstats.js | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/exstats.js b/modules/exstats.js index 8a726a5de..b72ee6584 100644 --- a/modules/exstats.js +++ b/modules/exstats.js @@ -119,6 +119,7 @@ Bangle.on("GPS", function(fix) { Bangle.on("step", function(steps) { if (!state.active) return; if (stats["step"]) stats["step"].emit("changed",stats["step"]); + state.stepHistory[0] += steps-state.lastStepCount; state.lastStepCount = steps; }); Bangle.on("HRM", function(h) { From e3b558b1f037bee198334536dc368ee134650b1f Mon Sep 17 00:00:00 2001 From: Marco H Date: Wed, 23 Feb 2022 20:29:29 +0100 Subject: [PATCH 32/37] Threema icon and color --- apps/messages/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/messages/app.js b/apps/messages/app.js index 6feda9494..512659c40 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -92,6 +92,7 @@ function getMessageImage(msg) { if (s=="skype") return atob("GhoBB8AAB//AA//+Af//wH//+D///w/8D+P8Afz/DD8/j4/H4fP5/A/+f4B/n/gP5//B+fj8fj4/H8+DB/PwA/x/A/8P///B///gP//4B//8AD/+AAA+AA=="); if (s=="slack") return atob("GBiBAAAAAAAAAABAAAHvAAHvAADvAAAPAB/PMB/veD/veB/mcAAAABzH8B3v+B3v+B3n8AHgAAHuAAHvAAHvAADGAAAAAAAAAAAAAA=="); if (s=="sms message") return getNotificationImage(); + if (s=="threema") return atob("ICCDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAP/////wAAAAAAAAB//////+AAAAAAAAP///////wAAAAAAB////////+AAAAAAP///wAP///wAAAAAP/////////wAAAAAP//+P/x///wAAAAAP//+P/x///+AAAAB///+AAB///+AAAAAP//+AAB///+AAAAAP//+AAB///wAAAAAP//+AAB///wAAAAAB/////////wAAAAAB////////+AAAAAAB////////wAAAAAAB///////+AAAAAAAP//////+AAAAAAAAP+AAP/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkAAkAAkgAAAAAAAEkAEkgAkgAAAAAAAEkAAkAAkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); if (s=="twitter") return atob("GhYBAABgAAB+JgA/8cAf/ngH/5+B/8P8f+D///h///4f//+D///g///wD//8B//+AP//gD//wAP/8AB/+AB/+AH//AAf/AAAYAAA"); if (s=="telegram") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); if (s=="whatsapp") return atob("GBiBAAB+AAP/wAf/4A//8B//+D///H9//n5//nw//vw///x///5///4///8e//+EP3/APn/wPn/+/j///H//+H//8H//4H//wMB+AA=="); @@ -120,6 +121,7 @@ function getMessageImageCol(msg,def) { "outlook mail": "#0072c6", "skype": "#00aff0", "slack": "#e51670", + "threema": "#000", "telegram": "#0088cc", "twitter": "#1da1f2", "whatsapp": "#4fce5d", From 7ce25c8774d6846d2430f2bb6a22625d444578a9 Mon Sep 17 00:00:00 2001 From: Sven Klomp Date: Wed, 23 Feb 2022 20:50:45 +0100 Subject: [PATCH 33/37] Initial commit of widcw widcw is a widget to display the current calendar week. --- apps/widcw/ChangeLog | 1 + apps/widcw/logo.svg | 62 +++++++++++++++++++++++++++++++++++++++ apps/widcw/metadata.json | 13 ++++++++ apps/widcw/widget.js | 48 ++++++++++++++++++++++++++++++ apps/widcw/widget.png | Bin 0 -> 884 bytes apps/widcw/widget.svg | 55 ++++++++++++++++++++++++++++++++++ 6 files changed, 179 insertions(+) create mode 100644 apps/widcw/ChangeLog create mode 100644 apps/widcw/logo.svg create mode 100644 apps/widcw/metadata.json create mode 100644 apps/widcw/widget.js create mode 100644 apps/widcw/widget.png create mode 100644 apps/widcw/widget.svg diff --git a/apps/widcw/ChangeLog b/apps/widcw/ChangeLog new file mode 100644 index 000000000..a4bc24d1a --- /dev/null +++ b/apps/widcw/ChangeLog @@ -0,0 +1 @@ +0.01: First version \ No newline at end of file diff --git a/apps/widcw/logo.svg b/apps/widcw/logo.svg new file mode 100644 index 000000000..e093414d5 --- /dev/null +++ b/apps/widcw/logo.svg @@ -0,0 +1,62 @@ + + + + + + + + CW + + diff --git a/apps/widcw/metadata.json b/apps/widcw/metadata.json new file mode 100644 index 000000000..653b093ec --- /dev/null +++ b/apps/widcw/metadata.json @@ -0,0 +1,13 @@ +{ + "id": "widcw", + "name": "Calendar Week Widget", + "version": "0.01", + "description": "Widget which shows the current calendar week", + "icon": "widget.png", + "type": "widget", + "tags": "widget,calendar", + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name":"widcw.wid.js","url":"widget.js"} + ] +} diff --git a/apps/widcw/widget.js b/apps/widcw/widget.js new file mode 100644 index 000000000..ef43a4551 --- /dev/null +++ b/apps/widcw/widget.js @@ -0,0 +1,48 @@ +(function() { + var width = 22; // width of the widget + + function draw() { + const x = this.x, y = this.y, x2 = x+21, y2 = y+23; + + var date = new Date(); + + // Calculate calendar week (https://stackoverflow.com/a/6117889) + getCW= function(date){ + var d=new Date(date.getFullYear(), date.getMonth(), date.getDate()); + var dayNum = d.getDay() || 7; + d.setDate(d.getDate() + 4 - dayNum); + var yearStart = new Date(d.getFullYear(),0,1); + return Math.ceil((((d - yearStart) / 86400000) + 1)/7); + }; + + g.reset().setFontAlign(0, 0) // center all text + // header + .setBgColor("#f00").setColor("#fff") + .clearRect(x, y, x2, y+8).setFont("4x6").drawString("CW", (x+x2)/2+1, y+5) + // date + .setBgColor("#fff").setColor("#000") + .clearRect(x, y+9, x2, y2).setFont("Vector:16").drawString(getCW(date), (x+x2)/2+2, y+17); + + if (!g.theme.dark) { + // black border around date for light themes + g.setColor("#000").drawPoly([ + x, y+9, + x, y2, + x2, y2, + x2, y+9 + ]); + } + + // redraw when date changes + setTimeout(()=>WIDGETS["widcw"].draw(), (86401 - Math.floor(date/1000) % 86400)*1000); + + } + + // add your widget + WIDGETS["widcw"]={ + area:"tl", // tl (top left), tr (top right), bl (bottom left), br (bottom right) + width: width, // how wide is the widget? You can change this and call Bangle.drawWidgets() to re-layout + draw:draw // called to draw the widget + }; + +})(); diff --git a/apps/widcw/widget.png b/apps/widcw/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..c73d40c5a60b0f618d12a23276b14d53325b23df GIT binary patch literal 884 zcmV-)1B?8LP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10|7}y zK~!jg?bknuT}2ef@lTRXRxvSa5rwF+Q;VpmiBV9|R&BIV5MpDRlvXMTf+>R9st}UY zR)T`WuvQU-z#@o$hzg1r5DA<86L;V4Gx1r>T=u+q_r?37<$PgaXXZC|&Y3yyoLMTB zN~Kb%R4SFqHL|IrZVC_L0Cr(J7Vtej$70almo<^IxD@&~j%9;p@VIp1(?Pd@-;2$5XZ<4fO5sbzPjf ztuSC9B?M9!M#Cd!8)aJmTWvpw#i<~L?Jt;IU=YAij@tJfJq-1cY#jZIiDn@8?;5VaA?CoUo zFsFlIq?3QiMyl*dPR1LU#=&C$_57{QJnO&zh)Ln{XYrlb*0aHzY-FOgwunb3abTy> zLUXk=dLuqCoJNf?Y%To#bYZk5vKq>s5s zTSaZcVkYROIyyQr+wiLNzF8`q8TXuyOy&9c&=&Ahi}uU>y{Ii69ieM}-+~A55N?q& z&b$<#DwRs*|KT5a_e&ZbqWHf60000< KMNUMnLSTZK%c`yb literal 0 HcmV?d00001 diff --git a/apps/widcw/widget.svg b/apps/widcw/widget.svg new file mode 100644 index 000000000..d3e567286 --- /dev/null +++ b/apps/widcw/widget.svg @@ -0,0 +1,55 @@ + + + + + + + + CW + + From f3c0dfcdcaf1cee6a3f397cdb5f9fea771be01be Mon Sep 17 00:00:00 2001 From: Marco H Date: Thu, 24 Feb 2022 11:19:35 +0100 Subject: [PATCH 34/37] Change threema icon to 24x24px 1bit color --- apps/messages/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index 512659c40..282a2b125 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -92,7 +92,7 @@ function getMessageImage(msg) { if (s=="skype") return atob("GhoBB8AAB//AA//+Af//wH//+D///w/8D+P8Afz/DD8/j4/H4fP5/A/+f4B/n/gP5//B+fj8fj4/H8+DB/PwA/x/A/8P///B///gP//4B//8AD/+AAA+AA=="); if (s=="slack") return atob("GBiBAAAAAAAAAABAAAHvAAHvAADvAAAPAB/PMB/veD/veB/mcAAAABzH8B3v+B3v+B3n8AHgAAHuAAHvAAHvAADGAAAAAAAAAAAAAA=="); if (s=="sms message") return getNotificationImage(); - if (s=="threema") return atob("ICCDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAP/////wAAAAAAAAB//////+AAAAAAAAP///////wAAAAAAB////////+AAAAAAP///wAP///wAAAAAP/////////wAAAAAP//+P/x///wAAAAAP//+P/x///+AAAAB///+AAB///+AAAAAP//+AAB///+AAAAAP//+AAB///wAAAAAP//+AAB///wAAAAAB/////////wAAAAAB////////+AAAAAAB////////wAAAAAAB///////+AAAAAAAP//////+AAAAAAAAP+AAP/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkAAkAAkgAAAAAAAEkAEkgAkgAAAAAAAEkAAkAAkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); + if (s=="threema") return atob("GBjB/4Yx//8AAAAAAAAAAAAAfgAB/4AD/8AH/+AH/+AP//AP2/APw/APw/AHw+AH/+AH/8AH/4AH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); if (s=="twitter") return atob("GhYBAABgAAB+JgA/8cAf/ngH/5+B/8P8f+D///h///4f//+D///g///wD//8B//+AP//gD//wAP/8AB/+AB/+AH//AAf/AAAYAAA"); if (s=="telegram") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); if (s=="whatsapp") return atob("GBiBAAB+AAP/wAf/4A//8B//+D///H9//n5//nw//vw///x///5///4///8e//+EP3/APn/wPn/+/j///H//+H//8H//4H//wMB+AA=="); From 4143a5f105cfd2b5eb8a84d93e77cd9d2ea65542 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Feb 2022 11:01:37 +0000 Subject: [PATCH 35/37] 0.05: Don't poll for GPS status, override setGPSPower handler (fix #1456) --- apps/widgps/ChangeLog | 1 + apps/widgps/metadata.json | 2 +- apps/widgps/widget.js | 27 +++++++++------------------ 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/apps/widgps/ChangeLog b/apps/widgps/ChangeLog index 3d47b8a0c..f68fc701c 100644 --- a/apps/widgps/ChangeLog +++ b/apps/widgps/ChangeLog @@ -2,3 +2,4 @@ 0.02: Don't break if running on 2v08 firmware (just don't display anything) 0.03: Fix positioning 0.04: Show GPS fix status +0.05: Don't poll for GPS status, override setGPSPower handler (fix #1456) diff --git a/apps/widgps/metadata.json b/apps/widgps/metadata.json index 2f59aa82a..39bff2fad 100644 --- a/apps/widgps/metadata.json +++ b/apps/widgps/metadata.json @@ -1,7 +1,7 @@ { "id": "widgps", "name": "GPS Widget", - "version": "0.04", + "version": "0.05", "description": "Tiny widget to show the power and fix status of the GPS", "icon": "widget.png", "type": "widget", diff --git a/apps/widgps/widget.js b/apps/widgps/widget.js index 25df2178a..bfdb89d33 100644 --- a/apps/widgps/widget.js +++ b/apps/widgps/widget.js @@ -1,7 +1,13 @@ (function(){ - if (!Bangle.isGPSOn) return; // old firmware + // override setGPSPower so we know if GPS is on or off + var oldSetGPSPower = Bangle.setGPSPower; + Bangle.setGPSPower = function(on,id) { + var isGPSon = oldSetGPSPower(on,id); + WIDGETS.gps.draw(); + return isGPSon; + } - function draw() { + WIDGETS.gps={area:"tr",width:24,draw:function() { g.reset(); if (Bangle.isGPSOn()) { const gpsObject = Bangle.getGPSFix(); @@ -14,20 +20,5 @@ g.setColor("#888"); // off = grey } g.drawImage(atob("GBiBAAAAAAAAAAAAAA//8B//+BgYGBgYGBgYGBgYGBgYGBgYGB//+B//+BgYGBgYGBgYGBgYGBgYGBgYGB//+A//8AAAAAAAAAAAAA=="), this.x, 2+this.y); - } - - var timerInterval; - Bangle.on('lcdPower', function(on) { - if (on) { - WIDGETS.gps.draw(); - if (!timerInterval) timerInterval = setInterval(()=>WIDGETS.gps.draw(), 2000); - } else { - if (timerInterval) { - clearInterval(timerInterval); - timerInterval = undefined; - } - } - }); - - WIDGETS.gps={area:"tr",width:24,draw:draw}; + }}; })(); From 14b6004f1c0bfa7d579c8bab9271d111853fab0a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Feb 2022 11:33:05 +0000 Subject: [PATCH 36/37] Update setUI to work with new Bangle.js 2v13 menu style --- apps/ptlaunch/ChangeLog | 3 ++- apps/ptlaunch/boot.js | 1 + apps/ptlaunch/metadata.json | 2 +- apps/shortcuts/ChangeLog | 3 ++- apps/shortcuts/boot.js | 2 +- apps/shortcuts/metadata.json | 2 +- apps/swiperclocklaunch/ChangeLog | 1 + apps/swiperclocklaunch/boot.js | 1 + apps/swiperclocklaunch/metadata.json | 2 +- 9 files changed, 11 insertions(+), 6 deletions(-) diff --git a/apps/ptlaunch/ChangeLog b/apps/ptlaunch/ChangeLog index 68b7d3e1c..eec3610ed 100644 --- a/apps/ptlaunch/ChangeLog +++ b/apps/ptlaunch/ChangeLog @@ -4,4 +4,5 @@ 0.10: Improve the management of existing patterns: Draw the linked pattern on the left hand side of the app name within a scroller, similar to the default launcher. Slighlty clean up the code to make it less horrible. 0.11: Respect theme colors. Fix: Do not pollute global space with internal variables ans functions in boot.js 0.12: Improve pattern detection code readability by PaddeK http://forum.espruino.com/profiles/117930/ -0.13: Improve pattern rendering by HughB http://forum.espruino.com/profiles/167235/ \ No newline at end of file +0.13: Improve pattern rendering by HughB http://forum.espruino.com/profiles/167235/ +0.14: Update setUI to work with new Bangle.js 2v13 menu style diff --git a/apps/ptlaunch/boot.js b/apps/ptlaunch/boot.js index 19a8f16cb..748d564f3 100644 --- a/apps/ptlaunch/boot.js +++ b/apps/ptlaunch/boot.js @@ -76,6 +76,7 @@ var sui = Bangle.setUI; Bangle.setUI = function (mode, cb) { sui(mode, cb); + if ("object"==typeof mode) mode = mode.mode; if (!mode) { Bangle.removeListener("drag", dragHandler); storedPatterns = {}; diff --git a/apps/ptlaunch/metadata.json b/apps/ptlaunch/metadata.json index 6c3870d24..0b6dce3d1 100644 --- a/apps/ptlaunch/metadata.json +++ b/apps/ptlaunch/metadata.json @@ -2,7 +2,7 @@ "id": "ptlaunch", "name": "Pattern Launcher", "shortName": "Pattern Launcher", - "version": "0.13", + "version": "0.14", "description": "Directly launch apps from the clock screen with custom patterns.", "icon": "app.png", "screenshots": [{"url":"manage_patterns_light.png"}], diff --git a/apps/shortcuts/ChangeLog b/apps/shortcuts/ChangeLog index 2286a7f70..0e4a98065 100644 --- a/apps/shortcuts/ChangeLog +++ b/apps/shortcuts/ChangeLog @@ -1 +1,2 @@ -0.01: New App! \ No newline at end of file +0.01: New App! +0.02: Update setUI to work with new Bangle.js 2v13 menu style diff --git a/apps/shortcuts/boot.js b/apps/shortcuts/boot.js index f71f6d6ca..58ce2d067 100644 --- a/apps/shortcuts/boot.js +++ b/apps/shortcuts/boot.js @@ -1,6 +1,7 @@ (function() { var sui = Bangle.setUI; Bangle.setUI = function(mode, cb) { + if ("object"==typeof mode) mode = mode.mode; if (mode!="clock") return sui(mode,cb); return sui("clockupdown", (dir) => { let settings = require("Storage").readJSON("shortcuts.json", 1)||{}; @@ -12,4 +13,3 @@ }); }; })(); - \ No newline at end of file diff --git a/apps/shortcuts/metadata.json b/apps/shortcuts/metadata.json index 2351a102f..922d5ae11 100644 --- a/apps/shortcuts/metadata.json +++ b/apps/shortcuts/metadata.json @@ -2,7 +2,7 @@ "id": "shortcuts", "name": "Shortcuts", "shortName": "Shortcuts", - "version": "0.01", + "version": "0.02", "description": "Quickly load your favourite apps from (almost) any watch face.", "icon": "app.png", "type": "bootloader", diff --git a/apps/swiperclocklaunch/ChangeLog b/apps/swiperclocklaunch/ChangeLog index c1b4a5fbb..244b602b5 100644 --- a/apps/swiperclocklaunch/ChangeLog +++ b/apps/swiperclocklaunch/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: Fix issue with mode being undefined +0.03: Update setUI to work with new Bangle.js 2v13 menu style diff --git a/apps/swiperclocklaunch/boot.js b/apps/swiperclocklaunch/boot.js index e9b203eee..bb285ea94 100644 --- a/apps/swiperclocklaunch/boot.js +++ b/apps/swiperclocklaunch/boot.js @@ -4,6 +4,7 @@ Bangle.setUI = function(mode, cb) { sui(mode,cb); if(!mode) return; + if ("object"==typeof mode) mode = mode.mode; if (!mode.startsWith("clock")) return; Bangle.swipeHandler = dir => { if (dir<0) Bangle.showLauncher(); }; Bangle.on("swipe", Bangle.swipeHandler); diff --git a/apps/swiperclocklaunch/metadata.json b/apps/swiperclocklaunch/metadata.json index 733aaa032..5e4a0d648 100644 --- a/apps/swiperclocklaunch/metadata.json +++ b/apps/swiperclocklaunch/metadata.json @@ -1,7 +1,7 @@ { "id": "swiperclocklaunch", "name": "Swiper Clock Launch", - "version": "0.02", + "version": "0.03", "description": "Navigate between clock and launcher with Swipe action", "icon": "swiperclocklaunch.png", "type": "bootloader", From 2353191df4fc566803c7596639745a4b9f7246e5 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Thu, 24 Feb 2022 15:03:13 +0100 Subject: [PATCH 37/37] messages: Remove left-over debug statement --- apps/messages/ChangeLog | 1 + apps/messages/metadata.json | 2 +- apps/messages/widget.js | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index 1e6ac71d7..bd40868a5 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -36,3 +36,4 @@ Also gave the widget a pixel more room to the right 0.23: Change message colors to match current theme instead of using green Now attempt to use Large/Big/Medium fonts, and allow minimum font size to be configured +0.24: Remove left-over debug statement diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index e8ed83099..0387c1972 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.23", + "version": "0.24", "description": "App to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", diff --git a/apps/messages/widget.js b/apps/messages/widget.js index 4a247b917..d9363573a 100644 --- a/apps/messages/widget.js +++ b/apps/messages/widget.js @@ -6,7 +6,6 @@ draw:function() { g.reset().clearRect(this.x, this.y, this.x+this.width, this.y+this.iconwidth); g.drawImage((c&1) ? atob("GBiBAAAAAAAAAAAAAAAAAAAAAB//+DAADDAADDAADDwAPD8A/DOBzDDn/DA//DAHvDAPvjAPvjAPvjAPvh///gf/vAAD+AAB8AAAAA==") : atob("GBiBAAAAAAAAAAAAAAAAAAAAAB//+D///D///A//8CP/xDj/HD48DD+B8D/D+D/3vD/vvj/vvj/vvj/vvh/v/gfnvAAD+AAB8AAAAA=="), this.x, this.y); let settings = require('Storage').readJSON("messages.settings.json", true) || {}; - console.log("dingen ", typeof(settings.repeat), settings.repeat) if (settings.repeat===undefined) settings.repeat = 4; if (c<120 && (Date.now()-this.l)>settings.repeat*1000) { this.l = Date.now(); @@ -47,4 +46,4 @@ want to buzz but should still show that there are unread messages. */ if (global.MESSAGES===undefined) (function() { var messages = require("Storage").readJSON("messages.json",1)||[]; if (messages.some(m=>m.new)) WIDGETS["messages"].show(true); -})(); \ No newline at end of file +})();