From 9b7bd7c156e3f3870ecf4038544c3ff8ec589e44 Mon Sep 17 00:00:00 2001 From: adrian w kirk Date: Fri, 24 Sep 2021 15:30:26 +0100 Subject: [PATCH 01/11] Matrix Clock - First version --- apps.json | 14 ++ apps/matrixclock/ChangeLog | 1 + apps/matrixclock/README.md | 17 ++ apps/matrixclock/app.png | Bin 0 -> 33522 bytes apps/matrixclock/matrixclock-icon.js | 1 + apps/matrixclock/matrixclock.js | 272 +++++++++++++++++++++++++++ apps/matrixclock/matrixclock.png | Bin 0 -> 2669 bytes 7 files changed, 305 insertions(+) create mode 100644 apps/matrixclock/ChangeLog create mode 100644 apps/matrixclock/README.md create mode 100644 apps/matrixclock/app.png create mode 100644 apps/matrixclock/matrixclock-icon.js create mode 100644 apps/matrixclock/matrixclock.js create mode 100644 apps/matrixclock/matrixclock.png diff --git a/apps.json b/apps.json index 3b8fe574c..f7a16f6b2 100644 --- a/apps.json +++ b/apps.json @@ -319,6 +319,20 @@ {"name":"sweepclock.img","url":"sweepclock-icon.js","evaluate":true} ] }, + { "id": "matrixclock", + "name": "Matrix Clock", + "icon": "matrixclock.png", + "version":"0.01", + "description": "inspired by The Matrix, a clock of the same style", + "tags": "clock", + "type":"clock", + "allow_emulator":true, + "readme": "README.md", + "storage": [ + {"name":"matrixclock.app.js","url":"matrixclock.js"}, + {"name":"matrixclock.img","url":"matrixclock-icon.js","evaluate":true} + ] + }, { "id": "imgclock", "name": "Image background clock", "shortName":"Image Clock", diff --git a/apps/matrixclock/ChangeLog b/apps/matrixclock/ChangeLog new file mode 100644 index 000000000..d53df991b --- /dev/null +++ b/apps/matrixclock/ChangeLog @@ -0,0 +1 @@ +0.01: Initial Release diff --git a/apps/matrixclock/README.md b/apps/matrixclock/README.md new file mode 100644 index 000000000..c8c538139 --- /dev/null +++ b/apps/matrixclock/README.md @@ -0,0 +1,17 @@ +# Matrix Clock + +Inspired by the Matrix, a clock in the same style + +![](app.png) + +## Usage + + + +## Requests + +Please reach out to adrian@adriankirk.com if you have feature requests or notice bugs. + +## Creator + +Made by [Adrian Kirk](mailto:adrian@adriankirk.com) diff --git a/apps/matrixclock/app.png b/apps/matrixclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..763c00b1de9f5c73ca4af264c6d65cc5eb08c090 GIT binary patch literal 33522 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Ν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 literal 0 HcmV?d00001 diff --git a/apps/matrixclock/matrixclock-icon.js b/apps/matrixclock/matrixclock-icon.js new file mode 100644 index 000000000..d9bdd8c65 --- /dev/null +++ b/apps/matrixclock/matrixclock-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("lEowkA/4AGmYIHABHzmVCCaE0kUin4TPmUimQTQ+UzmcvJ6EjCaP/kYABCaEymYTl+Q7SMgITTmQTQPAK0RMgITm+QTS+ciPCcikQpPY4MjmYTO+czmcyHh4TCmcvJ54nCPCBjBJx4oECc8zJ6ATTn48RE4YTTHh4SDH4ImRFBwTGFBgTGFBgSGFBYmHUgITRmcyFBASFAoUjE5PzkQLBHJxiDAQP/GxAA==")) diff --git a/apps/matrixclock/matrixclock.js b/apps/matrixclock/matrixclock.js new file mode 100644 index 000000000..3735d0154 --- /dev/null +++ b/apps/matrixclock/matrixclock.js @@ -0,0 +1,272 @@ +/** + * Adrian Kirk 2021-10 + * + * Matrix Clock + * + * A simple clock inspired by the movie. + * Text shards move down the screen as a background to the + * time and date + **/ +const Locale = require('locale'); + +const SHARD_COLOR =[0,1.0,0]; +const SHARD_FONT_SIZE = 12; +const SHARD_Y_START = 30; +/** +* The text shard object is responsible for creating the +* shards of text that move down the screen. As the +* shard moves down the screen the latest character added +* is brightest with characters being coloured darker and darker +* going back to the eldest +*/ +class TextShard { + + constructor(x,y,length){ + // The x and y coords of the first character of the shard + this.x = x; + this.y = y; + // The visible length of the shard. We don't make the + // whole chain visible just to save on cpu time + this.length = length; + // the list of characters making up this shard + this.txt = []; + } + /** + * The add method call adds another random character to + * the chain + */ + add(){ + this.txt.push(randomChar()); + } + /** + * The show method displays the latest shard image to the + * screen with the following rules: + * - latest addition is brightest, oldest is darker + * - display up to defined length of characters only + * of the shard to save cpu + */ + show(){ + g.setFontAlign(-1,-1,0); + for(var i=0; i this.length - 2){ + color_strength = 0; + } + g.setColor(color_strength*SHARD_COLOR[0], + color_strength*SHARD_COLOR[1], + color_strength*SHARD_COLOR[2]); + g.setFont("Vector",SHARD_FONT_SIZE); + g.drawString(this.txt[idx], this.x, this.y + idx*SHARD_FONT_SIZE); + } + } + /** + * Method tests to see if any part of the shard chain is still + * visible on the screen + */ + isVisible(){ + return (this.y + (this.txt.length - this.length - 2)*SHARD_FONT_SIZE < g.getHeight()); + } + /** + * resets the shard back to the top of the screen + */ + reset(){ + this.y = SHARD_Y_START; + this.txt = []; + } +} + +/** +* random character chooser to be called by the shard when adding characters +*/ +const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\'; +function randomChar(){ + return chars[Math.floor(Math.random() * chars.length)]; +} + +// Now set up the shards +// we are going to have a limited no of shards (to save cpu) +// but randomize the x value and length every reset to make it look as if there +// are more +var shards = []; +const NO_SHARDS = 4; +const channel_width = g.getWidth()/NO_SHARDS; + +function shard_x(i){ + return i*channel_width + Math.random() * channel_width; +} + +function shard_length(){ + return Math.floor(Math.random()*5) + 3; +} + +for(var i=0; i 0.7){ + shards[i].reset(); + shards[i].length = shard_length(); + shards[i].x = shard_x(i); + if(shards[i].x > DATE_X_COORD - 20){ + shards[i].y = 50; + } + } + shards[i].add(); + shards[i].show(); + } + var now = new Date(); + // draw time. Have to draw time on every loop + g.setFont("Vector",45); + g.setFontAlign(-1,-1,0); + if(last_draw_time == null || now.getMinutes() != last_draw_time.getMinutes()){ + g.setColor(0,0,0); + g.drawString(timeStr, TIME_X_COORD, TIME_Y_COORD); + timeStr = format_time(now); + } + g.setColor(SHARD_COLOR[0], + SHARD_COLOR[1], + SHARD_COLOR[2]); + g.drawString(timeStr, TIME_X_COORD, TIME_Y_COORD); + // + // draw date when it changes + g.setFont("Vector",15); + g.setFontAlign(-1,-1,0); + if(last_draw_time == null || now.getDate() != last_draw_time.getDate()){ + g.setColor(0,0,0); + g.drawString(dateStr, DATE_X_COORD, DATE_Y_COORD); + dateStr = format_date(now); + g.setColor(SHARD_COLOR[0], + SHARD_COLOR[1], + SHARD_COLOR[2]); + g.drawString(dateStr, DATE_X_COORD, DATE_Y_COORD); + } + last_draw_time = now; +} + +function format_date(now){ + return Locale.dow(now,1) + " " + format00(now.getDate()); +} + + +function format_time(now){ + var time = new Date(now.getTime()); + var hours = time.getHours() % 12; + if(hours < 1){ + hours = 12; + } + var am_pm; + if(time.getHours() < 12){ + am_pm = "AM"; + } else { + am_pm = "PM"; + } + return format00(hours) + ":" + format00(time.getMinutes()) + " "+ am_pm; +} + +function format00(num){ + var value = (num | 0); + if(value > 99 || value < 0) + throw "must be between in range 0-99"; + if(value < 10) + return "0" + value.toString(); + else + return value.toString(); +} + +function button1pressed(){ + console.log("button 1 pressed"); +} + +function button3pressed(){ + console.log("button 3 pressed"); +} + +function load_settings(){ + console.log("load_settings called"); +} + +// The interval reference for updating the clock +let intervalRef = null; + +function clearTimers(){ + if(intervalRef != null) { + clearInterval(intervalRef); + intervalRef = null; + } +} + +function shouldRedraw(){ + return Bangle.isLCDOn(); +} + +function startTimers(){ + clearTimers(); + if (Bangle.isLCDOn()) { + intervalRef = setInterval(() => { + if (!shouldRedraw()) { + //console.log("draw clock callback - skipped redraw"); + } else { + draw_clock(); + } + }, 100 + ); + + if (shouldRedraw()) { + draw_clock(); + } else { + console.log("scheduleDrawClock - skipped redraw"); + } + } else { + console.log("scheduleDrawClock - skipped not visible"); + } +} + + +Bangle.on('lcdPower', (on) => { + if (on) { + console.log("lcdPower: on"); + startTimers(); + } else { + console.log("lcdPower: off"); + clearTimers(); + } +}); + +Bangle.on('faceUp',function(up){ + //console.log("faceUp: " + up + " LCD: " + Bangle.isLCDOn()); + if (up && !Bangle.isLCDOn()) { + //console.log("faceUp and LCD off"); + clearTimers(); + Bangle.setLCDPower(true); + } +}); + +g.clear(); +load_settings(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +startTimers(); +// Show launcher when middle button pressed +setWatch(Bangle.showLauncher, BTN2,{repeat:false,edge:"falling"}); + +// Handle button 1 being pressed +setWatch(button1pressed, BTN1,{repeat:true,edge:"falling"}); + +// Handle button 3 being pressed +setWatch(button3pressed, BTN3,{repeat:true,edge:"falling"}); diff --git a/apps/matrixclock/matrixclock.png b/apps/matrixclock/matrixclock.png new file mode 100644 index 0000000000000000000000000000000000000000..70a1cd5327a61bc1b0d393b57e2093864e565b9c GIT binary patch literal 2669 zcmZ`*c{r478-GXk?p)c+{?6b0`1>Ob#g46*ZED8Wt*`}}=0PxoWfVXY{ zfXV;>X=+ZL9h&W6k_cEY8yi5At@8ssAaP(DTLZB_03-)+qOmo=5+wg!$AdJ!VYmPw zmJD!z!yIKx&az-{4rfbp<#BySXyk4Cp>v@3B_kEtLV#-FLzzm!eb76qq9$j;1di66$OI@1_nX{wV@Q+aTr`* zUmvE0fFTeNHUdIF?aOdyLVW4Fwu1aG4u(Ycq>-r%GR0S!6W85?;?FPygE@)5udO;6 zWUn8YeCglXVmAomcwlg-7VK9v5|jKdG>&JB_O-9AbZAa6)FB#~#4eaqmJuBNHNpSc zew4R`$CKz3Z+{Nl!I#W1LVTnA!~7GAlN)7AW|F*}Fk~N+FP)PKp`(R{{nGPGCgES1 zKY9MiG^2P^X!cZhPZFoGugQKgeM6&RoLT%do2|irwX!E~B#4H6zePrZBc{Isgchv(`i zxF%HKsg(i4gtInws%mGY)4<0qdZJy{N_E7pmFcU7E18)6HqG*yZ+zjjWgs#JK606g|s|TG?#Q19D1d+;5eF>Pv+vGdCU{;UUV% z)SZb^S-z<8dz!4|ec{%&p7~&IJxt=e2b4mx$G}`3-T%5P@!`tVD`}u}N>Sk{-Rt1Q z!!aX<8{mT3h0eTjJtEv$uCo(R>q2-I%nJ*)o2|5lgRwVs7kD4<(WW`yN8sUzdk-Qz z9)Fa`J`ywQyp5;d)=^#m|4q?xxQtWnX4Xu_uV}=%0G5y*N zf>Z>umgyU2bUdl*BNrljje9C$mFv;tbSXB)Vca$j}6@(Skd7K&84YGW61+)W)(% zuUX+kN}+^%+P0W6Jl0xgy_k0Z{}ck!;DXiExZRMzpmeQUXEE(li*bm zDGjsY4>G++N#^eG1-|)1!)>Nm(CDX^Kr2j7W(jBHHD_lW5fz4TyR1akS3c`u97cxyvnhGZ&z*n z! zB|H4m)x7F&j6->kCwk$P%j<@EF_S+ZKMIOQ8WZE}2VM~(-PI-eBd7d3L)x!q60k{j zs1V^jg~bkr(k23TDl?0U)K+jJ0`7@jZ3EAaEvjDHf8_9gzz~ybepqXDbWG#XkixdL z?ws|d8D~JPQc2?d4Lc8bqLxe|LHXhnjM?r^2FS&+&OlVA%Hd89t3pT0rc&O48^P19 z2i_+6setc2em}G~^ggMi!xm*BK5E_=?mD7EIKTHdKPe%)xY3a(>Zn{LM5ge`$%L7-nhS`xJ~7Z(*1h2WfX^!9!|e>b(_N>%l46OF^w2ee>-7Aa>hk3bd_I7B`pp|q<8Ds0JZ#^k_^x03vT^>KzyIA6-Gin$_mX}?-;uCu}@oDBVkIq zYiE(YT|`4xZ{E=ov+AV*O`{33eO%d+hrHU42)`mjy~}ZlPnCjlQN8hFE9N5UtH7>_ z#nEdAbE?m4LRQ{y(i{BMGpAgN`X_Jpwdsa#%CoAg%POjPwSC7IW+b2mmmZ&Nu+_(Y zZf$R`)l_vKo~^Gb3+0Op5lrggzp}9*%6NS`Vmn5qIVlr)cVh(Pb1~G6-=eQEpgwYG zwwIsxQcY9SfyL*B3PT|~tK@7<@7&(!=<8#JO&t%iDD*C{$Eu!VX+rZYGz05uRM!yd guW3u`ALm1XW#=8{i!Y Date: Mon, 27 Sep 2021 00:07:13 +0100 Subject: [PATCH 02/11] Matrix Clock: added matrix icon --- apps/matrixclock/app.png | Bin 33522 -> 18370 bytes apps/matrixclock/matrixclock-icon.js | 2 +- apps/matrixclock/matrixclock.png | Bin 2669 -> 3524 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/matrixclock/app.png b/apps/matrixclock/app.png index 763c00b1de9f5c73ca4af264c6d65cc5eb08c090..bc135c3eedb5c4073e076e287eb5ebd20ef07d24 100644 GIT binary patch delta 17894 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 VVu6F;+Ft+w002ovPDHLkV1ns>oH+mh delta 33166 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 diff --git a/apps/matrixclock/matrixclock-icon.js b/apps/matrixclock/matrixclock-icon.js index d9bdd8c65..5d5e9cd67 100644 --- a/apps/matrixclock/matrixclock-icon.js +++ b/apps/matrixclock/matrixclock-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("lEowkA/4AGmYIHABHzmVCCaE0kUin4TPmUimQTQ+UzmcvJ6EjCaP/kYABCaEymYTl+Q7SMgITTmQTQPAK0RMgITm+QTS+ciPCcikQpPY4MjmYTO+czmcyHh4TCmcvJ54nCPCBjBJx4oECc8zJ6ATTn48RE4YTTHh4SDH4ImRFBwTGFBgTGFBgSGFBYmHUgITRmcyFBASFAoUjE5PzkQLBHJxiDAQP/GxAA==")) +require("heatshrink").decompress(atob("lEowkBBpNgEKV3Bhd2CZEGFZAgGAwUHuEGuAMIs4JFCYIBBBItmFRA7BCY4+Gs5MDCbZ3CHwQTNJgwTPB4h3LHYQTQG44Tfd4zsCCZJ3GBwQTMCwYTEgwTSbBVnCYZPDdhZSICbo7EMZbbGRZivDT54AJHIITHdYoAGBgxjCHYYnEO5QyGJpgMDbZgTLHpITJT50GOQKfTCaoMRRdITRPQQAJBgZyRC4oAFA")) diff --git a/apps/matrixclock/matrixclock.png b/apps/matrixclock/matrixclock.png index 70a1cd5327a61bc1b0d393b57e2093864e565b9c..6342536744f421e2e8f047412b5182ed54543914 100644 GIT binary patch delta 2676 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 Date: Mon, 27 Sep 2021 00:50:03 +0100 Subject: [PATCH 03/11] Matrix clock: Optimized the character generation and management --- apps/matrixclock/matrixclock.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/apps/matrixclock/matrixclock.js b/apps/matrixclock/matrixclock.js index 3735d0154..713c5eecd 100644 --- a/apps/matrixclock/matrixclock.js +++ b/apps/matrixclock/matrixclock.js @@ -79,9 +79,11 @@ class TextShard { /** * random character chooser to be called by the shard when adding characters */ -const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\'; +const CHAR_CODE_START = 33; +const CHAR_CODE_LAST = 126; +const CHAR_CODE_LENGTH = CHAR_CODE_LAST - CHAR_CODE_START; function randomChar(){ - return chars[Math.floor(Math.random() * chars.length)]; + return String.fromCharCode(Math.floor(Math.random() * CHAR_CODE_LENGTH)+ CHAR_CODE_START); } // Now set up the shards @@ -112,13 +114,17 @@ const TIME_X_COORD = 20; const TIME_Y_COORD = 100; const DATE_X_COORD = 170; const DATE_Y_COORD = 30; +const RESET_PROBABILITY = 0.8; /** * main loop to draw the clock face */ function draw_clock(){ // first move all the shards down the screen for(var i=0; i 0.7){ + var visible = shards[i].isVisible(); + // once the shard is no longer visible we wait + // a random no of loops before reseting + if(!visible && Math.random() > RESET_PROBABILITY){ shards[i].reset(); shards[i].length = shard_length(); shards[i].x = shard_x(i); @@ -126,8 +132,11 @@ function draw_clock(){ shards[i].y = 50; } } - shards[i].add(); - shards[i].show(); + // If its still visble then add to the shard and show to screen + if(visible){ + shards[i].add(); + shards[i].show(); + } } var now = new Date(); // draw time. Have to draw time on every loop From b745553a79ef66b138f44150118ee962851897e9 Mon Sep 17 00:00:00 2001 From: adrian w kirk Date: Mon, 27 Sep 2021 21:20:45 +0100 Subject: [PATCH 04/11] Matrix clock: making speed of shards more constant by making the shards display themselves even when off screen --- apps/matrixclock/README.md | 6 ------ apps/matrixclock/matrixclock.js | 8 +++++--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/apps/matrixclock/README.md b/apps/matrixclock/README.md index c8c538139..010524b60 100644 --- a/apps/matrixclock/README.md +++ b/apps/matrixclock/README.md @@ -1,13 +1,7 @@ # Matrix Clock -Inspired by the Matrix, a clock in the same style - ![](app.png) -## Usage - - - ## Requests Please reach out to adrian@adriankirk.com if you have feature requests or notice bugs. diff --git a/apps/matrixclock/matrixclock.js b/apps/matrixclock/matrixclock.js index 713c5eecd..513fc12bb 100644 --- a/apps/matrixclock/matrixclock.js +++ b/apps/matrixclock/matrixclock.js @@ -91,7 +91,7 @@ function randomChar(){ // but randomize the x value and length every reset to make it look as if there // are more var shards = []; -const NO_SHARDS = 4; +const NO_SHARDS = 3; const channel_width = g.getWidth()/NO_SHARDS; function shard_x(i){ @@ -114,7 +114,7 @@ const TIME_X_COORD = 20; const TIME_Y_COORD = 100; const DATE_X_COORD = 170; const DATE_Y_COORD = 30; -const RESET_PROBABILITY = 0.8; +const RESET_PROBABILITY = 0.5; /** * main loop to draw the clock face */ @@ -135,8 +135,9 @@ function draw_clock(){ // If its still visble then add to the shard and show to screen if(visible){ shards[i].add(); - shards[i].show(); } + // we still have to show the shard even though it may be off the screen to keep the speed constant + shards[i].show(); } var now = new Date(); // draw time. Have to draw time on every loop @@ -279,3 +280,4 @@ setWatch(button1pressed, BTN1,{repeat:true,edge:"falling"}); // Handle button 3 being pressed setWatch(button3pressed, BTN3,{repeat:true,edge:"falling"}); + From f5adb2a03205a97292c161b079921ecee7d2d495 Mon Sep 17 00:00:00 2001 From: adrian w kirk Date: Mon, 27 Sep 2021 22:18:28 +0100 Subject: [PATCH 05/11] Matrix clock: taken out unneeded callbacks --- apps/matrixclock/matrixclock.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/apps/matrixclock/matrixclock.js b/apps/matrixclock/matrixclock.js index 513fc12bb..6350b1565 100644 --- a/apps/matrixclock/matrixclock.js +++ b/apps/matrixclock/matrixclock.js @@ -198,18 +198,6 @@ function format00(num){ return value.toString(); } -function button1pressed(){ - console.log("button 1 pressed"); -} - -function button3pressed(){ - console.log("button 3 pressed"); -} - -function load_settings(){ - console.log("load_settings called"); -} - // The interval reference for updating the clock let intervalRef = null; @@ -267,7 +255,6 @@ Bangle.on('faceUp',function(up){ }); g.clear(); -load_settings(); Bangle.loadWidgets(); Bangle.drawWidgets(); @@ -275,9 +262,4 @@ startTimers(); // Show launcher when middle button pressed setWatch(Bangle.showLauncher, BTN2,{repeat:false,edge:"falling"}); -// Handle button 1 being pressed -setWatch(button1pressed, BTN1,{repeat:true,edge:"falling"}); - -// Handle button 3 being pressed -setWatch(button3pressed, BTN3,{repeat:true,edge:"falling"}); From 3c35c1d26852e18b73f0e7e3ae19c8bccebc9a62 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Mon, 27 Sep 2021 23:03:59 +0100 Subject: [PATCH 06/11] Pastel: handle 12hr clock format, eg display 12:35 at noon intead of 00:35 --- apps/pastel/pastel.app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/pastel/pastel.app.js b/apps/pastel/pastel.app.js index 0c1d56118..9f9efd171 100644 --- a/apps/pastel/pastel.app.js +++ b/apps/pastel/pastel.app.js @@ -73,7 +73,8 @@ function draw() { // fix hh for 12hr clock var h2 = "0" + parseInt(hh) % 12 || 12; - hh = h2.substr(h2.length -2); + if (parseInt(hh) > 12) + hh = h2.substr(h2.length -2); var w = g.getWidth(); var h = g.getHeight(); From 4a84cefa3f349a2d241a0da76d7d308bbc1eb9e0 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Mon, 27 Sep 2021 23:23:57 +0100 Subject: [PATCH 07/11] updated descriptions of notify modules for clarity --- apps.json | 4 ++-- apps/notify/README.md | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/apps.json b/apps.json index 7a0fde795..d19365081 100644 --- a/apps.json +++ b/apps.json @@ -95,7 +95,7 @@ "shortName":"Notifications", "icon": "notify.png", "version":"0.10", - "description": "A handler for displaying notifications that displays them in a bar at the top of the screen", + "description": "Provides the default `notify` module used by applications to display notifications in a bar at the top of the screen. This module is installed by default by client applications such as the Gadgetbridge app. Installing `Fullscreen Notifications` replaces this module with a version that displays the notifications using the full screen", "tags": "widget", "type": "notify", "readme": "README.md", @@ -108,7 +108,7 @@ "shortName":"Notifications", "icon": "notify.png", "version":"0.11", - "description": "A handler for displaying notifications that displays them fullscreen. This may not fully restore the screen after on some apps. See `Notifications (default)` for more information about the notifications library.", + "description": "Provides a replacement for the `Notifications (default)` `notify` module that is used by applications to display notifications fullscreen. This may not fully restore the screen after on some apps. See `Notifications (default)` for more information about the notify module.", "tags": "widget,b2", "type": "notify", "storage": [ diff --git a/apps/notify/README.md b/apps/notify/README.md index f186aaab2..7b2473015 100644 --- a/apps/notify/README.md +++ b/apps/notify/README.md @@ -1,9 +1,8 @@ # Notifications (default) -A handler for displaying notifications that displays them in a bar at the top of the screen +The default version of the `notify` module for displaying notifications in a bar at the top of the screen -This is not an app, but instead it is a library that can be used by -other applications or widgets to display messages. +This module is installed by default by client applications such as Gadgetbridge. **Note:** There are other implementations of this library available such as `notifyfs` (Fullscreen Notifications). These can be used in the exact From ea731cd12f1f870f092e657458e1d82c54957cbf Mon Sep 17 00:00:00 2001 From: adrian w kirk Date: Tue, 28 Sep 2021 00:19:50 +0100 Subject: [PATCH 08/11] Matrix clock: converting deprecated setWatch call to setUI --- apps/matrixclock/matrixclock.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/apps/matrixclock/matrixclock.js b/apps/matrixclock/matrixclock.js index 6350b1565..0bf33fd68 100644 --- a/apps/matrixclock/matrixclock.js +++ b/apps/matrixclock/matrixclock.js @@ -223,12 +223,7 @@ function startTimers(){ } }, 100 ); - - if (shouldRedraw()) { - draw_clock(); - } else { - console.log("scheduleDrawClock - skipped redraw"); - } + draw_clock(); } else { console.log("scheduleDrawClock - skipped not visible"); } @@ -259,7 +254,6 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); startTimers(); -// Show launcher when middle button pressed -setWatch(Bangle.showLauncher, BTN2,{repeat:false,edge:"falling"}); +Bangle.setUI("clock"); From 4c6d9908848a9d59b1bc0819cad5ba8bd46d4568 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Tue, 28 Sep 2021 00:29:26 +0100 Subject: [PATCH 09/11] updated description of Notifications Fullscreen --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index d19365081..fea2f6920 100644 --- a/apps.json +++ b/apps.json @@ -108,7 +108,7 @@ "shortName":"Notifications", "icon": "notify.png", "version":"0.11", - "description": "Provides a replacement for the `Notifications (default)` `notify` module that is used by applications to display notifications fullscreen. This may not fully restore the screen after on some apps. See `Notifications (default)` for more information about the notify module.", + "description": "Provides a replacement for the `Notifications (default)` `notify` module. This version is used by applications to display notifications fullscreen. This may not fully restore the screen after on some apps. See `Notifications (default)` for more information about the notify module.", "tags": "widget,b2", "type": "notify", "storage": [ From 760d89ca02070a7159f1405d5441f5589db4484f Mon Sep 17 00:00:00 2001 From: hughbarney Date: Tue, 28 Sep 2021 00:35:10 +0100 Subject: [PATCH 10/11] bumped version and Changelog for pastel 0.02 --- apps.json | 2 +- apps/pastel/ChangeLog | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index fea2f6920..d67806a3f 100644 --- a/apps.json +++ b/apps.json @@ -3507,7 +3507,7 @@ "name": "Pastel Clock", "shortName": "Pastel", "icon": "pastel.png", - "version":"0.01", + "version":"0.02", "description": "A Configurable clock with custom fonts and background", "tags": "clock,b2", "type":"clock", diff --git a/apps/pastel/ChangeLog b/apps/pastel/ChangeLog index 7b83706bf..4b99fd7c1 100644 --- a/apps/pastel/ChangeLog +++ b/apps/pastel/ChangeLog @@ -1 +1,2 @@ 0.01: First release +0.02: Display 12 hour clock as 12:xx not 00:xx when just into PM From d1d55ad1cfdeaa5547d4b627620e17bf81b5f53e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 28 Sep 2021 10:09:13 +0100 Subject: [PATCH 11/11] 0.11: Fix regression that caused no notifications and corrupted background --- apps.json | 2 +- apps/notify/ChangeLog | 1 + apps/notify/notify.js | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index 7a0fde795..36e2cf94e 100644 --- a/apps.json +++ b/apps.json @@ -94,7 +94,7 @@ "name": "Notifications (default)", "shortName":"Notifications", "icon": "notify.png", - "version":"0.10", + "version":"0.11", "description": "A handler for displaying notifications that displays them in a bar at the top of the screen", "tags": "widget", "type": "notify", diff --git a/apps/notify/ChangeLog b/apps/notify/ChangeLog index d1826f57e..8803b82b6 100644 --- a/apps/notify/ChangeLog +++ b/apps/notify/ChangeLog @@ -7,3 +7,4 @@ 0.08: Don't turn on screen during Quiet Mode 0.09: Add onHide callback 0.10: Improvements to help notifications work with themes +0.11: Fix regression that caused no notifications and corrupted background diff --git a/apps/notify/notify.js b/apps/notify/notify.js index 4448de73b..332c301d5 100644 --- a/apps/notify/notify.js +++ b/apps/notify/notify.js @@ -94,9 +94,8 @@ exports.show = function(options) { y = 320-size, h = size, b = y+h-1, r = x+w-1; // bottom,right - g.setClipRect(x,y, r,b); // clear area - g.reset(); + g.reset().setClipRect(x,y, r,b); if (options.bgColor!==undefined) g.setColor(options.bgColor); g.clearRect(x,y, r,b); // bottom border