From 9faaca321476bd283ee841ce162f65b37b249a4c Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 11:38:27 +0100 Subject: [PATCH 01/48] Performance improvements: Render left side + lines. Also new designed colors. --- apps/lcars/bg_large.png | Bin 11003 -> 0 bytes apps/lcars/bg_left.png | Bin 0 -> 795 bytes apps/lcars/bg_small.png | Bin 8753 -> 0 bytes apps/lcars/lcars.app.js | 121 +++++++++++++++++++++++++++++----------- 4 files changed, 89 insertions(+), 32 deletions(-) delete mode 100644 apps/lcars/bg_large.png create mode 100644 apps/lcars/bg_left.png delete mode 100644 apps/lcars/bg_small.png diff --git a/apps/lcars/bg_large.png b/apps/lcars/bg_large.png deleted file mode 100644 index 56590e87891ec7908e31984aebc50db7ce8b3e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11003 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 SvI(%(E+8wZBvCGA;Qt@rL=Hy) diff --git a/apps/lcars/bg_left.png b/apps/lcars/bg_left.png new file mode 100644 index 0000000000000000000000000000000000000000..91c2bb6f7b7f83376ff41b83632819f239358246 GIT binary patch literal 795 zcmV+$1LXXPP)Lu@Z};XF?e>1+Kn$_>ce=9Pi+wv|?prf!_UgoA*PqAR;0Q5z%b*wr#QIW|?7DXB`WO z%tr&|L5E%C#LQ2Gh*GsW#jLp5NE($b9rB=*a#ddue-I}cpM(`96HM6pf*hi&({4!# zMnqIzE`A7dh_+UHE+@9(jS&b)WnUrf;lz`gzuxi#RaLe{Ro#&k>|I5LbwO22-LBT& z%>Wz1-c(obJ#qa0$E^Y@ldu~lk?60fImZnV#jPx=>v@_Mp5#Unu#tv_i~{G~Z(NOI zG5vxo9PUoQUio}kCq3`sdd!7sTDWhhu5Onh=IrWPhzwpU;R25w4SpG{tjt-f_GcQ3>bghM!iN9H z!jV;@SAT8oA$M`hSV}M=qNuKCYg%|ZCD?KX{QiPtC83d&V9R;k*r;0O<}SKjtq-?~ Z{RF94z^`^=I%EI<002ovPDHLkV1n^vZ1eyC literal 0 HcmV?d00001 diff --git a/apps/lcars/bg_small.png b/apps/lcars/bg_small.png deleted file mode 100644 index ea3a756888509f49fdb11944cf1318fadb0d30a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8753 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 diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 859e999a5..1f6448bb4 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -17,15 +17,29 @@ for (const key in saved_settings) { } let hrmValue = 0; +/* + * Colors to use + */ +let cBlue = "#0094FF"; +let cOrange = "#FF9900"; +let cPurple = "#FF00DC"; +let cWhite = "#FFFFFF"; + /* * Requirements and globals */ const locale = require('locale'); -var backgroundImage = { - width : 176, height : 151, bpp : 3, - transparent : 2, - buffer : require("heatshrink").decompress(atob("AAdx48cATsAg4daIAX3799ATv2wEFDrUAgNHQDyDghaAeQcJKG86D4gRKGgAA4jxKFuBB5iaDF6BB5ZwyD6QAYCC4CD/Qf6Dzg/gQf8H/iD/n//wCD9gP///wQfpBKQf6D4h5BB/yD8jl/IIIABjiD5n4/DAAWAQe8B//8QYfHj//PAaDzHwICCAAP4gYCBQep6DIIYFBRgKD1j/+gB9BQYYKBn/gQen/+BBFQAUH/iDzGoZBHJoOAQeRBDj5BHj6PB0WKlACDJQIAofYZBFBAZBBAGMHPQZB8QYZAEIIcDIOiDI/hB3QZBBFjlx44CDuBBpg4DCIJEfIIPnz15AQeAQeH8gIDBGoJBCnnz54CDZ1UHPQMHIIUAIIKD3II6MBQYQCCQeI1B+BBC/BKCBASGCQeK5B/xBC4BKEn/gAoKDyj//45BFj/xZYSDzgF/IAP+JQrLCQecAgKDBF4cHQYKJDQecAn6EBAAiJEQeZBB/jICAAMcvwMDQevgQwR0CIIiDzgP/BA1/4CD3nAHGhyD3ABqD0ABiD/Qf4ADjiD/gEnQYuQQf6D7gaDFzxB5gFzQYnz4BB5hyDFATfkEoIdagEBQYoCcgEHDrReBhKDhwEBQbYABjiD/AH4A/AH4AGiFx48cATsAg4daIIWSpMkATuQEbkAgJfbQckJQDyDhZxQA1gRKFpBA4gEQQYtwIPMSQYtAIPKADQfqADAQRA5Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf4A/AH4A/AH4A/AFkcuPHAQdAIPOSpMkAQaD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf4A/AH4A/AH4A/AGUcuPHAQdwIPOSpMkAQaD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf4AciSDFoCD/QfcCQYtIIPMAQYoC6gEJQYgC6gEBQf7HCQf4ABiiD9")) +var backgroundImage = { + width : 27, height : 176, bpp : 3, + transparent : 0, + buffer : require("heatshrink").decompress(atob("AAUM2XLlgCCwAJBBAuy4EAmQIF5cggAIGlmwgYIG2XIF42wF4ImGF4ImHJoQmGJoQdJhZNHNY47CgRNGBIJZHHgRiGBIRQ/KH5QCAFCh/eX5Q/KAwdCAGVbtu27YCCoAJBkuWrNlAQRGCiwRDAQPQBIMJCIYCBsAJBgomEtu0WoQmEy1YBIMBHYttIwQ7FyxQ/KHFlFAQ7F2weCHYplKChRTCCg5TCHw5TMAD0GzVp0wCCBBGaBIMaBAtpwECBA2mwEJBAugDgMmCIwJBF5EABAtoeQQvGCYQdPJoI7LMQzTCLJKAGzAJBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A==")) +} + +var logo = { + width : 56, height : 56, bpp : 1, + transparent : 0, + buffer : require("heatshrink").decompress(atob("AAUEAwsOAwseAwsfAws/AwtzwAGEuIGF8PgAocH8H4AwcP4H+FAnAv4cDveAufAAwXzwFxEYUB4cAmFwAwMDw8AnE4F4UGgEYjBmCM4McjgGEhhxCBQUMC4IYBAwMOg4GBnAfBgwGCmAtBg8DAwxUBuEwIIIGDJIMDwYGCsAGBwIGBsAGBgIGDMoMB4IGIuB6C4YGBuIGJ8YGBmOAgPgsYJBAwMH+AGCneAh84u4GBjeAPAIGCcgM4hk+YQQ5BhwGE8EHninCgPAgYGCgxzBge4AwSPBgLnCVwQGEU4MH/gGCn+An98AwV///+AwUMuP/+AwChngJwIGCh52CjxaCPIIfBAxICBJIIXEAAb+CACA")) } var iconEarth = { @@ -91,10 +105,10 @@ Graphics.prototype.setFontAntonioSmall = function(scale) { } Graphics.prototype.setFontAntonioLarge = function(scale) { - // Actual height 34 (34 - 1) - g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAADwAAAAAeAAAAADwAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAD+AAAAH/wAAAP/+AAAf/+AAA//8AAB//4AAD//wAAD//gAAAf/AAAAD+AAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAB////gA/////AP////8D/////wfAAAA+DwAAADweAAAAeDwAAADwf////+D/////wP////8Af///+AAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAOAAAAADwAAAAAeAAAAAHgAAAAB/////wf////+D/////wf////+D/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAPwH/4AP+B//AH/wf/4D/+D4AB/9weAAf4ODwAP8BweAP/AOD///gBwP//wAOA//4ABwB/4AAOAAAAAAAAAAAAAAAAAAAAB8AA/gA/gAH/AP8AA/8D/gAH/wfAHAA+DwA4ADweAHgAeDwB8ADwf7/+H+D/////gP/9//8A//H/+AA/AH/AAAAAAAAAAAAAAAAAABwAAAAD+AAAAD/wAAAH/+AAAH/5wAAH/wOAAP/gBwAP/gAOAD/////wf////+D/////wf////+AAAABwAAAAAOAAAAABwAAAAAAAAAAAAAAAAAAeAD//4D/Af//Af8D//4D/wf//Af+DwPAADweB4AAeDwPAADweB///+DwP///weA///8DwD//+AAAA/8AAAAAAAAAAAAAAAAAAAAAA////AA/////AP////8D/////wfgPAB+DwB4ADweAOAAeDwBwADwf+PAA+D/x///wP+H//8A/wf//AAAA//gAAAAAAAAAAAAADgAAAAAeAAAAADwAAAAAeAAAD+DwAAP/weAA//+DwA///weB///8Dx//8AAf//wAAD//gAAAf/AAAAD/AAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAD/wf/wB//v//AP////8D/////weAPwAeDwA8ADwcAHAAeDwB8ADwf////+D/////wP/9//8A//H//AA/AD/AAAAAAAAAAAAAAAAAAAAAD//gfAA///D/AP//8f8D///j/weAA8A+DwADgDweAAcAeDwAHgDwf////+B/////gP////8Af///+AAP//4AAAAAAAAAAAAAAAAAAAAAAD4AfAAAfAD4AAD4AfAAAfAD4AAD4AfAAAAAAAAAAAAAA=="), 46, atob("Cg4QEBAQEBAQEBAQCQ=="), 39+(scale<<8)+(1<<16)); -} + // Actual height 39 (39 - 1) + g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAPgAAAAAB8AAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAD8AAAAAH/gAAAAP/8AAAAf//gAAA///AAAB//+AAAD//8AAAH//4AAAP//wAAAB//gAAAAP/AAAAAB+AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAf////8AP/////4B//////Af/////8D8AAAAfgeAAAAA8DwAAAAHgeAAAAA8D//////gf/////8B//////AP/////wAf////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAHgAAAAAA8AAAAAAPgAAAAAB4AAAAAAf/////gP/////8B//////gP/////8B//////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAD/+AAP8A//wAP/gP/+AH/8D//wD//gfgAA//8DwAAf+HgeAAP/A8DwAH/gHgfgP/wA8D///4AHgP//+AA8A///AAHgB//AAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AA/gAD/AAH/gA/4AA/+AP/AAH/4D/4AA//gfgA4AB8DwAPAAHgeAB4AA8DwAPgAHgfAD+AB8D//////gP/////4B//5//+AD/+H//gAH/AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAP/AAAAAP/4AAAAP//AAAAP/x4AAAf/wPAAAf/gB4AAf/AAPAAP/AAB4AB//////gP/////8B//////gP/////8AAAAAPAAAAAAB4AAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wD/AB///Af+AP//4D/4B///Af/gP//4B/8B4D4AAPgPAeAAA8B4DwAAHgPAfAAB8B4D////gPAf///4B4B////APAD///gAAAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///AAAP////4AH/////wB//////Af/////8D8APAA/geADwAB8DwAeAAHgeADwAA8D4AeAAPgf/j+AH8B/8f///gP/h///4Af8H//+AAPgP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAPAAAAAAB4AAAABgPAAAA/8B4AAB//gPAAD//8B4AH///gPAH///8B4P//+AAPH//wAAB///gAAAP//AAAAB/+AAAAAP+AAAAAB+AAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4A/+AAf/w//+AP//v//4B//////Af/////8D4AfwAPgeAB8AA8DwAHAAHgeAB8AA8D4Af4APgf/////8B//////AP//v//4A//4//8AA/4A/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAD//+D/gB///4f+AP///j/4D///8f/gfAAHgB8DwAA8AHgeAAHgA8DwAA8AHgfgAHgB8D//////gP/////4A/////+AD/////gAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAfgAAB+AD8AAAPwAfgAAB+AD8AAAPwAfgAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DBATExMTExMTExMTCw=="), 45+(scale<<8)+(1<<16)); +} /* * Draw watch face */ @@ -135,6 +149,25 @@ function printData(key, y){ } } +function drawHoriztonatlBgLine(color, x1, x2, y, h){ + g.setColor(color); + + for(var i=0; i{ // Show launcher when middle button pressed Bangle.setUI("clock"); -// Load widgets - needed by draw Bangle.loadWidgets(); +/* + * we are not drawing the widgets as we are taking over the whole screen + * so we will blank out the draw() functions of each widget and change the + * area to the top bar doesn't get cleared. + */ +for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";} // Clear the screen once, at startup and draw clock g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear(); draw(); // After drawing the watch face, we can draw the widgets -Bangle.drawWidgets(); \ No newline at end of file +// Bangle.drawWidgets(); \ No newline at end of file From a6d87a561c1aa9d05f453490d5845b9094ef5309 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 12:06:20 +0100 Subject: [PATCH 02/48] Minor improvements --- apps/lcars/lcars.app.js | 154 +++++++++++++++++++--------------------- 1 file changed, 75 insertions(+), 79 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 1f6448bb4..4bf73057b 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -43,48 +43,41 @@ var logo = { } var iconEarth = { - text: "EARTH", width : 50, height : 50, bpp : 3, buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) } var iconSaturn = { - text: "SATURN", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4A/AEkQuPHCJ0ChEAwARNjAjBjgjOhs06Q2OEYVx4ARMhEggUMkANIDoIgBoEEgEBNxJEC6ZrBAAMwNxAjDNYcHNxIjB7dtEwIHBwRoKj158+cuPEjlwCRAjC23bpu0wRNDAAsHEYWeEwaSJ6YjCAQUNSRQjEzxQBWZMNEYlsmg2JWAIjCz95SoJuJggjDtuw6dMG5JKCz998wFBJRVNEYW0yaVBJRNhJQN9+4pCzhKJmBKC4YpB/fINxIgCzFxSoQ3J4ENm3CAQPb98wbpEcAQMYWwKYBNxMDXgc2/fv3g2IEAOAgAjBjy5CEhEMfYICBgfPnjdLjj+CgMHiC3JknDhhoINw4jCAB0IJQIANR4QjPAH4A/AFA")) } var iconMoon = { - text: "MOON", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4AQjlx44CCCZsg8eOkHDwAQKEYgmPhEgEQM48AOIgMHEYoCB4ATI8UAmH/x04JoRuJsImHuBKLn37EwZuIgEQOI8cEpXj/yYBhE8+YNGgkYoJxITBUPnAaC///nC+FjBuIOJZEB8YeCh/8AoYACoMEEAnEjhQDPQJKJ/DCDAoi5DoLdHAoMQgLjFWYPOnngh02IwXzwDjEgPGEYS8BI4MBYoSVG4fP/nghkAgZrDkngJQqSG4gvBg4sBQgkImHihEAWwP8ZBMBEYl5/+cSoVAGQIUFh04weJn///0gj/OEw5KEz45BzhuCTYQAEgePB4IACAoJuBnAQEa4XHjxKB//xFgWHJQsCRgMDEonipwjENwUBDQNx8+evvn/hTDLw3igE+EgZxB8UOXIvEJQUfEYOfv53DEQkgga5BJQvzx84cAj+CDoNh8/eEYJKDuCSEcocnEon+/7xEgFBIIcfB4Mf/IICXI2DgDdBAAn758gCIq5Dv4zBvJuIOIfjEgvP/ARHgwdCB4P3AoTdFAAk4EYk8SQgAFTALaDSQwAGh08//vnDmBABYmEEZYAzA==")) } var iconMars = { - text: "MARS", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4ATjlwCJ+Dh0wwAQMg0cuPHjFhCZkDps0yVJkmQCBMEjFx42atOmzQmLhMkEYQCCCREQoOGEYmmzB0IEY4CBkARGoJKBEYQCEzgSGkGSpAjDyYCCphuGiFhJQgCD8ASFgRHGAQKbB6BuHJRGeOIsINxEk6dNmARDgMEjQjHAQPnVQojIyZKB6YSDNwK5FAQt54BuDXJIjBEwK5EgxKKXgq5BJRdgXIojJAQJKMcAM0EwM2JUApDoCVFExa7FkGCgAmIkAREEwUEjAmHCIgABhEggQmFpACBCIojBEwRQCzVhwkQU4YADgQmBwQCCI4IFBCAojFAQojGJQQjDAQgRGEZICBEo4gFyUIkilFJQUYEAZrBAQMYNw5KDSQSbCNwwABgOGEwgCBsPACQ5xGwdNnARJcAVh48evvnCJK8Chs+/fv33gCRcB48cuPHCBYA/ADAA==")) } var iconSatellite = { - text: "GPS ON", width : 50, height : 50, bpp : 3, transparent : 2, buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA=")) } var iconAlarm = { - text: "TIMER", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("kmSpICEp//BAwCJn/+CJ8k//5CKAABCJs8uPH//x48EI5YjCAARNKEYUcv//jgFBExEnEYoAC+QmHIgIgC/gpCuPBCI2fIgU4AQXjA4P8CIuTEYZKBAolwHApXBEAWP//jxwpBAALaFDoYCIiQmDDIP4EAT+CEwnJEwYjLAQLaFEYomDKALmDNwoCIOIZuD8AkFgCYDHAQjMAQTdDNwOAEg0Dx0/cYeREZtxQYOTHgJuHOIvkXJy8DNwIACJQ8Ah4NDAAfxEZARHOIIkHg4jQAQb1CQ4KVJgEOnDIBSoIjNAQPBcAaVJcAKVBcDGOcD7OBMQM48BuH8f//JKCnhKNggRBkmfTQJxBEwhuD/gRCyVHJRlyCIVJXgYmB8ZQBAoIKBXIQmCOIt/NxAUCOIImCIgIpCBAJuDAQZEE/huIAQWTDgImBTYQGC8gRFcYpKFCI8kDwQAFCJBfBEAX/+IjBiQRIEw4jJAQc8v//NYwCIOgJrIJpA1OcwbaFAQWQA=")) } var iconCharging = { - text: "CHARGE", width : 50, height : 50, bpp : 3, transparent : 5, buffer : require("heatshrink").decompress(atob("23btugAwUBtoICARG0h048eODQYCJ6P/AAUCCJfbo4SDxYRLtEcuPHjlwgoRJ7RnIloUHoYjDAQfAExEAwUIkACEkSAIEYwCBhZKH6EIJI0CJRFHEY0BJRWBSgf//0AJRYSE4BKLj4SE8BKLv4RD/hK/JS2AXY0gXwRKG4cMmACCJQMAg8csEFJQsBAwfasEAm379u0gFbcBfHzgFBz1xMQZKBjY/D0E2+BOChu26yVEEYdww+cgAFCg+cgIfB6RKF4HbgEIkGChEAthfCJQ0eEAIjBBAMxk6GCJQtgtyVBwRKBAQMbHAJKGXIIFCgACBhl54qVG2E+EAJKBJoWAm0WJQ6SCXgdxFgMLJQvYjeAEAUwFIUitEtJQ14NwUHgEwKYZKGwOwNYX7XgWCg3CJQ5rB4MevPnAoPDJRJrCgEG/ECAoNsJRUwoEesIIBiJKI3CVDti/CJRKVDiJHBSo0YsOGjED8AjBcAcIgdhcAXAPIUAcAYIBcA4dBAQUG8BrBgBuCgOwcBEeXIK2BBAIFBgRqBGoYAChq8CcYUE4FbUYOACQsHzgjDgwFBCIImBAQsDtwYD7cAloRI22B86YBw5QBgoRJ7dAgYEDCJaeBJoMcsARMAQNoJIIRE6A")) @@ -100,15 +93,15 @@ var iconNoBattery = { // Font to use: // Graphics.prototype.setFontAntonioSmall = function(scale) { - // Actual height 18 (17 - 0) - g.setFontCustom(atob("AAAAAAAAAAAAAAAf4Mf/sYAMAAAAAAfgAfAAAAAfgAeAAAAAAiAAj8H/4fyEAv8f/gfiAAgAAAAD54H98eOPHn8Hz8AhwAAAP8Af+AYGAYCAf+AP8MAB8AHwA+AD4AfAAcf4A/8AwMAwMA/8Af4AAAAAwGD8f/8f8MY/cfz4PD8AHMAAAfAAeAAAAAAAAP/+f//YADAAAQABYADf//P/+AAAAAANAAPAAfwAfgAPAANAAAAAAEAAEAA/AA/AAEAAEAAAAAAZAAfAAYAAAAIAAIAAIAAIAAAAAAAAAMAAMAAAAAAAAEAB8Af4H+AfwAcAAAAAP/4f/8YAMf/8f/8H/wAAAAAAEAAMAAf/8f/8f/8AAAAAAAAAHgcfh8cH8YPMf8MPwEAAAAAAOB4eB8YYMY4Mf/8Pn4AAAAAgAHwA/wPwwf/8f/8AAwAAgAAAf54f58ZwMZwMY/8Qf4AAAAAAP/4f/8YYMYYMff8HP4AAAQAAYAAYD8Y/8f/AfgAcAAAAAAAAPv4f/8YYMY8Mf/8Pn4AAAAAAP94f98YGMcMMf/8H/wAAAAAABgwBgwAAAAAABgABg/Bg8AAAAEAAOAAbAA7gAxgBwwASAAbAAbAAbAAbAASAAAAAxwA5gAbAAPAAOAAAAPAAfHcYPcf8Af4AHgAAAAAAAB/gH/wOA4Y/MZ/sbAsbBkb/MZ/sOBsH/AAAAAAMAP8f/4fwwf4wH/8AH8AAMAAAf/8f/8YYMYYMf/8P/4ADgAAAP/4f/8YAMYAMfj8Pj4AAAAAAf/8f/8YAMYAMf/8P/4B/AAAAf/8f/8YMMYMMYIMAAAAAAf/8f/8YYAYYAYYAAAAAAAP/4f/8YAMYIMfP8Pv8AAAAAAf/8f/8AMAAMAf/8f/8f/8AAAAAAf/8f/8AAAAAAAD4AB8AAMf/8f/4f/gAAAAAAf/8f/8A+AD/gfj4eA8QAEAAAf/8f/8AAMAAMAAMAAAf/8f/8f8AB/wAB8AP8P/Af/8f/8AAAAAAf/8f/8HwAA+AAPwf/8f/8AAAAAAP/4f/8YAMYAMf/8P/4AAAAAAf/8f/8YGAYGAf8AP8ABAAAAAf/w//4wAYwAc//+f/yAAAAAAf/8f/8YMAYMAf/8f/8DA8CAAPj4fz8Y4MeeMfP8HD4YAAYAAf/8f/8YAAQAAAAAf/4f/8AAMAAMf/8f/4AAAYAAf4AP/4AP8AP8f/4fwAQAAYAAf8AP/8AD8D/8f8Af8AD/8AD8f/8f8AAAAQAEeB8P/4B/AP/4fA8QAEYAAfAAP4AB/8H/8fwAcAAAAMYD8Y/8f/MfwMcAMAAAf/+f//YADYADAAAAAAfAAf8AB/wAH8AAMQACYADf//f//AAAAA"), 32, atob("BAUHCAcTCAQFBQgGBAYFBggICAgICAgICAgEBQYGBggNCAgICAcHCAkECAgGCwkICAgIBwYICAwHBwYGBgY="), 18+(scale<<8)+(1<<16)); + // Actual height 20 (19 - 0) + g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAA//mP/5gAAAAAAAAAAAAA/gAMAAAAAA/gAPAAAEIIBP+H/8D+IYBP+H/8D+IABCAAwIAfnwP8+PHh448eP3+B4fAAAAAAAH/AD/4AwGAMBgD/4Af8GAAPgAPgAfgAfAAfAA+AAOP/AH/4BgGAYBgH/4A/8AAAAAAAAAQAA/B+f4/+GMPhjv/4/h8Dg/gAcYwAAPwADgAAAAAAAAB//8///sAAaAACAAAMAAb//+f//AAAAAAAbAAGwAA4AA/wADgABsAAbAAAAAAAgAAMAAPwAD8AAMAADAAAAAAAAAAHAAB/AAOAAAAAAAAMAADAAAwAAMAACAAAAAAAAAABgAAYAAAAAAAAA4AD+AP+A/4A/gAOAAAAAAAAAH//j//8wADMAAz//8f/+AAAAAAAMAADAABgAA//+P//gAAAAAAAAAAAAAfgfP4fzAfswfDP/gx/gMAAAHgPj4D8wMDMHAz//8f3+AAEAAAAADwAH8APzA/AwP//j//4AAwAAAD/Hw/x+MwBjOAYz/+Mf/AAAAAAAH//j//8wYDMGAz9/8fP+AAcDAAAwAAMAfjB/4z/wP+AD4AAwAAAAOB/f4///MHAzBwM///H9/gAAAAAAH/Pj/78wGDMBgz//8f/+AAAAAAADhwA4cAAAAAAAAAAAAAADh/A4fgAAAAOAAHwABsAA7gAccAGDAAAAANgADYAA2AANgADYAA2AAAAAAAABgwAccADuAAbAAHwAA4AAAAHwAD8c4/POMHAD/wAfwAAAAAAAAD/wD//B4B4Y/HMf8zMBMyATMwczP+M4BzHwcgf+AA+AAAAAAD4A/+P/8D+DA/4wH/+AB/4AAeAAAAAAA//+P//jBgYwYGP//j//4PH4AAAAAAAf/+P//zgAcwADP4fz+P4Ph8AAAAAAA//+P//jAAYwAGPADj//4P/4AAAAAAA//+P//jBgYwYGMGBgAAAAAAP//j//4wYAMGADBgAAAAAAAA//w///PAHzAQM4MHP7/x+/8AAAAAAD//4//+AGAABgAAYAP//j//4AAAAAAAAAA//+P//gAAAAAAAAAAAHwAB+AABgAAY//+P//AAAAAAAAAAD//4//+APgAf+Afj8PgPjAAYAAAAAAD//4//+AABgAAYAAGAAAAAAA//+P//j/gAD/wAB/gAP4B/4P/AD//4//+AAAAAAAAAAP//j//4P4AAfwAA/g//+P//gAAAAAAAAAA//g//+PAHjAAY4AOP//h//wAAAAAAD//4//+MDADAwA4cAP/AB/gAAAAAAAA//g//+PAHjAAc4APv//5//yAAAAAAD//4//+MGADBgA48AP//h+f4AAAAAAB+Pw/z+MOBjBwY/P+Hx/AAHgwAAMAAD//4//+MAADAAAAAAP//D//4AAOAABgAA4//+P//AAAAwAAP8AD//AA/+AAfgP/4//gPwAAAAA+AAP/4Af/4AD+A//j/wA/wAD/+AA/4B/+P/+D+AAAAAMADj8P4P/4A/4B//w+A+MABgAAA4AAPwAB/gAB/+A//j/gA+AAMAAAAAYwB+MH/jf+Y/8GPwBjAAAAAAP//7//+wABsAAYAAAAAAPAAD/gAH/gAD/gAD4AACAAADAAGwABv//7//+AAAA=="), 32, atob("BQUHCAgVCQQFBQkHBQcFBwgICAgICAgICAgFBQcHBwgPCQkJCQcHCQoFCQkHDQoJCQkJCAYJCQ0ICAcGBwY="), 20+(scale<<8)+(1<<16)); } Graphics.prototype.setFontAntonioLarge = function(scale) { // Actual height 39 (39 - 1) g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAPgAAAAAB8AAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAD8AAAAAH/gAAAAP/8AAAAf//gAAA///AAAB//+AAAD//8AAAH//4AAAP//wAAAB//gAAAAP/AAAAAB+AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAf////8AP/////4B//////Af/////8D8AAAAfgeAAAAA8DwAAAAHgeAAAAA8D//////gf/////8B//////AP/////wAf////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAHgAAAAAA8AAAAAAPgAAAAAB4AAAAAAf/////gP/////8B//////gP/////8B//////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAD/+AAP8A//wAP/gP/+AH/8D//wD//gfgAA//8DwAAf+HgeAAP/A8DwAH/gHgfgP/wA8D///4AHgP//+AA8A///AAHgB//AAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AA/gAD/AAH/gA/4AA/+AP/AAH/4D/4AA//gfgA4AB8DwAPAAHgeAB4AA8DwAPgAHgfAD+AB8D//////gP/////4B//5//+AD/+H//gAH/AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAP/AAAAAP/4AAAAP//AAAAP/x4AAAf/wPAAAf/gB4AAf/AAPAAP/AAB4AB//////gP/////8B//////gP/////8AAAAAPAAAAAAB4AAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wD/AB///Af+AP//4D/4B///Af/gP//4B/8B4D4AAPgPAeAAA8B4DwAAHgPAfAAB8B4D////gPAf///4B4B////APAD///gAAAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///AAAP////4AH/////wB//////Af/////8D8APAA/geADwAB8DwAeAAHgeADwAA8D4AeAAPgf/j+AH8B/8f///gP/h///4Af8H//+AAPgP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAPAAAAAAB4AAAABgPAAAA/8B4AAB//gPAAD//8B4AH///gPAH///8B4P//+AAPH//wAAB///gAAAP//AAAAB/+AAAAAP+AAAAAB+AAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4A/+AAf/w//+AP//v//4B//////Af/////8D4AfwAPgeAB8AA8DwAHAAHgeAB8AA8D4Af4APgf/////8B//////AP//v//4A//4//8AA/4A/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAD//+D/gB///4f+AP///j/4D///8f/gfAAHgB8DwAA8AHgeAAHgA8DwAA8AHgfgAHgB8D//////gP/////4A/////+AD/////gAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAfgAAB+AD8AAAPwAfgAAB+AD8AAAPwAfgAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DBATExMTExMTExMTCw=="), 45+(scale<<8)+(1<<16)); - } + /* * Draw watch face */ @@ -128,21 +121,21 @@ function printData(key, y){ if(key == "Battery"){ var bat = E.getBattery(); g.drawString("BAT:", 30, y); - g.drawString(bat+ "%", 68, y); + g.drawString(bat+ "%", 70, y); } else if(key == "Steps"){ var steps = getSteps(); g.drawString("STEP:", 30, y); - g.drawString(steps, 68, y); + g.drawString(steps, 70, y); } else if(key == "Temp."){ var temperature = Math.floor(E.getTemperature()); g.drawString("TEMP:", 30, y); - g.drawString(temperature + "C", 69, y); + g.drawString(temperature + "C", 70, y); } else if(key == "HRM"){ g.drawString("HRM:", 30, y); - g.drawString(hrmValue, 69, y); + g.drawString(hrmValue, 70, y); } else { g.drawString("NOT FOUND", 30, y); @@ -158,15 +151,41 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ } -Bangle.on('lock', function(isLocked) { +function drawLogo(){ if(Bangle.isLocked()){ - g.setColor(cPurple); + g.setColor(cWhite); } else { g.setColor(cBlue); } g.drawImage(logo, 120, 10); -}); +} +function drawState(){ + g.setColor(cOrange); + var bat = E.getBattery(); + var timeInMinutes = getCurrentTimeInMinutes(); + + var iconImg = + isAlarmEnabled() ? iconAlarm : + Bangle.isCharging() ? iconCharging : + bat < 30 ? iconNoBattery : + Bangle.isGPSOn() ? iconSatellite : + timeInMinutes % 4 == 0 ? iconSaturn : + timeInMinutes % 4 == 1 ? iconMars : + timeInMinutes % 4 == 2 ? iconMoon : + iconEarth; + g.drawImage(iconImg, 120, 120); + + // Alarm within symbol + g.setFontAlign(-1, -1, 0); + g.setFontAntonioSmall(); + g.drawString("STATUS", 123, 97); + if(isAlarmEnabled() > 0){ + g.setFontAlign(0, 0, 0); + g.setColor(cWhite); + g.drawString(getAlarmMinutes(), 120+25, 120+25+1); + } +} function draw(){ @@ -181,28 +200,22 @@ function draw(){ g.drawImage(backgroundImage, 0, 0); drawHoriztonatlBgLine(cBlue, 35, 120, 0, 4); drawHoriztonatlBgLine(cBlue, 130, 176, 0, 4); - drawHoriztonatlBgLine(cPurple, 35, 120, 81, 3); - drawHoriztonatlBgLine(cPurple, 130, 176, 81, 3); - drawHoriztonatlBgLine(cOrange, 35, 120, 87, 3); - drawHoriztonatlBgLine(cOrange, 130, 176, 87, 3); - drawHoriztonatlBgLine(cOrange, 35, 176, 173, 3); + drawHoriztonatlBgLine(cPurple, 35, 110, 81, 3); + drawHoriztonatlBgLine(cPurple, 120, 176, 81, 3); + drawHoriztonatlBgLine(cOrange, 35, 110, 87, 3); + drawHoriztonatlBgLine(cOrange, 120, 176, 87, 3); + drawHoriztonatlBgLine(cOrange, 20, 176, 172, 4); // Draw logo - if(Bangle.isLocked()){ - g.setColor(cPurple); - } else { - g.setColor(cBlue); - } - g.drawImage(logo, 120, 10); - + drawLogo(); // Write time - g.setColor(cBlue); + g.setColor(cWhite); g.setFontAlign(-1,-1, 0); var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 25, 12); + g.drawString(timeStr, 28, 12); // Write date g.setColor(cPurple); @@ -210,43 +223,22 @@ function draw(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 30, 60); - g.setColor("#FFFFFF"); + g.drawString(dayStr, 35, 60); // Draw data - g.setColor(cOrange); - printData(settings.dataRow1, 98); - printData(settings.dataRow2, 121); - printData(settings.dataRow3, 144); + g.setColor(cWhite); + printData(settings.dataRow1, 97); + printData(settings.dataRow2, 122); + printData(settings.dataRow3, 147); - // Draw symbol - g.setColor(cOrange); - var bat = E.getBattery(); - var timeInMinutes = getCurrentTimeInMinutes(); - - var iconImg = - isAlarmEnabled() ? iconAlarm : - Bangle.isCharging() ? iconCharging : - bat < 30 ? iconNoBattery : - Bangle.isGPSOn() ? iconSatellite : - timeInMinutes % 4 == 0 ? iconSaturn : - timeInMinutes % 4 == 1 ? iconMars : - timeInMinutes % 4 == 2 ? iconMoon : - iconEarth; - g.drawImage(iconImg, 115, 115); - - // Alarm within symbol - g.setFontAlign(0,0,0); - g.setFontAntonioSmall(); - g.drawString(iconImg.text, 115+25, 105); - if(isAlarmEnabled() > 0){ - g.drawString(getAlarmMinutes(), 115+25, 115+25); - } + // Draw state + drawState(); // Queue draw in one minute queueDraw(); } + /* * Step counter via widget */ @@ -265,12 +257,6 @@ function stepsWidget() { return undefined; } -/* - * HRM Listener - */ -Bangle.on('HRM', function (hrm) { - hrmValue = hrm.bpm; -}); /* * Handle alarm @@ -314,8 +300,29 @@ function handleAlarm(){ /* - * Swipe to set an alarm + * Listeners */ +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } +}); + +Bangle.on('lock', function(isLocked) { + drawLogo(); +}); + +Bangle.on('charging',function(charging) { + drawState(); +}); + +Bangle.on('HRM', function (hrm) { + hrmValue = hrm.bpm; +}); + Bangle.on('swipe',function(dir) { // Increase alarm if(dir == -1){ @@ -342,22 +349,11 @@ Bangle.on('swipe',function(dir) { Storage.writeJSON(SETTINGS_FILE, settings); }); - /* - * Stop updates when LCD is off, restart when on + * Lets start widgets, listen for btn etc. */ -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"); - Bangle.loadWidgets(); /* * we are not drawing the widgets as we are taking over the whole screen From a2afacfca0fd070b4c06f47458e1414fc094e1ba Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 12:22:36 +0100 Subject: [PATCH 03/48] Minor performance improvements (no logo) --- apps/lcars/lcars.app.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 4bf73057b..025220798 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -36,12 +36,6 @@ var backgroundImage = { buffer : require("heatshrink").decompress(atob("AAUM2XLlgCCwAJBBAuy4EAmQIF5cggAIGlmwgYIG2XIF42wF4ImGF4ImHJoQmGJoQdJhZNHNY47CgRNGBIJZHHgRiGBIRQ/KH5QCAFCh/eX5Q/KAwdCAGVbtu27YCCoAJBkuWrNlAQRGCiwRDAQPQBIMJCIYCBsAJBgomEtu0WoQmEy1YBIMBHYttIwQ7FyxQ/KHFlFAQ7F2weCHYplKChRTCCg5TCHw5TMAD0GzVp0wCCBBGaBIMaBAtpwECBA2mwEJBAugDgMmCIwJBF5EABAtoeQQvGCYQdPJoI7LMQzTCLJKAGzAJBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A==")) } -var logo = { - width : 56, height : 56, bpp : 1, - transparent : 0, - buffer : require("heatshrink").decompress(atob("AAUEAwsOAwseAwsfAws/AwtzwAGEuIGF8PgAocH8H4AwcP4H+FAnAv4cDveAufAAwXzwFxEYUB4cAmFwAwMDw8AnE4F4UGgEYjBmCM4McjgGEhhxCBQUMC4IYBAwMOg4GBnAfBgwGCmAtBg8DAwxUBuEwIIIGDJIMDwYGCsAGBwIGBsAGBgIGDMoMB4IGIuB6C4YGBuIGJ8YGBmOAgPgsYJBAwMH+AGCneAh84u4GBjeAPAIGCcgM4hk+YQQ5BhwGE8EHninCgPAgYGCgxzBge4AwSPBgLnCVwQGEU4MH/gGCn+An98AwV///+AwUMuP/+AwChngJwIGCh52CjxaCPIIfBAxICBJIIXEAAb+CACA")) -} - var iconEarth = { width : 50, height : 50, bpp : 3, buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) @@ -151,17 +145,18 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ } -function drawLogo(){ +function drawLock(){ + g.setFontAntonioSmall(); + g.setColor(cWhite); if(Bangle.isLocked()){ - g.setColor(cWhite); - } else { - g.setColor(cBlue); + g.setColor(cOrange); } - g.drawImage(logo, 120, 10); + g.drawString("LCARS", 130, 15); + g.drawString("BJS-2", 130, 35); } function drawState(){ - g.setColor(cOrange); + g.setColor(cWhite); var bat = E.getBattery(); var timeInMinutes = getCurrentTimeInMinutes(); @@ -207,7 +202,7 @@ function draw(){ drawHoriztonatlBgLine(cOrange, 20, 176, 172, 4); // Draw logo - drawLogo(); + drawLock(); // Write time g.setColor(cWhite); @@ -218,7 +213,7 @@ function draw(){ g.drawString(timeStr, 28, 12); // Write date - g.setColor(cPurple); + g.setColor(cWhite); g.setFontAntonioSmall(); var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); @@ -312,7 +307,7 @@ Bangle.on('lcdPower',on=>{ }); Bangle.on('lock', function(isLocked) { - drawLogo(); + drawLock(); }); Bangle.on('charging',function(charging) { From 3dd4351567f14f5ed787b77ed5795c9d5965dde9 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 12:54:13 +0100 Subject: [PATCH 04/48] Minor changes --- apps/lcars/lcars.app.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 025220798..84d12953e 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -114,25 +114,25 @@ function printData(key, y){ if(key == "Battery"){ var bat = E.getBattery(); - g.drawString("BAT:", 30, y); + g.drawString("BAT:", 28, y); g.drawString(bat+ "%", 70, y); } else if(key == "Steps"){ var steps = getSteps(); - g.drawString("STEP:", 30, y); + g.drawString("STEP:", 28, y); g.drawString(steps, 70, y); } else if(key == "Temp."){ var temperature = Math.floor(E.getTemperature()); - g.drawString("TEMP:", 30, y); + g.drawString("TMP:", 28, y); g.drawString(temperature + "C", 70, y); } else if(key == "HRM"){ - g.drawString("HRM:", 30, y); + g.drawString("HRM:", 28, y); g.drawString(hrmValue, 70, y); } else { - g.drawString("NOT FOUND", 30, y); + g.drawString("NOT FOUND", 28, y); } } @@ -147,12 +147,13 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ function drawLock(){ g.setFontAntonioSmall(); - g.setColor(cWhite); - if(Bangle.isLocked()){ - g.setColor(cOrange); - } + g.setColor(cOrange); + g.clearRect(120, 10, g.getWidth(), 80); g.drawString("LCARS", 130, 15); - g.drawString("BJS-2", 130, 35); + g.drawString("B-JS2", 130, 35); + if(Bangle.isLocked()){ + g.drawString("LOCK", 130, 55); + } } function drawState(){ @@ -206,11 +207,10 @@ function draw(){ // Write time g.setColor(cWhite); - g.setFontAlign(-1,-1, 0); var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 28, 12); + g.drawString(timeStr, 25, 12); // Write date g.setColor(cWhite); @@ -218,7 +218,7 @@ function draw(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 35, 60); + g.drawString(dayStr, 28, 60); // Draw data g.setColor(cWhite); From 1b92b2bbc4f7bf9cdb2a51e9f99e47d40626ab37 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 13:01:58 +0100 Subject: [PATCH 05/48] New version --- apps.json | 2 +- apps/lcars/ChangeLog | 3 ++- apps/lcars/README.md | 7 ++++--- apps/lcars/lcars.app.js | 8 ++++---- apps/lcars/lcars.png | Bin 1823 -> 1840 bytes apps/lcars/screenshot.png | Bin 2921 -> 5139 bytes 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/apps.json b/apps.json index e5e9f8f02..028127859 100644 --- a/apps.json +++ b/apps.json @@ -4487,7 +4487,7 @@ "name": "LCARS Clock", "shortName":"LCARS", "icon": "lcars.png", - "version":"0.07", + "version":"0.08", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "Library Computer Access Retrieval System (LCARS) clock.", diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index c5f8187b7..f30ae4707 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -4,4 +4,5 @@ 0.04: Inluded LCARS Logo. 0.05: Additional icons for (1) charging and (2) bat < 30%. 0.06: Fix - Alarm disabled, if clock was closed. -0.07: Added settings to adjust data that is shown for each row. \ No newline at end of file +0.07: Added settings to adjust data that is shown for each row. +0.08: Smaller background for faster rendering. Full screen mode. \ No newline at end of file diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 15009e838..31cb81341 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -1,14 +1,15 @@ # LCARS clock A simple LCARS inspired clock. -Note: To display the steps, its necessary to install +Note: To display the steps, its necessary (but still optional) to install the [Pedometer widget](https://banglejs.com/apps/#pedometer%20widget). ## Features * LCARS Style watch face - * Shows satate (charging, out of battery etc.) - * SHows data that can be configured (steps, HRM, temperature etc.) + * Shows different states (charging, out of battery, GPS on etc.) + * Shows customizable data (steps, HRM, battery, temperature etc.) * Swipe left/right to activate an alarm + * Full-screen mode ## Icons
Icons made by Smashicons, Freepik from www.flaticon.com
diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 84d12953e..8ac1dfe14 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -170,7 +170,7 @@ function drawState(){ timeInMinutes % 4 == 1 ? iconMars : timeInMinutes % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 120, 120); + g.drawImage(iconImg, 120, 118); // Alarm within symbol g.setFontAlign(-1, -1, 0); @@ -179,7 +179,7 @@ function drawState(){ if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 120+25, 120+25+1); + g.drawString(getAlarmMinutes(), 120+25, 118+25+1); } } @@ -200,7 +200,7 @@ function draw(){ drawHoriztonatlBgLine(cPurple, 120, 176, 81, 3); drawHoriztonatlBgLine(cOrange, 35, 110, 87, 3); drawHoriztonatlBgLine(cOrange, 120, 176, 87, 3); - drawHoriztonatlBgLine(cOrange, 20, 176, 172, 4); + drawHoriztonatlBgLine(cOrange, 20, 176, 171, 5); // Draw logo drawLock(); @@ -218,7 +218,7 @@ function draw(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 28, 60); + g.drawString(dayStr, 28, 58); // Draw data g.setColor(cWhite); diff --git a/apps/lcars/lcars.png b/apps/lcars/lcars.png index 167352ef4bd6db8c6de6bc845396944af7bcc040..9264f93f21be2ea0c39faabab767f88da6d4ad43 100644 GIT binary patch delta 1809 zcmV+s2k!Wv4zLc8G=JwwL_t(&fz6p~P!v}d$A8l^vk(+Z1hmT4RktMSSVk#jVI}c{ zNUHW>_#jn2Qc)ZbU0mG3#qiLq#R_PG5s0QrkO-~`WJ@#;E%QO*qeKiME4mViPzx)T zf@FP-ykwZ!4`y1L>6vMUp4$Cab$@{J%RXZ3ADGj%l0)lH?uY6V^!m+UP78=0hV~4D6+kL`7&jt7gdR?S_w^k z{})bcUk=l!Pp7r5YSeL6nSs51AC5>oKwDcIdv+fib!=5;U~=xyxp(j0h{sKuG>MMR zOQVYI(F}apzmKRdmN6!6Ec{X9k$8a4&Q3xX#FCL-;(yV27{LsDI{q_COG`O-?wrF* zN-Y=+2IAx6+4|=g#bewiaK!&_?Ao=9mX?-L3sj1LfB=$`lE}_k@7C630*lKdsi~=P zI#>_{ugwO)lqpjvC@5e>>;mT+gpZ7j#8w1NTYn%UFq5XHCZ0WerjmSE zv}h51AN7-wk-?ZTVQq~KdAZG2gyf2jj&`se z&E@a!FY&)(#R>I?c>VJ?uvjc2xnaWw@+rF7!N2>^tlYkhEVFsq)fb{XKW z9a%2>M+;Z8yL|a_@&5Mh+W-iyt*s)taDU-Kw*f9(xZt@u1?cYXcG@>@-aH3R=;`SZ z8~*DIY7>)#G%-(MXa9S)peFc`!} zU0t0^$8sygNa5$_$IzH^sIRY=3b3r6P?=j_xH>4L*EnO;o$%Xxx3>fFNr;S_BeHX^XAQw>IPu$ z+_^kIFhJqlk3_C$VKEC9IR8u@{vdz%)o&Rb92DDY*Se3|>*5lUv*L2^oZig*ouIZrx%-U4H^8DJhcE zzO=M7iJitqi`aXltQw=yDA^|J^?EjM-i%(aCoeD0t)OYsrqP!9Z?|^C;gkF`oKzkeUI+02tCPq138=yW=CIvs(5flQn@k;#)MJN-cp#V=<> z)7sjK4cDuh&SmdU7=Qj5yK?192k`(YTi;URP7!i)a#*v*@i=EV6qV4UM~}q&(9lpm z|GV>}KDDrV&98`xisE=>gG)O_Ghkopf`Wqh$F)o@f!^L;GBY#X8~zWVXchW@#(x2Ym$Z{xh~>!u015yANkvXXu0mjfanhH5 delta 1791 zcmVXOMeaKpD>tb0K0#?jIy#a zTr1jOuownQAmwQdN=s+nd__eCp7k9wNF0MCP~~iaq@*MYmzVrbaXKGwYIk6Y1a`><8huqR#ukA{?yb|PUCT!z(;99OiycG zm6b{*e!a1tvwxVJB~Yk(j{5p~R<;ixKEzvg*__1XEP-?9&go=-^5jWQ;&PHe-e{-V zA6Fe@G8q(;XBQlslLRhYxS-cKkw~=Q*gSm(T~TzQq@)Co9zDXy$cWy-dwYA4ohN{= zuP@%VKcklqBesXRGAkt{5()0yxkKBexB{Qg$KJhrVShZ$ey`A)!0#60NK8ybTU*D5|wSx(QFxb}s04FCWh(scE%C@W5z(igh@5b^Y zUonbbxpF0hLLnYJcmQ*AbI!yH1Ok|vno_vV&Q1gb1fZ@lMC~|Q0`YZs5D^i9v9U1< zzhT1$On+YkniKy)v|9|Co0~B_Jj{`NVBNZP7|R_;baXTg*umRL8+iBbT@GZ=K`xggb0~vs7k>ucfLJW1Ow+o$Iuzg9LK#OU@aEPY z85xP|UlcM1%N)wUqOrm^0Dyar^ddMm{$;7skfMWc$>qx#g7rfb#NklJM~GK*p9#je)qH zK7X@NDwRkdOr!DJ#{F^V&>^xdm&?)fJQ@H%oT#N{9UmXBHPEY9uNEj(J#OB-$;hXy z7g45CQBe^9fSAA5J2*HX$asgw00~Xp9D~(C)7SO$^CO>IT3P@A#FHmaNOJAkwORw* zyLV52bu6IiaJYK)Y8pq3j*gOz#fukf4S(?X@nijz>42k^k&L{ptu2istgWrdMsIJg zR_BJC|Fckc{_5%Jp>YJC&nFvIRaF`tGp!K1!ra^(^J6lhy1JT?zkmNe`OM?ZTxEz& zn>LZ8LZLvC><8MwSxBW)U9?hQVq${BhYw>UdlZe||Be0o_p7xXA0KDr=kF6hNOZD?rFRW|@&)v8sPxH5?!H(n&U^ba$zW)1ypGmAH0HaZwRn4bdnkSx!vWiaT5Y4= ziH4`ACyj4vYQnxhLJ<)WL8oi?v;pXOs zR-t~E|Ks&>lv5@}q>&NA!^7dSj9!1DT`9Ys20)lF0uK)lodmeLy6P?d#9znN-tcT} zY><{IWLHiei_+we8*y2%DS9uF#&O7GH(r>7@&1y*XbVO1Ml^R7fM0ZOHk zwRn4bdxVCDLUeu_mX?+PfcExwt>g5njRJtNu`xDp-i*4sIt&a9=zl!k)YKFLfdJm# z-dOIGLg|Z&ib7mm9Qyh+%$?U@m4LN<4vkAlNPvZD47P2Z<5WZny1Tm}m&@_;e4IXg8hAT*(#tutm~5QAc=3XK76=4*-;>*-78ClO?SPMu51f|Y&}hf% z3(PEaGe27Ju0I#9jwSp)DMP1Bvkj{+Ff=p-f*=qV)z5(}Zow)6g+hUt82X(5KY-N~ h`q-yLyU~Aye*r)QY$kz4$b$d?002ovPDHLkV1n#zTzmik diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index d74635f64c385138e0b08b685db984ef3387f0a9..768c4a172e33f1cc478bc14a13400688af7bbbb2 100644 GIT binary patch literal 5139 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 BpU(gQ literal 2921 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 Date: Sun, 19 Dec 2021 19:52:05 +0100 Subject: [PATCH 06/48] Two screens --- apps/lcars/bg_right.png | Bin 0 -> 791 bytes apps/lcars/lcars.app.js | 185 ++++++++++++++++++++++++++++++------ apps/lcars/screenshot.png | Bin 5139 -> 4813 bytes apps/lcars/screenshot_2.png | Bin 0 -> 2671 bytes 4 files changed, 155 insertions(+), 30 deletions(-) create mode 100644 apps/lcars/bg_right.png create mode 100644 apps/lcars/screenshot_2.png diff --git a/apps/lcars/bg_right.png b/apps/lcars/bg_right.png new file mode 100644 index 0000000000000000000000000000000000000000..6e23a5d6ebc0687268a27c368507b63ed435d2b1 GIT binary patch literal 791 zcmV+y1L*vTP)u=77?@_KC=}5|wjz5wZD`KUTKmqT@jSO- z-kr~UXW!lZ&hG38gr$UnEH1q+^tPY>YBwfF1q1-z;&TavrJU^?Epi-7rrce>jIfk% z@4qZ$}v#kR_%l%g*pk2wJWfKa{RR1o0sbG8+742wST<^BmN#~wcL6$zAz#zwJe zwO;f;mWML|KF(pKyFDn@PMq5hF&77_q&I<)#~8 z8Z8%)laqEF^M597uOAPETpL0t`Ei^l7Q~1VBSwrEvE5)XO;h$~j@VT2X39=C9tycC zDtpIOVTCIz&nzpOZff#WRQ9f`f{f|bsuR)ZcSkQi0RYp~>ioJs0qo+$B9j<1cYHN^ z-}~gUW0+}bo*KPx+pTq!PyOksV3`O)_;r29J$#f@X2b%wez;su&vbPqfc})@egR7% V)8R{}8ms^S002ovPDHLkV1jhMZOi}w literal 0 HcmV?d00001 diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 8ac1dfe14..96fe186c2 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -16,6 +16,9 @@ for (const key in saved_settings) { settings[key] = saved_settings[key] } let hrmValue = 0; +var stepsData = new Array(24).fill(0); +var hrmData = new Array(24).fill(0); + /* * Colors to use @@ -25,17 +28,29 @@ let cOrange = "#FF9900"; let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; +/* + * Position in lcars + */ +let lcarsViewPos = 0; +let drag; + /* * Requirements and globals */ const locale = require('locale'); -var backgroundImage = { +var bgLeft = { width : 27, height : 176, bpp : 3, transparent : 0, buffer : require("heatshrink").decompress(atob("AAUM2XLlgCCwAJBBAuy4EAmQIF5cggAIGlmwgYIG2XIF42wF4ImGF4ImHJoQmGJoQdJhZNHNY47CgRNGBIJZHHgRiGBIRQ/KH5QCAFCh/eX5Q/KAwdCAGVbtu27YCCoAJBkuWrNlAQRGCiwRDAQPQBIMJCIYCBsAJBgomEtu0WoQmEy1YBIMBHYttIwQ7FyxQ/KHFlFAQ7F2weCHYplKChRTCCg5TCHw5TMAD0GzVp0wCCBBGaBIMaBAtpwECBA2mwEJBAugDgMmCIwJBF5EABAtoeQQvGCYQdPJoI7LMQzTCLJKAGzAJBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A==")) } +var bgRight = { + width : 27, height : 176, bpp : 3, + transparent : 0, + buffer : require("heatshrink").decompress(atob("lmy5YCDBIUyBAmy5AJBhYUG2EAhgIFAQMAgQIGCgQABCg4ABEAwUNFI2AKZHAKZEgGRZTGOIUDQxJxGKH5Q/agwAnUP7y/KH4yGeVYAJrdt23bAQVABIMly1ZsoCCMgUWCIYCB6AJBhIRDAQNgBIMFEwlt2i1CEwmWrAJBgI7FtpGCHYuWKH5QxEwpQDlo7F0A7IqBZBEwo7BCIwCBJo53CJoxiCJpIAdgOmzVpAQR/CgAIEAQJ2CBAoCBBIMmCg1oD4QLGFQUCCjQ+CKYw+CKY4JCKYwoCGRMaGREJDoroCgwdFzBlLKH5QvAHih/eX5Q/KE4A8UP7y/KH5QGDpg7HJoxZCCIx3CJowmCF4yACJox/CgAA=")) +} + var iconEarth = { width : 50, height : 50, bpp : 3, buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) @@ -86,7 +101,7 @@ var iconNoBattery = { // Font to use: // -Graphics.prototype.setFontAntonioSmall = function(scale) { +Graphics.prototype.setFontAntonioMedium = function(scale) { // Actual height 20 (19 - 0) g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAA//mP/5gAAAAAAAAAAAAA/gAMAAAAAA/gAPAAAEIIBP+H/8D+IYBP+H/8D+IABCAAwIAfnwP8+PHh448eP3+B4fAAAAAAAH/AD/4AwGAMBgD/4Af8GAAPgAPgAfgAfAAfAA+AAOP/AH/4BgGAYBgH/4A/8AAAAAAAAAQAA/B+f4/+GMPhjv/4/h8Dg/gAcYwAAPwADgAAAAAAAAB//8///sAAaAACAAAMAAb//+f//AAAAAAAbAAGwAA4AA/wADgABsAAbAAAAAAAgAAMAAPwAD8AAMAADAAAAAAAAAAHAAB/AAOAAAAAAAAMAADAAAwAAMAACAAAAAAAAAABgAAYAAAAAAAAA4AD+AP+A/4A/gAOAAAAAAAAAH//j//8wADMAAz//8f/+AAAAAAAMAADAABgAA//+P//gAAAAAAAAAAAAAfgfP4fzAfswfDP/gx/gMAAAHgPj4D8wMDMHAz//8f3+AAEAAAAADwAH8APzA/AwP//j//4AAwAAAD/Hw/x+MwBjOAYz/+Mf/AAAAAAAH//j//8wYDMGAz9/8fP+AAcDAAAwAAMAfjB/4z/wP+AD4AAwAAAAOB/f4///MHAzBwM///H9/gAAAAAAH/Pj/78wGDMBgz//8f/+AAAAAAADhwA4cAAAAAAAAAAAAAADh/A4fgAAAAOAAHwABsAA7gAccAGDAAAAANgADYAA2AANgADYAA2AAAAAAAABgwAccADuAAbAAHwAA4AAAAHwAD8c4/POMHAD/wAfwAAAAAAAAD/wD//B4B4Y/HMf8zMBMyATMwczP+M4BzHwcgf+AA+AAAAAAD4A/+P/8D+DA/4wH/+AB/4AAeAAAAAAA//+P//jBgYwYGP//j//4PH4AAAAAAAf/+P//zgAcwADP4fz+P4Ph8AAAAAAA//+P//jAAYwAGPADj//4P/4AAAAAAA//+P//jBgYwYGMGBgAAAAAAP//j//4wYAMGADBgAAAAAAAA//w///PAHzAQM4MHP7/x+/8AAAAAAD//4//+AGAABgAAYAP//j//4AAAAAAAAAA//+P//gAAAAAAAAAAAHwAB+AABgAAY//+P//AAAAAAAAAAD//4//+APgAf+Afj8PgPjAAYAAAAAAD//4//+AABgAAYAAGAAAAAAA//+P//j/gAD/wAB/gAP4B/4P/AD//4//+AAAAAAAAAAP//j//4P4AAfwAA/g//+P//gAAAAAAAAAA//g//+PAHjAAY4AOP//h//wAAAAAAD//4//+MDADAwA4cAP/AB/gAAAAAAAA//g//+PAHjAAc4APv//5//yAAAAAAD//4//+MGADBgA48AP//h+f4AAAAAAB+Pw/z+MOBjBwY/P+Hx/AAHgwAAMAAD//4//+MAADAAAAAAP//D//4AAOAABgAA4//+P//AAAAwAAP8AD//AA/+AAfgP/4//gPwAAAAA+AAP/4Af/4AD+A//j/wA/wAD/+AA/4B/+P/+D+AAAAAMADj8P4P/4A/4B//w+A+MABgAAA4AAPwAB/gAB/+A//j/gA+AAMAAAAAYwB+MH/jf+Y/8GPwBjAAAAAAP//7//+wABsAAYAAAAAAPAAD/gAH/gAD/gAD4AACAAADAAGwABv//7//+AAAA=="), 32, atob("BQUHCAgVCQQFBQkHBQcFBwgICAgICAgICAgFBQcHBwgPCQkJCQcHCQoFCQkHDQoJCQkJCAYJCQ0ICAcGBwY="), 20+(scale<<8)+(1<<16)); } @@ -146,9 +161,9 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ function drawLock(){ - g.setFontAntonioSmall(); + g.setFontAntonioMedium(); g.setColor(cOrange); - g.clearRect(120, 10, g.getWidth(), 80); + g.clearRect(120, 10, g.getWidth(), 75); g.drawString("LCARS", 130, 15); g.drawString("B-JS2", 130, 35); if(Bangle.isLocked()){ @@ -174,7 +189,7 @@ function drawState(){ // Alarm within symbol g.setFontAlign(-1, -1, 0); - g.setFontAntonioSmall(); + g.setFontAntonioMedium(); g.drawString("STATUS", 123, 97); if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); @@ -183,23 +198,16 @@ function drawState(){ } } -function draw(){ - - // First handle alarm to show this correctly afterwards - handleAlarm(); - - // Next draw the watch face - g.reset(); - g.clearRect(0, 0, g.getWidth(), g.getHeight()); +function drawPosition0(){ // Draw background image - g.drawImage(backgroundImage, 0, 0); - drawHoriztonatlBgLine(cBlue, 35, 120, 0, 4); + g.drawImage(bgLeft, 0, 0); + drawHoriztonatlBgLine(cBlue, 25, 120, 0, 4); drawHoriztonatlBgLine(cBlue, 130, 176, 0, 4); - drawHoriztonatlBgLine(cPurple, 35, 110, 81, 3); - drawHoriztonatlBgLine(cPurple, 120, 176, 81, 3); - drawHoriztonatlBgLine(cOrange, 35, 110, 87, 3); - drawHoriztonatlBgLine(cOrange, 120, 176, 87, 3); + drawHoriztonatlBgLine(cPurple, 20, 70, 80, 4); + drawHoriztonatlBgLine(cPurple, 80, 176, 80, 4); + drawHoriztonatlBgLine(cOrange, 35, 110, 87, 4); + drawHoriztonatlBgLine(cOrange, 120, 176, 87, 4); drawHoriztonatlBgLine(cOrange, 20, 176, 171, 5); // Draw logo @@ -214,7 +222,7 @@ function draw(){ // Write date g.setColor(cWhite); - g.setFontAntonioSmall(); + g.setFontAntonioMedium(); var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); @@ -228,6 +236,65 @@ function draw(){ // Draw state drawState(); +} + +function drawPosition1(){ + // Draw background image + g.drawImage(bgRight, 149, 0); + drawHoriztonatlBgLine(cBlue, 0, 140, 0, 4); + drawHoriztonatlBgLine(cPurple, 0, 80, 80, 4); + drawHoriztonatlBgLine(cPurple, 90, 150, 80, 4); + drawHoriztonatlBgLine(cOrange, 0, 50, 87, 4); + drawHoriztonatlBgLine(cOrange, 60, 140, 87, 4); + drawHoriztonatlBgLine(cOrange, 0, 150, 171, 5); + + // Draw steps bars + g.setColor(cWhite); + + // HRM + require("graph").drawBar(g, hrmData, { + axes : true, + gridx : 4, + gridy : 50, + width : 140, + height : 50, + x: 5, + y: 25 + }); + + // Steps + require("graph").drawBar(g, stepsData, { + axes : true, + gridx : 4, + gridy : 2500, + width : 140, + height : 50, + x: 5, + y: 115 + }); + + g.setFontAntonioMedium(); + g.drawString("HRM", 123, 7); + g.drawString("STEPS", 116, 94); +} + +function draw(){ + // First handle alarm to show this correctly afterwards + handleAlarm(); + + // Handle steps for graph data + handleSteps(); + + // Next draw the watch face + g.reset(); + g.clearRect(0, 0, g.getWidth(), g.getHeight()); + + // Draw current lcars position + if(lcarsViewPos == 0){ + drawPosition0(); + } else if (lcarsViewPos == 1) { + drawPosition1(); + } // Queue draw in one minute queueDraw(); @@ -240,7 +307,7 @@ function draw(){ function getSteps() { if (stepsWidget() !== undefined) return stepsWidget().getSteps(); - return "???"; + return 0; } function stepsWidget() { @@ -252,6 +319,15 @@ function stepsWidget() { return undefined; } +function handleSteps(){ + var current_h = (new Date()).getHours(); + if(current_h == 0){ + stepsData[current_h] = getSteps(); + } else { + stepsData[current_h] = getSteps() - stepsData[current_h-1]; + } +} + /* * Handle alarm @@ -315,19 +391,68 @@ Bangle.on('charging',function(charging) { }); Bangle.on('HRM', function (hrm) { + var current_h = (new Date()).getHours(); + hrmValue = hrm.bpm; + hrmData[current_h] = (hrmData[current_h] + hrmValue) / 2 }); -Bangle.on('swipe',function(dir) { - // Increase alarm - if(dir == -1){ - if(isAlarmEnabled()){ - settings.alarm += 5; - } else { - settings.alarm = getCurrentTimeInMinutes() + 5; - } + +function increaseAlarm(){ + if(isAlarmEnabled()){ + settings.alarm += 5; + } else { + settings.alarm = getCurrentTimeInMinutes() + 5; } + Storage.writeJSON(SETTINGS_FILE, settings); +} + + +function decreaseAlarm(){ + if(isAlarmEnabled() && (settings.alarm-5 > getCurrentTimeInMinutes())){ + settings.alarm -= 5; + } else { + settings.alarm = -1; + } + + Storage.writeJSON(SETTINGS_FILE, settings); +} + + +// Thanks to the app "gbmusic" for this code to detect swipes in all 4 directions. +Bangle.on("drag", e => { + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + + // Horizontal swipe + if (Math.abs(dx)>Math.abs(dy)+10) { + if(dx > 0){ + lcarsViewPos = 0; + } else { + lcarsViewPos = 1; + } + + // Vertical swipe + } else if (Math.abs(dy)>Math.abs(dx)+10) { + if(dy > 0){ + decreaseAlarm(); + } else { + increaseAlarm(); + } + } + + draw(); + } +}); + + +/*Bangle.on('swipe',function(dir) { + + // Decrease alarm if(dir == +1){ if(isAlarmEnabled() && (settings.alarm-5 > getCurrentTimeInMinutes())){ @@ -342,7 +467,7 @@ Bangle.on('swipe',function(dir) { // Update alarm state Storage.writeJSON(SETTINGS_FILE, settings); -}); +});*/ /* * Lets start widgets, listen for btn etc. diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 768c4a172e33f1cc478bc14a13400688af7bbbb2..98bf50546ab06532dbee2dcb58524a138c9ed9f2 100644 GIT binary patch delta 4809 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
Dt*ApQ z5T6g=3&nv8NHilL0QNZ4N~?j$ViBoqbo#v-fF*5@>RswzWX)qsh=CfII#^raaLge6 z%>t$8c{G5L@+7->+HDOUtqycxdf8T!AkwUR>C`J@JQ=t-Q5;Q0C$@(3m9pE1n@}fXWiWvNC0=6 zFbf!IfdueK>u25F78tS<*WKzYAT98=z>u>LY5lZ7lm&({uoOSlc4W9`(gh>MKu9ng zF{X961UdA>wP}Vp^0SRkJGTCd*ta#!5C-;w^x3&$K-y6Yz$I_1fqzQARsgs5wYR-T z<=<~1lR#bW=zctX_PR14ibS|R4Pjtps}kL3rvS6wbZ&KQFMzpo9*7-U+Z&Oum2s_n z5pCONvn!nkMo%^MybarGygLF|vz2roB+Wy?+-iR*-?9w+>~IvrSvpmFuC*bmebJyW zWkRPWj+7NcHL&OXFn9y5n?zFwW z0Q>#@i>)11et#P6K-+mK2EHnQC22y#Yuw_J11gnI*4x;qGh5SDSbSmXWX4Sf2CwOF zW#AqFOYA!v1Aj#wYUTtOxbEu@^Md)M!FekNZe=KmF)hhK9XH}89<9&f=K))H+9-3E z-z`R`ns^{49JNOLBDBds}USv?HAAIz!1Teg>f z;>?uM4Q-5=GXacP>4s^3K+R11n_0Ls4kZvl-hb%WBQD?>3dHOQV8lu{Nz=l_KMYK5 z#cVrEXCGS5L<|8ix?^RvagG)`-6a?CmgYEZTI!Mf9=E zWqpou*MGc1HE8#lTd%)zaoj0G?6y z4szz8&F3v-UrXwHCTRH{+3+>vJqCU!?te%CBfz$%`&9ufYF+Ex?$?W)W%=~}w=gbc z;vzvDw_AFK#ZnqrTHH})Y-M20uxObc=bVvNym?32WN2;|38~RjZWf_jP6M+IV!pde z({apQ(s0_ib!z7pERvCD1TbadVnaC^QC%wqYTnu}Xq3Y3GzwPEn0L~^5}4}g9|j!V)CfHPOWUv%16vFY zJK&x0?f|y5YwL5bAGGw#GO%<2$74KhBZEdt=xTk&MI2(2FD53MmLA~wl7A7MQ3k7R zLm1d<)Rmrdp}8xy@65JbfpLE&#N(;F-y0*H|MuLpeWoL_u5~Ps47`pnZ`qR}8u*r$ z&Q2d@uvjw?a?ry0rqok3E~O8mredYm>CJ; zC`Qk6VrIrw?f7#qM1nX@PC~5;nk)5-z1So{oFKjuNVNcidNWT{bYd1`WIN}REAZ7) j3Fi5n8xb14`k?*~5mv6K=tf)E00000NkvXXu0mjfVF)RR delta 5138 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 Date: Sun, 19 Dec 2021 19:54:40 +0100 Subject: [PATCH 07/48] Minor fixes --- apps/lcars/lcars.app.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 96fe186c2..7afa05b7f 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -161,6 +161,10 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ function drawLock(){ + if(lcarsViewPos != 0){ + return; + } + g.setFontAntonioMedium(); g.setColor(cOrange); g.clearRect(120, 10, g.getWidth(), 75); @@ -172,6 +176,10 @@ function drawLock(){ } function drawState(){ + if(lcarsViewPos != 0){ + return; + } + g.setColor(cWhite); var bat = E.getBattery(); var timeInMinutes = getCurrentTimeInMinutes(); @@ -438,6 +446,10 @@ Bangle.on("drag", e => { // Vertical swipe } else if (Math.abs(dy)>Math.abs(dx)+10) { + if(lcarsViewPos != 0){ + return; + } + if(dy > 0){ decreaseAlarm(); } else { From 75948ee04ade00344c7fe5a743ae5a559102ed14 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 19:56:34 +0100 Subject: [PATCH 08/48] Updated readme --- apps/lcars/README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 31cb81341..d84ada29b 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -8,8 +8,18 @@ the [Pedometer widget](https://banglejs.com/apps/#pedometer%20widget). * LCARS Style watch face * Shows different states (charging, out of battery, GPS on etc.) * Shows customizable data (steps, HRM, battery, temperature etc.) - * Swipe left/right to activate an alarm - * Full-screen mode + * Change between multiple screens via swipe left/right. + * Display 24h graphs for steps + hrm. + * Swipe up/down to activate an alarm. + * Full-screen mode. + +## Screenshot of multiple screens +Access via swipe left/ right + +![](screenshot.png) +![](screenshot_2.png) + + ## Icons
Icons made by Smashicons, Freepik from www.flaticon.com
From bb05677ded21def2936304b601a95358dd3bf95b Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 19:57:55 +0100 Subject: [PATCH 09/48] Updated changelog --- apps/lcars/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index f30ae4707..c171ec3d4 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -5,4 +5,4 @@ 0.05: Additional icons for (1) charging and (2) bat < 30%. 0.06: Fix - Alarm disabled, if clock was closed. 0.07: Added settings to adjust data that is shown for each row. -0.08: Smaller background for faster rendering. Full screen mode. \ No newline at end of file +0.08: Support for multiple screens. 24h graph for steps + HRM. Fullscreen Mode. \ No newline at end of file From c2f3a4614501a3521fa9d954642092a275c0a58f Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 20:00:52 +0100 Subject: [PATCH 10/48] Minor change for HRM --- apps/lcars/lcars.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 7afa05b7f..6fa42f0c3 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -263,7 +263,7 @@ function drawPosition1(){ require("graph").drawBar(g, hrmData, { axes : true, gridx : 4, - gridy : 50, + gridy : 100, width : 140, height : 50, x: 5, From e1b8d8c6693825e7d8fe24df1fbe2d809ea0a0dd Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 20:07:28 +0100 Subject: [PATCH 11/48] Set data to zero at 00:00 --- apps/lcars/lcars.app.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 6fa42f0c3..123a8448e 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -293,6 +293,13 @@ function draw(){ // Handle steps for graph data handleSteps(); + // Clear data + var current = new Date(); + if(current.getHours() == 0 && current.getMinutes() == 0){ + stepsData = new Array(24).fill(0); + hrmData = new Array(24).fill(0); + } + // Next draw the watch face g.reset(); g.clearRect(0, 0, g.getWidth(), g.getHeight()); From 6203407e1392e3e7b74e10200c4ea07eba59825b Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 20:09:49 +0100 Subject: [PATCH 12/48] Removed comments. --- apps/lcars/lcars.app.js | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 123a8448e..7815ff025 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -469,25 +469,6 @@ Bangle.on("drag", e => { }); -/*Bangle.on('swipe',function(dir) { - - - // Decrease alarm - if(dir == +1){ - if(isAlarmEnabled() && (settings.alarm-5 > getCurrentTimeInMinutes())){ - settings.alarm -= 5; - } else { - settings.alarm = -1; - } - } - - // Update UI - draw(); - - // Update alarm state - Storage.writeJSON(SETTINGS_FILE, settings); -});*/ - /* * Lets start widgets, listen for btn etc. */ From d34cdfbe136429d45e16f0ffbd3fce077b7a2994 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 20:56:52 +0100 Subject: [PATCH 13/48] Compute HRM hour average --- apps/lcars/lcars.app.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 7815ff025..8e6da3f88 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -15,10 +15,12 @@ let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; for (const key in saved_settings) { settings[key] = saved_settings[key] } -let hrmValue = 0; + var stepsData = new Array(24).fill(0); var hrmData = new Array(24).fill(0); - +let hrmValue = 0; +var hrmValueAvg = 0; +var hrmValueCount = 0; /* * Colors to use @@ -406,10 +408,17 @@ Bangle.on('charging',function(charging) { }); Bangle.on('HRM', function (hrm) { - var current_h = (new Date()).getHours(); + var current = new Date(); hrmValue = hrm.bpm; - hrmData[current_h] = (hrmData[current_h] + hrmValue) / 2 + hrmValueAvg += hrmValue; + hrmValueCount += 1; + hrmData[current_h.getHours()] = hrmValueAvg / hrmValueCount; + + if(current.getMinutes() == 0){ + hrmValueAvg = 0; + hrmValueCount = 0; + } }); From 2bc8c672e01645a6834cdd5e0e39e230723bb94f Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 21:09:26 +0100 Subject: [PATCH 14/48] Dynamically select y range of graphs --- apps/lcars/lcars.app.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 8e6da3f88..ae2927ae8 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -262,10 +262,13 @@ function drawPosition1(){ g.setColor(cWhite); // HRM + var maxHrm = Math.max.apply(Math, hrmData); + var gridy = (parseInt(maxHrm / 50)-1) * 50; + gridy = gridy <= 0 ? 50 : gridy; require("graph").drawBar(g, hrmData, { axes : true, gridx : 4, - gridy : 100, + gridy : gridy, width : 140, height : 50, x: 5, @@ -273,10 +276,13 @@ function drawPosition1(){ }); // Steps + var maxSteps = Math.max.apply(Math, stepsData); + var gridy = (parseInt(maxSteps / 1000)-1) * 1000; + gridy = gridy <= 0 ? 1000 : gridy; require("graph").drawBar(g, stepsData, { axes : true, gridx : 4, - gridy : 2500, + gridy : gridy, width : 140, height : 50, x: 5, @@ -284,8 +290,8 @@ function drawPosition1(){ }); g.setFontAntonioMedium(); - g.drawString("HRM", 123, 7); - g.drawString("STEPS", 116, 94); + g.drawString("HRM", 122, 9); + g.drawString("STEPS", 114, 96); } function draw(){ @@ -413,7 +419,7 @@ Bangle.on('HRM', function (hrm) { hrmValue = hrm.bpm; hrmValueAvg += hrmValue; hrmValueCount += 1; - hrmData[current_h.getHours()] = hrmValueAvg / hrmValueCount; + hrmData[current.getHours()] = hrmValueAvg / hrmValueCount; if(current.getMinutes() == 0){ hrmValueAvg = 0; From f6a5bc563ec884cf54f7677a7b8d0480ad39aacb Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:22:28 +0100 Subject: [PATCH 15/48] Use health library to display data. --- apps/lcars/lcars.app.js | 55 +++++++++++++++++++----------------- apps/lcars/screenshot_2.png | Bin 2671 -> 2802 bytes 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index ae2927ae8..53849e840 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -17,10 +17,7 @@ for (const key in saved_settings) { } var stepsData = new Array(24).fill(0); -var hrmData = new Array(24).fill(0); let hrmValue = 0; -var hrmValueAvg = 0; -var hrmValueCount = 0; /* * Colors to use @@ -260,29 +257,43 @@ function drawPosition1(){ // Draw steps bars g.setColor(cWhite); + let health; - // HRM - var maxHrm = Math.max.apply(Math, hrmData); - var gridy = (parseInt(maxHrm / 50)-1) * 50; - gridy = gridy <= 0 ? 50 : gridy; - require("graph").drawBar(g, hrmData, { + try { + health = require("health"); + } catch(ex) { + g.setFontAntonioMedium(); + g.drawString("MODULE HEALTH", 20, 110); + g.drawString("REQUIRED.", 20, 130); + g.drawString("MODULE HEALTH", 20, 20); + g.drawString("REQUIRED.", 20, 40); + return; + } + + // Plot HRM graph + var data = new Uint16Array(31); + var cnt = new Uint8Array(31); + health.readDailySummaries(new Date(), h=>{ + data[h.day]+=h.bpm; + if (h.bpm) cnt[h.day]++; + }); + require("graph").drawBar(g, data, { axes : true, gridx : 4, - gridy : gridy, + gridy : 100, width : 140, height : 50, x: 5, y: 25 }); - // Steps - var maxSteps = Math.max.apply(Math, stepsData); - var gridy = (parseInt(maxSteps / 1000)-1) * 1000; - gridy = gridy <= 0 ? 1000 : gridy; - require("graph").drawBar(g, stepsData, { + // Plot step graph + var data = new Uint16Array(31); + health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); + require("graph").drawBar(g, data, { axes : true, gridx : 4, - gridy : gridy, + gridy : 5, width : 140, height : 50, x: 5, @@ -290,8 +301,10 @@ function drawPosition1(){ }); g.setFontAntonioMedium(); + g.setColor(cWhite); g.drawString("HRM", 122, 9); - g.drawString("STEPS", 114, 96); + g.drawString("STEPS [K]", 90, 96); + } function draw(){ @@ -414,17 +427,7 @@ Bangle.on('charging',function(charging) { }); Bangle.on('HRM', function (hrm) { - var current = new Date(); - hrmValue = hrm.bpm; - hrmValueAvg += hrmValue; - hrmValueCount += 1; - hrmData[current.getHours()] = hrmValueAvg / hrmValueCount; - - if(current.getMinutes() == 0){ - hrmValueAvg = 0; - hrmValueCount = 0; - } }); diff --git a/apps/lcars/screenshot_2.png b/apps/lcars/screenshot_2.png index 8960ff8dffd4a45f0028e54fdd35db85149044ac..4501e52fa0a0fc2bebfff6f916eb8bcd9a89489a 100644 GIT binary patch literal 2802 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 delta 2649 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 Date: Sun, 19 Dec 2021 22:25:55 +0100 Subject: [PATCH 16/48] Updated readme --- apps/lcars/README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index d84ada29b..8c31d04e4 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -1,26 +1,30 @@ # LCARS clock A simple LCARS inspired clock. -Note: To display the steps, its necessary (but still optional) to install +Note: To display the steps, its necessary to install the [Pedometer widget](https://banglejs.com/apps/#pedometer%20widget). +To display the month graphs on screen 2, the health app is required. +Nevertheless, lcars can also be used, with limited functionality, without +installing those apps. + ## Features * LCARS Style watch face * Shows different states (charging, out of battery, GPS on etc.) * Shows customizable data (steps, HRM, battery, temperature etc.) * Change between multiple screens via swipe left/right. - * Display 24h graphs for steps + hrm. + * Display month graphs for steps + hrm on screen 2. * Swipe up/down to activate an alarm. * Full-screen mode. -## Screenshot of multiple screens -Access via swipe left/ right + +## Multiple screens support +Access different screens via swipe left/ right ![](screenshot.png) ![](screenshot_2.png) - ## Icons
Icons made by Smashicons, Freepik from www.flaticon.com
From 91a3b5feef9bcbfd965dc6ff3f8e2ab64ea620c1 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:30:40 +0100 Subject: [PATCH 17/48] Updated readme. --- apps/lcars/README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 8c31d04e4..7c56f5481 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -9,13 +9,15 @@ installing those apps. ## Features - * LCARS Style watch face - * Shows different states (charging, out of battery, GPS on etc.) - * Shows customizable data (steps, HRM, battery, temperature etc.) - * Change between multiple screens via swipe left/right. - * Display month graphs for steps + hrm on screen 2. - * Swipe up/down to activate an alarm. - * Full-screen mode. + * LCARS Style watch face. + * Full screen mode - widgets are still loaded. + * Supports multiple screens with different data. + * [Screen 1] Date + Time + Lock status. + * [Screen 1] Shows randomly images of real planets. + * [Screen 1] Shows different states such as (charging, out of battery, GPS on etc.) + * [Screen 1] Swipe up/down to activate an alarm. + * [Screen 1] Shows 3 customizable datapoints on the first screen. + * [Screen 2] Display month graphs for steps + hrm on the second screen. ## Multiple screens support From 6252dc89828d2fec9f73e4733270dd1ee57b75d1 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:42:47 +0100 Subject: [PATCH 18/48] Use health app also for steps overview. --- apps/lcars/README.md | 7 ++----- apps/lcars/lcars.app.js | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 7c56f5481..b7a692c96 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -1,11 +1,8 @@ # LCARS clock A simple LCARS inspired clock. -Note: To display the steps, its necessary to install -the [Pedometer widget](https://banglejs.com/apps/#pedometer%20widget). -To display the month graphs on screen 2, the health app is required. -Nevertheless, lcars can also be used, with limited functionality, without -installing those apps. +Note: To display the steps, the health app is required. +If this app is not installed, the data will not be shown. ## Features diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 53849e840..8d86c09d1 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -271,14 +271,15 @@ function drawPosition1(){ } // Plot HRM graph - var data = new Uint16Array(31); - var cnt = new Uint8Array(31); + var data = new Uint16Array(32); + var cnt = new Uint8Array(32); health.readDailySummaries(new Date(), h=>{ data[h.day]+=h.bpm; if (h.bpm) cnt[h.day]++; }); require("graph").drawBar(g, data, { axes : true, + minx: 1, gridx : 4, gridy : 100, width : 140, @@ -288,10 +289,11 @@ function drawPosition1(){ }); // Plot step graph - var data = new Uint16Array(31); + var data = new Uint16Array(32); health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); require("graph").drawBar(g, data, { axes : true, + minx: 1, gridx : 4, gridy : 5, width : 140, @@ -341,9 +343,15 @@ function draw(){ * Step counter via widget */ function getSteps() { - if (stepsWidget() !== undefined) - return stepsWidget().getSteps(); - return 0; + var steps = 0 + try { + health = require("health"); + } catch(ex) { + return steps; + } + + health.readDay(new Date(), h=>steps+=h.steps); + return steps; } function stepsWidget() { From 23ac5310088c966892bf1b316dcd6bd9440c1a6c Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:49:18 +0100 Subject: [PATCH 19/48] Removed unused code. --- apps/lcars/lcars.app.js | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 8d86c09d1..d63b2c743 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -16,9 +16,6 @@ for (const key in saved_settings) { settings[key] = saved_settings[key] } -var stepsData = new Array(24).fill(0); -let hrmValue = 0; - /* * Colors to use */ @@ -28,10 +25,11 @@ let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; /* - * Position in lcars + * Global lcars variables */ let lcarsViewPos = 0; let drag; +let hrmValue = 0; /* * Requirements and globals @@ -313,9 +311,6 @@ function draw(){ // First handle alarm to show this correctly afterwards handleAlarm(); - // Handle steps for graph data - handleSteps(); - // Clear data var current = new Date(); if(current.getHours() == 0 && current.getMinutes() == 0){ @@ -354,24 +349,6 @@ function getSteps() { return steps; } -function stepsWidget() { - if (WIDGETS.activepedom !== undefined) { - return WIDGETS.activepedom; - } else if (WIDGETS.wpedom !== undefined) { - return WIDGETS.wpedom; - } - return undefined; -} - -function handleSteps(){ - var current_h = (new Date()).getHours(); - if(current_h == 0){ - stepsData[current_h] = getSteps(); - } else { - stepsData[current_h] = getSteps() - stepsData[current_h-1]; - } -} - /* * Handle alarm From e8909dd57efa3a99ad2114c8582130cee3d02d88 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:52:05 +0100 Subject: [PATCH 20/48] Minor design improvements. --- apps/lcars/lcars.app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index d63b2c743..9068868f0 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -165,10 +165,10 @@ function drawLock(){ g.setFontAntonioMedium(); g.setColor(cOrange); g.clearRect(120, 10, g.getWidth(), 75); - g.drawString("LCARS", 130, 15); - g.drawString("B-JS2", 130, 35); + g.drawString("LCARS", 130, 12); + g.drawString("B-JS2", 130, 32); if(Bangle.isLocked()){ - g.drawString("LOCK", 130, 55); + g.drawString("LOCK", 130, 52); } } @@ -223,7 +223,7 @@ function drawPosition0(){ var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 25, 12); + g.drawString(timeStr, 25, 10); // Write date g.setColor(cWhite); @@ -231,7 +231,7 @@ function drawPosition0(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 28, 58); + g.drawString(dayStr, 28, 56); // Draw data g.setColor(cWhite); From 0de5a23736eaa4a8152cba314dfbcecf2d817b62 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 22 Dec 2021 08:45:13 +0100 Subject: [PATCH 21/48] Fix: Gadgedbridge freezes screen --- apps/lcars/lcars.app.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 9068868f0..2104c6f7f 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -30,6 +30,7 @@ let cWhite = "#FFFFFF"; let lcarsViewPos = 0; let drag; let hrmValue = 0; +var connected = NRF.getSecurityStatus().connected; /* * Requirements and globals @@ -311,13 +312,6 @@ function draw(){ // First handle alarm to show this correctly afterwards handleAlarm(); - // Clear data - var current = new Date(); - if(current.getHours() == 0 && current.getMinutes() == 0){ - stepsData = new Array(24).fill(0); - hrmData = new Array(24).fill(0); - } - // Next draw the watch face g.reset(); g.clearRect(0, 0, g.getWidth(), g.getHeight()); @@ -396,7 +390,13 @@ function handleAlarm(){ */ Bangle.on('lcdPower',on=>{ if (on) { - draw(); // draw immediately, queue redraw + // Whenever we connect to Gadgetbridge, reading data from + // health failed. Therefore, we update and read data from + // health iff the connection state did not change. + if(connected == NRF.getSecurityStatus().connected) { + draw(); // draw immediately, queue redraw + } + connected = NRF.getSecurityStatus().connected } else { // stop draw timer if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; From 1cf197df6faf28c23f666bfe107657c930bc574d Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 22 Dec 2021 12:28:01 +0100 Subject: [PATCH 22/48] Sitch between month / 24h --- apps/lcars/lcars.app.js | 113 +++++++++++++++++++++++++++------------- 1 file changed, 76 insertions(+), 37 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 2104c6f7f..afbca2b8b 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -31,6 +31,7 @@ let lcarsViewPos = 0; let drag; let hrmValue = 0; var connected = NRF.getSecurityStatus().connected; +var plotWeek = false; /* * Requirements and globals @@ -270,36 +271,71 @@ function drawPosition1(){ } // Plot HRM graph - var data = new Uint16Array(32); - var cnt = new Uint8Array(32); - health.readDailySummaries(new Date(), h=>{ - data[h.day]+=h.bpm; - if (h.bpm) cnt[h.day]++; - }); - require("graph").drawBar(g, data, { - axes : true, - minx: 1, - gridx : 4, - gridy : 100, - width : 140, - height : 50, - x: 5, - y: 25 - }); + if(plotWeek){ + var data = new Uint16Array(32); + var cnt = new Uint8Array(32); + health.readDailySummaries(new Date(), h=>{ + data[h.day]+=h.bpm; + if (h.bpm) cnt[h.day]++; + }); + require("graph").drawBar(g, data, { + axes : true, + minx: 1, + gridx : 5, + gridy : 100, + width : 140, + height : 50, + x: 5, + y: 25 + }); - // Plot step graph - var data = new Uint16Array(32); - health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); - require("graph").drawBar(g, data, { - axes : true, - minx: 1, - gridx : 4, - gridy : 5, - width : 140, - height : 50, - x: 5, - y: 115 - }); + // Plot step graph + var data = new Uint16Array(32); + health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); + require("graph").drawBar(g, data, { + axes : true, + minx: 1, + gridx : 5, + gridy : 5, + width : 140, + height : 50, + x: 5, + y: 115 + }); + + // Plot day + } else { + var data = new Uint16Array(24); + var cnt = new Uint8Array(24); + health.readDay(new Date(), h=>{ + data[h.hr]+=h.bpm; + if (h.bpm) cnt[h.hr]++; + }); + require("graph").drawBar(g, data, { + axes : true, + minx: 1, + gridx : 4, + gridy : 100, + width : 140, + height : 50, + x: 5, + y: 25 + }); + + // Plot step graph + var data = new Uint16Array(24); + health.readDay(new Date(), h=>data[h.hr]+=h.steps); + require("graph").drawBar(g, data, { + axes : true, + minx: 1, + gridx : 4, + gridy : 1000, + width : 140, + height : 50, + x: 5, + y: 115 + }); + } g.setFontAntonioMedium(); g.setColor(cWhite); @@ -394,13 +430,14 @@ Bangle.on('lcdPower',on=>{ // health failed. Therefore, we update and read data from // health iff the connection state did not change. if(connected == NRF.getSecurityStatus().connected) { - draw(); // draw immediately, queue redraw + draw(); } - connected = NRF.getSecurityStatus().connected } else { // stop draw timer if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; } + + connected = NRF.getSecurityStatus().connected }); Bangle.on('lock', function(isLocked) { @@ -456,14 +493,16 @@ Bangle.on("drag", e => { // Vertical swipe } else if (Math.abs(dy)>Math.abs(dx)+10) { - if(lcarsViewPos != 0){ - return; + if(lcarsViewPos == 0){ + if(dy > 0){ + decreaseAlarm(); + } else { + increaseAlarm(); + } } - if(dy > 0){ - decreaseAlarm(); - } else { - increaseAlarm(); + if(lcarsViewPos == 1){ + plotWeek = dy < 0 } } From e81b97dc6f5adbbadde30aea4498a969a1421bfd Mon Sep 17 00:00:00 2001 From: David Peer Date: Thu, 23 Dec 2021 10:08:22 +0100 Subject: [PATCH 23/48] Minor change --- apps/lcars/lcars.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index afbca2b8b..d9587c1ac 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -329,7 +329,7 @@ function drawPosition1(){ axes : true, minx: 1, gridx : 4, - gridy : 1000, + gridy : 2000, width : 140, height : 50, x: 5, From fdcc1f50dbef5a330bab703dc2300cf8c89796b8 Mon Sep 17 00:00:00 2001 From: David Peer Date: Thu, 23 Dec 2021 14:10:21 +0100 Subject: [PATCH 24/48] Show BT status. --- apps/lcars/lcars.app.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index d9587c1ac..32020a01c 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -168,7 +168,11 @@ function drawLock(){ g.setColor(cOrange); g.clearRect(120, 10, g.getWidth(), 75); g.drawString("LCARS", 130, 12); - g.drawString("B-JS2", 130, 32); + if(connected){ + g.drawString("BT-CO", 130, 32); + } else { + g.drawString("BT-NC", 130, 32); + } if(Bangle.isLocked()){ g.drawString("LOCK", 130, 52); } @@ -502,7 +506,7 @@ Bangle.on("drag", e => { } if(lcarsViewPos == 1){ - plotWeek = dy < 0 + plotWeek = dy < 0 ? true : false; } } From 6c7fd262b7cff644fd7a0b811b78f5311abfca16 Mon Sep 17 00:00:00 2001 From: David Peer Date: Thu, 23 Dec 2021 14:17:05 +0100 Subject: [PATCH 25/48] Minor improvement --- apps/lcars/lcars.app.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 32020a01c..5f328389e 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -307,6 +307,11 @@ function drawPosition1(){ y: 115 }); + g.setFontAntonioMedium(); + g.setColor(cWhite); + g.drawString("HRM", 122, 9); + g.drawString("STEPS [K]", 90, 96); + // Plot day } else { var data = new Uint16Array(24); @@ -339,13 +344,12 @@ function drawPosition1(){ x: 5, y: 115 }); + + g.setFontAntonioMedium(); + g.setColor(cWhite); + g.drawString("HRM [24]", 90, 9); + g.drawString("STEPS [24]", 82, 96); } - - g.setFontAntonioMedium(); - g.setColor(cWhite); - g.drawString("HRM", 122, 9); - g.drawString("STEPS [K]", 90, 96); - } function draw(){ From abd761bff9f4d45f08388cf876e0b3f5971b3e5c Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 13:43:23 +0100 Subject: [PATCH 26/48] Minor improvements --- apps/lcars/lcars.app.js | 54 +++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 5f328389e..29c349fe9 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -128,25 +128,25 @@ function printData(key, y){ if(key == "Battery"){ var bat = E.getBattery(); - g.drawString("BAT:", 28, y); - g.drawString(bat+ "%", 70, y); + g.drawString("BAT:", 26, y); + g.drawString(bat+ "%", 68, y); } else if(key == "Steps"){ var steps = getSteps(); - g.drawString("STEP:", 28, y); - g.drawString(steps, 70, y); + g.drawString("STEP:", 26, y); + g.drawString(steps, 68, y); } else if(key == "Temp."){ var temperature = Math.floor(E.getTemperature()); - g.drawString("TMP:", 28, y); - g.drawString(temperature + "C", 70, y); + g.drawString("TMP:", 26, y); + g.drawString(temperature + "C", 68, y); } else if(key == "HRM"){ - g.drawString("HRM:", 28, y); - g.drawString(hrmValue, 70, y); + g.drawString("HRM:", 26, y); + g.drawString(hrmValue, 68, y); } else { - g.drawString("NOT FOUND", 28, y); + g.drawString("NOT FOUND", 26, y); } } @@ -167,14 +167,14 @@ function drawLock(){ g.setFontAntonioMedium(); g.setColor(cOrange); g.clearRect(120, 10, g.getWidth(), 75); - g.drawString("LCARS", 130, 12); + g.drawString("LCARS", 128, 13); if(connected){ - g.drawString("BT-CO", 130, 32); + g.drawString("BT-CO", 128, 33); } else { - g.drawString("BT-NC", 130, 32); + g.drawString("BT-NC", 128, 33); } if(Bangle.isLocked()){ - g.drawString("LOCK", 130, 52); + g.drawString("LOCK", 128, 53); } } @@ -196,16 +196,15 @@ function drawState(){ timeInMinutes % 4 == 1 ? iconMars : timeInMinutes % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 120, 118); + g.drawImage(iconImg, 118, 107); // Alarm within symbol g.setFontAlign(-1, -1, 0); g.setFontAntonioMedium(); - g.drawString("STATUS", 123, 97); if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 120+25, 118+25+1); + g.drawString(getAlarmMinutes(), 118+25, 107+25+1); } } @@ -225,11 +224,12 @@ function drawPosition0(){ drawLock(); // Write time + g.setFontAlign(0, -1, 0); g.setColor(cWhite); var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 25, 10); + g.drawString(timeStr, 70, 10); // Write date g.setColor(cWhite); @@ -237,9 +237,10 @@ function drawPosition0(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 28, 56); + g.drawString(dayStr, 70, 56); // Draw data + g.setFontAlign(-1, -1, 0); g.setColor(cWhite); printData(settings.dataRow1, 97); printData(settings.dataRow2, 122); @@ -296,21 +297,24 @@ function drawPosition1(){ // Plot step graph var data = new Uint16Array(32); health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); + var gridY = parseInt(Math.max.apply(Math, data))-1; + gridY = gridY <= 0 ? 1 : gridY; require("graph").drawBar(g, data, { axes : true, minx: 1, gridx : 5, - gridy : 5, + gridy : gridY, width : 140, height : 50, x: 5, y: 115 }); + g.setFontAlign(1, 1, 0); g.setFontAntonioMedium(); g.setColor(cWhite); - g.drawString("HRM", 122, 9); - g.drawString("STEPS [K]", 90, 96); + g.drawString("WEEK HRM", 154, 27); + g.drawString("WEEK STEPS [K]", 154, 115); // Plot day } else { @@ -334,21 +338,23 @@ function drawPosition1(){ // Plot step graph var data = new Uint16Array(24); health.readDay(new Date(), h=>data[h.hr]+=h.steps); + var gridY = parseInt(Math.max.apply(Math, data)/100)*100; require("graph").drawBar(g, data, { axes : true, minx: 1, gridx : 4, - gridy : 2000, + gridy : gridY, width : 140, height : 50, x: 5, y: 115 }); + g.setFontAlign(1, 1, 0); g.setFontAntonioMedium(); g.setColor(cWhite); - g.drawString("HRM [24]", 90, 9); - g.drawString("STEPS [24]", 82, 96); + g.drawString("DAY HRM", 154, 27); + g.drawString("DAY STEPS", 154, 115); } } From ee63b2630ef8c7bbea9d8cb6d60b140416d33d44 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 13:50:48 +0100 Subject: [PATCH 27/48] Week - k steps, dax,steps. --- apps/lcars/lcars.app.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 29c349fe9..f9fc37ee6 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -297,7 +297,7 @@ function drawPosition1(){ // Plot step graph var data = new Uint16Array(32); health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); - var gridY = parseInt(Math.max.apply(Math, data))-1; + var gridY = parseInt(Math.max.apply(Math, data)/2); gridY = gridY <= 0 ? 1 : gridY; require("graph").drawBar(g, data, { axes : true, @@ -314,7 +314,7 @@ function drawPosition1(){ g.setFontAntonioMedium(); g.setColor(cWhite); g.drawString("WEEK HRM", 154, 27); - g.drawString("WEEK STEPS [K]", 154, 115); + g.drawString("WEEK STEPS [k]", 154, 115); // Plot day } else { @@ -338,7 +338,8 @@ function drawPosition1(){ // Plot step graph var data = new Uint16Array(24); health.readDay(new Date(), h=>data[h.hr]+=h.steps); - var gridY = parseInt(Math.max.apply(Math, data)/100)*100; + var gridY = parseInt(Math.max.apply(Math, data)/1000)*1000; + gridY = gridY <= 0 ? 1000 : gridY; require("graph").drawBar(g, data, { axes : true, minx: 1, From 90d1df2ca068616fe72c3158492be745cb463bed Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 13:51:18 +0100 Subject: [PATCH 28/48] Typo --- apps/lcars/lcars.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index f9fc37ee6..aea7c60d2 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -314,7 +314,7 @@ function drawPosition1(){ g.setFontAntonioMedium(); g.setColor(cWhite); g.drawString("WEEK HRM", 154, 27); - g.drawString("WEEK STEPS [k]", 154, 115); + g.drawString("WEEK STEPS [K]", 154, 115); // Plot day } else { From f7256c011d8cb825b1525e8453325f0c9abdaea5 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:08:45 +0100 Subject: [PATCH 29/48] Show planet for one hour instead of one minute. --- apps/lcars/lcars.app.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index aea7c60d2..9b2ef59c6 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -185,16 +185,17 @@ function drawState(){ g.setColor(cWhite); var bat = E.getBattery(); - var timeInMinutes = getCurrentTimeInMinutes(); + var current = new Date(); + var hours = current.getHours(); var iconImg = isAlarmEnabled() ? iconAlarm : Bangle.isCharging() ? iconCharging : bat < 30 ? iconNoBattery : Bangle.isGPSOn() ? iconSatellite : - timeInMinutes % 4 == 0 ? iconSaturn : - timeInMinutes % 4 == 1 ? iconMars : - timeInMinutes % 4 == 2 ? iconMoon : + hours % 4 == 0 ? iconSaturn : + hours % 4 == 1 ? iconMars : + hours % 4 == 2 ? iconMoon : iconEarth; g.drawImage(iconImg, 118, 107); From e75960ab116cf0278ab2833175cf79baafccb5f6 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:18:35 +0100 Subject: [PATCH 30/48] Updated icon and screenshots --- apps/lcars/lcars.icon.js | 2 +- apps/lcars/screenshot.png | Bin 4813 -> 4746 bytes apps/lcars/screenshot_2.png | Bin 2802 -> 3027 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/lcars.icon.js b/apps/lcars/lcars.icon.js index c404728e0..49694cf7c 100644 --- a/apps/lcars/lcars.icon.js +++ b/apps/lcars/lcars.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwgeevPnAQsc+fPngCE+/fvoCEvAbIA4/AgFzEZwRBjwjNvBUBEZ3eCIMOEZtwCIMBEZuARYU5EZecTocHEZf0CIcBEbvgaggjKTwIAEbQpoHAAiSEeoYQHJQr1CCBJKEIgcBI4xKFaIdt3AOFgfuAYMeEYLRBj1pLQ4ICuYjBAgPbtoRHhu3AYN5VoMGzVpI49502AgPPVoM27dsK48N23cgE5CgOmzVoCI4LBzCSB8EP2wjJgILBAYMAhIjBsAjJzVwg47C7YRJEYhfBEZXmEZ53CI4q2BEAiVCkwjCNYaMGboQjDkBfDCAbdB04EBgyPDC4YAD/dt2wRCHIM5njXCCAcHboOmCIQ0B5/nfYT6DFIIjBeAcOvM8+EAjitFEYJEBAANzEYOeeowjCFgUDzwjB+YrDgAgBEYWcA4Mc+YjCvAQCgftEANuDIYOBEYXPNwIAIg4OCCgXkCBEOEZDvBEAhEB4AjF/inB8+OJQOOvILBoAjGU4IFDAQYjGbQIdCAQt4EY0DEZACDEYceEZACDC4bLBEZwCO")) +require("heatshrink").decompress(atob("lmy5YCFi1ZsuWAQgGGy1YgXbtu2AQgjH4EAEZ2XCINbEZxRBvIjNzwRBh4jN2ARBgIjNwCIClojMTQcFEZdkCIgjLngRDg4jLsDREEZOzTwIAEjwjHs5oDAAiSEEYUcCA5uFeoQQJAAP2EYRECgJHGJQrRDps4BwsD5wDBrYjB+AXBtJaHBAV5spoC6dNGY8NmBBBEYMAg2atJHHvOmwEB8qtBmnTpgjImncgEtkEB02atARHBYOYSQPgh4jKgILBCIMAhIjBc4ojEzVwCII7B6dAEZpfBEZXmEZ53CI4twEAqVCkwjCNYaMGboQjDUgIjGboOnAgMGR4WgC4YAD+dNmgEBgg5BluUa4QQDg7dB0wjCJoNl2z7CAQJBDEYLwDh9tyxEBjitFEYJEBfwQjB7z1GEYQsCgfbEYNZT4ggBEYWcOIVZEYPbtAQCgfNEANODIYOBEYVlDQQAHg4OCCgW0CBEKEYySBg4gFi1Z4AjFWwM922OJQOPtoLBoBHGgPlAoQCEoAjGgIdCAQto+wjFhIgFAQwjDrYjIAQYjDEBQjFARwA==")) diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 98bf50546ab06532dbee2dcb58524a138c9ed9f2..11695ba5b05a6a6885ad9bdc7203fed50853e4bb 100644 GIT binary patch delta 4740 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 From 6fab0c8c87fc7d923495f0c11a90f2dc50409154 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:21:21 +0100 Subject: [PATCH 31/48] Moved state icon into middle of lower screen. --- apps/lcars/lcars.app.js | 4 ++-- apps/lcars/screenshot.png | Bin 4746 -> 4772 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 9b2ef59c6..7dcdca4ee 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -197,7 +197,7 @@ function drawState(){ hours % 4 == 1 ? iconMars : hours % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 118, 107); + g.drawImage(iconImg, 115, 107); // Alarm within symbol g.setFontAlign(-1, -1, 0); @@ -205,7 +205,7 @@ function drawState(){ if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 118+25, 107+25+1); + g.drawString(getAlarmMinutes(), 115+25, 107+25+1); } } diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 11695ba5b05a6a6885ad9bdc7203fed50853e4bb..22e00581be28e9800ad17851901460ef318373a3 100644 GIT binary patch delta 4767 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 Sofwz^0000 Date: Tue, 28 Dec 2021 14:24:06 +0100 Subject: [PATCH 32/48] Minor changes --- apps/lcars/lcars.app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 7dcdca4ee..1dbae6668 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -169,9 +169,9 @@ function drawLock(){ g.clearRect(120, 10, g.getWidth(), 75); g.drawString("LCARS", 128, 13); if(connected){ - g.drawString("BT-CO", 128, 33); + g.drawString("CONN", 128, 33); } else { - g.drawString("BT-NC", 128, 33); + g.drawString("NOCON", 128, 33); } if(Bangle.isLocked()){ g.drawString("LOCK", 128, 53); From 53e37132055cae7ccab96598910927a8949b0e51 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:24:41 +0100 Subject: [PATCH 33/48] Updated screenshot --- apps/lcars/screenshot.png | Bin 4772 -> 4798 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 22e00581be28e9800ad17851901460ef318373a3..4d4911227dc8ce48bd8db53c3947900c4e8ac87e 100644 GIT binary patch delta 4793 zcmV;q5=QN$CB7w)F@JbTL_t(|UhQ33mg67{oZSD=Juluuu$B^t%~Ai%bQ>^8MNx>w zuYdpk{r%H^{{H^`dmSm`-`!#>*@(tic z8?ziUb^-6(wE%$M#_Lrd$M@U;9N=9`9zb9K0KBN*zX9C35q}U9Xj(0vhXpN5K4LkTKuu$Noz@DeeLClqtz83}gmpx~Q1GmzSeVl*S zy(vg*J7t$P2n?JvE621s_&A0>|4x;Yj|AGt@UHeS27g9}T`Oayy|at+iHX~C06vC) ziGfc>O_?-Jk1}w|%qNI*P;v2Sev7+7M?Eqk^Y zrZMpG$}jC544il-0F2N7b0+*6#WHXQ10U9*SgBSoBJyF=O-?acw7ySgU`vz&(ZERb z;fm_aw0{=@1%$>enmkznz`fd#4*!S-rlrm&ih(jT7jonBb3PxYflOCML|d1%0cG9~By2@Q(s; zNqdF>m^c%OFzy8&Vk;)HEG%^nY0G8m_s0TQ+E8O*^_sp~3*cUDkXF*PEsop-P?HDR z#7>G6KN7$a%Z^}RZXv=lf$Rlft&?gSb$_({EuTMzfmZ;q#{9Fjp(XIV%6?1~VkYO8 zu&);G8!?J_fvjaYkBCBO&efiK8@N{cQqh;zZJ@L+ax6$%k)swXH0`VHeaLlWZkuszNPUN6wDl4>=I;2g@ zGcW>9Bn@ILDNRfEZ4TfAq0+%k%Su`>aDtSY(9=h|eec_~#A2xl6$Ru{_C>+jvJ+Yu z7&%p(E<#8eSWAbH%HtRqX>^(<2Y+)35Np_%0&r~`tof16=2iyIwX${uU)s_swdZjf z*y_Ai0M zaOP!{Ffg|v2f1bnZ9_0{)c?4?F=h?Rsi)(Kc?hiuykzcp~_GBLvBTJ*wj zf^73jXyDEO)-?5yQ6$sAwSRjdG-gE@A9YJGFls3#ot1&71aNXD?hQWfG_ba74GFbT z41Dw-@iPaUn}UG@z}t#0^|8y?4_pb3$llKawei?~HT`~*9|No3lNr^-c<+-fFx8>X zCmTB2*2V$>;5K$$s#NJ_o^*m``Mz6zAs;%yvl=b{Y_-?}(`#E9(SPUzcUF#yG9cGR zA*K!hBUXBN8su&?%UL+&ZZxgape7#%U}+Qh`HZ@mhP$m1jju{8TBWO9wPhmjrEG#a zSxYB@sRWGL**GrFtksix{`%X))-FFULnLAZfRT6RhR~LNYs*AVbEIjs`jj{lVPMOR z>>B93zJW|kKr2yQf|m#;Lq;0VBiBCh%TmP@0JNpKC?%n0ow4)l_^Pxv`i`5uo?ru8JChB zp@9#pcmp^c&QDNTIz*noL{|?3a6}yS7P9Z z0|T+)8i&?`jenk`eAa_F$spBvD1ZS5MsB5~Zs^fIp#|~-tKNPp3PBC?)^HXI-jWDI zIwEM3MNN-eo+B%9$X*D`?UrtPA%1Bkjsg`2Y74`ov0F5q)Jd$m904-5+f18)QH)#* za-^;|iT8^uaXHf=l7cg?W#T18S0wi3I$nvx$#l&mp* z3kjitWaj5nGH|X-PXkI{uGEHLu1t#MQ-^7QkrqIZ#StV;YY8zkK()FJXJD;@p3gO~ z7q+A)o~k04GuG$}@5vXPvf1p>fQdS z`+r8Ghr}r7Dn^bpono}3KABmwLr3&$B%gf zytQtL{HO(v?UVst)L@ZrE(`1cb`tu*ymLAC7i#m`j$=6OphRZHzhKm8V?PV*XX1i^ z`&m5RSGrxZ9;l))RUd7UVLp+1E`jIDhB3e0E9YS;P)1Obpz!HEpr+W^)T1P4c9M{20%X>OFk@ii=z+7BdTJ1s_Tbf1#7|Q%B z0QgTTg!?7@WkNiRke#b4^8`-dwjI*`8U(VE-SA^djh~Mth!K{pJD$1 z>oqZ}i$?U)!~x)iz&5I?sejDKzeZ$Xw)*>H(levfsT1B@R0=>=sGd57ZZ19U@l-UtwvGLs4bZ(JZcvL z(1itUc{pXPw0>y$GeCZ;>%P>cuC(n}^b(&fPV%3f$D?gs8Q2QacYg!(qeVF&xH8YY zB}PJ*cGGm)xxTbMX!#{|*YYG-+%egialIEix-u}gr$F1JgX|;F?wZgXOR=MN299HV zt)1F)OI=%}{fauI%n2~?PQVER7v#6JX$S*zz(^aff%?{6$!Y0H^A|9?!pvH|GwU*%%Q;~1Fg1Xe(6fRor7dB3InQowrVeZ}Gmvt-Gq48YQVEeawidiO`*N}e?Qruk zu=8#+CYqo#_T&OU`-3Aps5L?l^R3TaM?}qc}JA$tF^ng2EHvLpCPX-6h@KF z%|@@6sDHhEaU-gpUn$}oNwJeBfNKHr$S6cX{P)_JbE1e?9%fheIEJp26H_qoYyj36 zGi3p5r=)asZ3nAmx!VMbSftqALG5ukUcN;$5|Cc)1b_EXl(wO(2DUm|8m5tFmNZsS za%F1()t;9+(wdKrIta{sW8nM5G*T0&$?>h zT}FKyfPagRYTFZg09fj1l03=V_?h$U9aVc?>P&0Cd?oDk%ti8*M(PkZpBJqY`=f=kK->>D0l%9#)*V41YG-U^t19AEm!*;_t)l76z_0U3U#! zTj9uGZh@QTJ-0##iwwnY%T8kCyWDD{57)fnJ*OzHWMo{%0$kjcj|V5$N`ad90@Zs_ zLybn%?E?+~F9SWlidwZNd&1aMrMtW^Wmgi%%{-pgoVcu-)5l!1Zi^Pg0ZuInQfsmR zaDS}@7tEjUMmw8O6ZgHF;eggDKaM?<6+0(MOLqgX6uhVQ2T(@U7B}8`ye0=yoEBM# zpwf8Nt)|Z)+7#XMKuyfF@@wi&<$WB0JwU7hwD!5T6HCjZWJPINS3Y7o^<#}^Ki?|z2wq#44gZeV=t*A)Nb_A0ITWS6#=Yi*V5;3 zM<`6#eI-s~;1s~fL<*4=wQL{(GPS!VIc8_zbmDx4$TCfvZ{YFVm{Wq`sTp{70DtFk z(5C?Slw%f+Yh5HM0V^4Wm`wwhGH|Pj5>+lLF>0CL%gIkJXL$xDdu7c<14)5sr_ccX zWB`qB+f*7j9g=U$l-VMM7K`;TtR!L5@&mvg)-Ee!DhB32i$omCnvdn8-fso)D2<4< zaNShXGVp2AoR!m=vNo&NfQPzGV}DrmxmI7aK9TNYfk!iNDS%NxYEg&$c>vhI>jeW7 zHq{m)N&y}KZUNxG_oDW3E~D~aWb%*b*?jho3`0^w(5;b zjmChv8rJ3?*YdUA+&v1hmU*JKvs)k-cy}uC2tdj-4j@5gD*o)Dl9G{W#sdl{G3lSjp zlT%Lx%}nhgFE$Af2Z(0^sWKE`5O3!3icYLzjHu^&as|FxD!{y+b3H<%vv=zM-#ovW TQ(~2;00000NkvXXu0mjfRvY*a delta 4767 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 tM)Y$%a|M1{D!{zn52dV From 5e596f49451c95e296019c29eb9e78af5c483f1e Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:36:23 +0100 Subject: [PATCH 34/48] Show disconnect immideately. --- apps/lcars/lcars.app.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 1dbae6668..f27c26b7f 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -200,13 +200,13 @@ function drawState(){ g.drawImage(iconImg, 115, 107); // Alarm within symbol - g.setFontAlign(-1, -1, 0); g.setFontAntonioMedium(); if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); g.drawString(getAlarmMinutes(), 115+25, 107+25+1); } + g.setFontAlign(-1, -1, 0); } @@ -447,6 +447,9 @@ Bangle.on('lcdPower',on=>{ // health iff the connection state did not change. if(connected == NRF.getSecurityStatus().connected) { draw(); + } else { + connected = NRF.getSecurityStatus().connected + drawLock(); } } else { // stop draw timer if (drawTimeout) clearTimeout(drawTimeout); From 4769a1dc078dce61a1bad6a255f92f179b62e6c1 Mon Sep 17 00:00:00 2001 From: Adam Schmalhofer Date: Sun, 12 Dec 2021 19:08:51 +0100 Subject: [PATCH 35/48] lcars: Add implicit semicolons --- apps/lcars/lcars.app.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index f27c26b7f..5042560d3 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -42,73 +42,73 @@ var bgLeft = { width : 27, height : 176, bpp : 3, transparent : 0, buffer : require("heatshrink").decompress(atob("AAUM2XLlgCCwAJBBAuy4EAmQIF5cggAIGlmwgYIG2XIF42wF4ImGF4ImHJoQmGJoQdJhZNHNY47CgRNGBIJZHHgRiGBIRQ/KH5QCAFCh/eX5Q/KAwdCAGVbtu27YCCoAJBkuWrNlAQRGCiwRDAQPQBIMJCIYCBsAJBgomEtu0WoQmEy1YBIMBHYttIwQ7FyxQ/KHFlFAQ7F2weCHYplKChRTCCg5TCHw5TMAD0GzVp0wCCBBGaBIMaBAtpwECBA2mwEJBAugDgMmCIwJBF5EABAtoeQQvGCYQdPJoI7LMQzTCLJKAGzAJBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A==")) -} +}; var bgRight = { width : 27, height : 176, bpp : 3, transparent : 0, buffer : require("heatshrink").decompress(atob("lmy5YCDBIUyBAmy5AJBhYUG2EAhgIFAQMAgQIGCgQABCg4ABEAwUNFI2AKZHAKZEgGRZTGOIUDQxJxGKH5Q/agwAnUP7y/KH4yGeVYAJrdt23bAQVABIMly1ZsoCCMgUWCIYCB6AJBhIRDAQNgBIMFEwlt2i1CEwmWrAJBgI7FtpGCHYuWKH5QxEwpQDlo7F0A7IqBZBEwo7BCIwCBJo53CJoxiCJpIAdgOmzVpAQR/CgAIEAQJ2CBAoCBBIMmCg1oD4QLGFQUCCjQ+CKYw+CKY4JCKYwoCGRMaGREJDoroCgwdFzBlLKH5QvAHih/eX5Q/KE4A8UP7y/KH5QGDpg7HJoxZCCIx3CJowmCF4yACJox/CgAA=")) -} +}; var iconEarth = { width : 50, height : 50, bpp : 3, buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) -} +}; var iconSaturn = { width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4A/AEkQuPHCJ0ChEAwARNjAjBjgjOhs06Q2OEYVx4ARMhEggUMkANIDoIgBoEEgEBNxJEC6ZrBAAMwNxAjDNYcHNxIjB7dtEwIHBwRoKj158+cuPEjlwCRAjC23bpu0wRNDAAsHEYWeEwaSJ6YjCAQUNSRQjEzxQBWZMNEYlsmg2JWAIjCz95SoJuJggjDtuw6dMG5JKCz998wFBJRVNEYW0yaVBJRNhJQN9+4pCzhKJmBKC4YpB/fINxIgCzFxSoQ3J4ENm3CAQPb98wbpEcAQMYWwKYBNxMDXgc2/fv3g2IEAOAgAjBjy5CEhEMfYICBgfPnjdLjj+CgMHiC3JknDhhoINw4jCAB0IJQIANR4QjPAH4A/AFA")) -} +}; var iconMoon = { width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4AQjlx44CCCZsg8eOkHDwAQKEYgmPhEgEQM48AOIgMHEYoCB4ATI8UAmH/x04JoRuJsImHuBKLn37EwZuIgEQOI8cEpXj/yYBhE8+YNGgkYoJxITBUPnAaC///nC+FjBuIOJZEB8YeCh/8AoYACoMEEAnEjhQDPQJKJ/DCDAoi5DoLdHAoMQgLjFWYPOnngh02IwXzwDjEgPGEYS8BI4MBYoSVG4fP/nghkAgZrDkngJQqSG4gvBg4sBQgkImHihEAWwP8ZBMBEYl5/+cSoVAGQIUFh04weJn///0gj/OEw5KEz45BzhuCTYQAEgePB4IACAoJuBnAQEa4XHjxKB//xFgWHJQsCRgMDEonipwjENwUBDQNx8+evvn/hTDLw3igE+EgZxB8UOXIvEJQUfEYOfv53DEQkgga5BJQvzx84cAj+CDoNh8/eEYJKDuCSEcocnEon+/7xEgFBIIcfB4Mf/IICXI2DgDdBAAn758gCIq5Dv4zBvJuIOIfjEgvP/ARHgwdCB4P3AoTdFAAk4EYk8SQgAFTALaDSQwAGh08//vnDmBABYmEEZYAzA==")) -} +}; var iconMars = { width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4ATjlwCJ+Dh0wwAQMg0cuPHjFhCZkDps0yVJkmQCBMEjFx42atOmzQmLhMkEYQCCCREQoOGEYmmzB0IEY4CBkARGoJKBEYQCEzgSGkGSpAjDyYCCphuGiFhJQgCD8ASFgRHGAQKbB6BuHJRGeOIsINxEk6dNmARDgMEjQjHAQPnVQojIyZKB6YSDNwK5FAQt54BuDXJIjBEwK5EgxKKXgq5BJRdgXIojJAQJKMcAM0EwM2JUApDoCVFExa7FkGCgAmIkAREEwUEjAmHCIgABhEggQmFpACBCIojBEwRQCzVhwkQU4YADgQmBwQCCI4IFBCAojFAQojGJQQjDAQgRGEZICBEo4gFyUIkilFJQUYEAZrBAQMYNw5KDSQSbCNwwABgOGEwgCBsPACQ5xGwdNnARJcAVh48evvnCJK8Chs+/fv33gCRcB48cuPHCBYA/ADAA==")) -} +}; var iconSatellite = { width : 50, height : 50, bpp : 3, transparent : 2, buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA=")) -} +}; var iconAlarm = { width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("kmSpICEp//BAwCJn/+CJ8k//5CKAABCJs8uPH//x48EI5YjCAARNKEYUcv//jgFBExEnEYoAC+QmHIgIgC/gpCuPBCI2fIgU4AQXjA4P8CIuTEYZKBAolwHApXBEAWP//jxwpBAALaFDoYCIiQmDDIP4EAT+CEwnJEwYjLAQLaFEYomDKALmDNwoCIOIZuD8AkFgCYDHAQjMAQTdDNwOAEg0Dx0/cYeREZtxQYOTHgJuHOIvkXJy8DNwIACJQ8Ah4NDAAfxEZARHOIIkHg4jQAQb1CQ4KVJgEOnDIBSoIjNAQPBcAaVJcAKVBcDGOcD7OBMQM48BuH8f//JKCnhKNggRBkmfTQJxBEwhuD/gRCyVHJRlyCIVJXgYmB8ZQBAoIKBXIQmCOIt/NxAUCOIImCIgIpCBAJuDAQZEE/huIAQWTDgImBTYQGC8gRFcYpKFCI8kDwQAFCJBfBEAX/+IjBiQRIEw4jJAQc8v//NYwCIOgJrIJpA1OcwbaFAQWQA=")) -} +}; var iconCharging = { width : 50, height : 50, bpp : 3, transparent : 5, buffer : require("heatshrink").decompress(atob("23btugAwUBtoICARG0h048eODQYCJ6P/AAUCCJfbo4SDxYRLtEcuPHjlwgoRJ7RnIloUHoYjDAQfAExEAwUIkACEkSAIEYwCBhZKH6EIJI0CJRFHEY0BJRWBSgf//0AJRYSE4BKLj4SE8BKLv4RD/hK/JS2AXY0gXwRKG4cMmACCJQMAg8csEFJQsBAwfasEAm379u0gFbcBfHzgFBz1xMQZKBjY/D0E2+BOChu26yVEEYdww+cgAFCg+cgIfB6RKF4HbgEIkGChEAthfCJQ0eEAIjBBAMxk6GCJQtgtyVBwRKBAQMbHAJKGXIIFCgACBhl54qVG2E+EAJKBJoWAm0WJQ6SCXgdxFgMLJQvYjeAEAUwFIUitEtJQ14NwUHgEwKYZKGwOwNYX7XgWCg3CJQ5rB4MevPnAoPDJRJrCgEG/ECAoNsJRUwoEesIIBiJKI3CVDti/CJRKVDiJHBSo0YsOGjED8AjBcAcIgdhcAXAPIUAcAYIBcA4dBAQUG8BrBgBuCgOwcBEeXIK2BBAIFBgRqBGoYAChq8CcYUE4FbUYOACQsHzgjDgwFBCIImBAQsDtwYD7cAloRI22B86YBw5QBgoRJ7dAgYEDCJaeBJoMcsARMAQNoJIIRE6A")) -} +}; var iconNoBattery = { text: "NO BAT", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("kmSpIC/AWMyoQIFsmECJFJhMmA4QXByVICIwODAQ4RRFIQGD5JVLkIGDzJqMyAGDph8MiRKGyApEAoZKFyYIDQwMkSQNkQZABBhIIOOJRuEL5gRIAUKACVQMhmUSNYNDQYJTBBwYFByGTkOE5FJWYNMknCAQKYCiaSCpmGochDoSYBhMwTAZrChILBhmEzKPBF4ImBTAREBDoMmEwJVDoYjBycJFgWEJQRuLJQ1kmQCCjJlCBYbjCagaDBwyDBmBuBF4TjJAUQKINBChCDQxZBcZIIQF4NIgEAgKSDiQmEVQKMBoARBAAMCSQLLBVoxqKL4gaCChVCNwoRKOIo4CJIgABBoSMHpIRFgDdJOIJUBCAUJRgJuEAQb+DIIgRIAX4C/ASOQA")) -} +}; // Font to use: // Graphics.prototype.setFontAntonioMedium = function(scale) { // Actual height 20 (19 - 0) g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAA//mP/5gAAAAAAAAAAAAA/gAMAAAAAA/gAPAAAEIIBP+H/8D+IYBP+H/8D+IABCAAwIAfnwP8+PHh448eP3+B4fAAAAAAAH/AD/4AwGAMBgD/4Af8GAAPgAPgAfgAfAAfAA+AAOP/AH/4BgGAYBgH/4A/8AAAAAAAAAQAA/B+f4/+GMPhjv/4/h8Dg/gAcYwAAPwADgAAAAAAAAB//8///sAAaAACAAAMAAb//+f//AAAAAAAbAAGwAA4AA/wADgABsAAbAAAAAAAgAAMAAPwAD8AAMAADAAAAAAAAAAHAAB/AAOAAAAAAAAMAADAAAwAAMAACAAAAAAAAAABgAAYAAAAAAAAA4AD+AP+A/4A/gAOAAAAAAAAAH//j//8wADMAAz//8f/+AAAAAAAMAADAABgAA//+P//gAAAAAAAAAAAAAfgfP4fzAfswfDP/gx/gMAAAHgPj4D8wMDMHAz//8f3+AAEAAAAADwAH8APzA/AwP//j//4AAwAAAD/Hw/x+MwBjOAYz/+Mf/AAAAAAAH//j//8wYDMGAz9/8fP+AAcDAAAwAAMAfjB/4z/wP+AD4AAwAAAAOB/f4///MHAzBwM///H9/gAAAAAAH/Pj/78wGDMBgz//8f/+AAAAAAADhwA4cAAAAAAAAAAAAAADh/A4fgAAAAOAAHwABsAA7gAccAGDAAAAANgADYAA2AANgADYAA2AAAAAAAABgwAccADuAAbAAHwAA4AAAAHwAD8c4/POMHAD/wAfwAAAAAAAAD/wD//B4B4Y/HMf8zMBMyATMwczP+M4BzHwcgf+AA+AAAAAAD4A/+P/8D+DA/4wH/+AB/4AAeAAAAAAA//+P//jBgYwYGP//j//4PH4AAAAAAAf/+P//zgAcwADP4fz+P4Ph8AAAAAAA//+P//jAAYwAGPADj//4P/4AAAAAAA//+P//jBgYwYGMGBgAAAAAAP//j//4wYAMGADBgAAAAAAAA//w///PAHzAQM4MHP7/x+/8AAAAAAD//4//+AGAABgAAYAP//j//4AAAAAAAAAA//+P//gAAAAAAAAAAAHwAB+AABgAAY//+P//AAAAAAAAAAD//4//+APgAf+Afj8PgPjAAYAAAAAAD//4//+AABgAAYAAGAAAAAAA//+P//j/gAD/wAB/gAP4B/4P/AD//4//+AAAAAAAAAAP//j//4P4AAfwAA/g//+P//gAAAAAAAAAA//g//+PAHjAAY4AOP//h//wAAAAAAD//4//+MDADAwA4cAP/AB/gAAAAAAAA//g//+PAHjAAc4APv//5//yAAAAAAD//4//+MGADBgA48AP//h+f4AAAAAAB+Pw/z+MOBjBwY/P+Hx/AAHgwAAMAAD//4//+MAADAAAAAAP//D//4AAOAABgAA4//+P//AAAAwAAP8AD//AA/+AAfgP/4//gPwAAAAA+AAP/4Af/4AD+A//j/wA/wAD/+AA/4B/+P/+D+AAAAAMADj8P4P/4A/4B//w+A+MABgAAA4AAPwAB/gAB/+A//j/gA+AAMAAAAAYwB+MH/jf+Y/8GPwBjAAAAAAP//7//+wABsAAYAAAAAAPAAD/gAH/gAD/gAD4AACAAADAAGwABv//7//+AAAA=="), 32, atob("BQUHCAgVCQQFBQkHBQcFBwgICAgICAgICAgFBQcHBwgPCQkJCQcHCQoFCQkHDQoJCQkJCAYJCQ0ICAcGBwY="), 20+(scale<<8)+(1<<16)); -} +}; Graphics.prototype.setFontAntonioLarge = function(scale) { // Actual height 39 (39 - 1) g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAPgAAAAAB8AAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAD8AAAAAH/gAAAAP/8AAAAf//gAAA///AAAB//+AAAD//8AAAH//4AAAP//wAAAB//gAAAAP/AAAAAB+AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAf////8AP/////4B//////Af/////8D8AAAAfgeAAAAA8DwAAAAHgeAAAAA8D//////gf/////8B//////AP/////wAf////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAHgAAAAAA8AAAAAAPgAAAAAB4AAAAAAf/////gP/////8B//////gP/////8B//////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAD/+AAP8A//wAP/gP/+AH/8D//wD//gfgAA//8DwAAf+HgeAAP/A8DwAH/gHgfgP/wA8D///4AHgP//+AA8A///AAHgB//AAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AA/gAD/AAH/gA/4AA/+AP/AAH/4D/4AA//gfgA4AB8DwAPAAHgeAB4AA8DwAPgAHgfAD+AB8D//////gP/////4B//5//+AD/+H//gAH/AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAP/AAAAAP/4AAAAP//AAAAP/x4AAAf/wPAAAf/gB4AAf/AAPAAP/AAB4AB//////gP/////8B//////gP/////8AAAAAPAAAAAAB4AAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wD/AB///Af+AP//4D/4B///Af/gP//4B/8B4D4AAPgPAeAAA8B4DwAAHgPAfAAB8B4D////gPAf///4B4B////APAD///gAAAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///AAAP////4AH/////wB//////Af/////8D8APAA/geADwAB8DwAeAAHgeADwAA8D4AeAAPgf/j+AH8B/8f///gP/h///4Af8H//+AAPgP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAPAAAAAAB4AAAABgPAAAA/8B4AAB//gPAAD//8B4AH///gPAH///8B4P//+AAPH//wAAB///gAAAP//AAAAB/+AAAAAP+AAAAAB+AAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4A/+AAf/w//+AP//v//4B//////Af/////8D4AfwAPgeAB8AA8DwAHAAHgeAB8AA8D4Af4APgf/////8B//////AP//v//4A//4//8AA/4A/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAD//+D/gB///4f+AP///j/4D///8f/gfAAHgB8DwAA8AHgeAAHgA8DwAA8AHgfgAHgB8D//////gP/////4A/////+AD/////gAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAfgAAB+AD8AAAPwAfgAAB+AD8AAAPwAfgAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DBATExMTExMTExMTCw=="), 45+(scale<<8)+(1<<16)); -} +}; /* * Draw watch face @@ -548,4 +548,4 @@ g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear(); draw(); // After drawing the watch face, we can draw the widgets -// Bangle.drawWidgets(); \ No newline at end of file +// Bangle.drawWidgets(); From 421681fec9c3e8dc5f93996b489fd52ac5375148 Mon Sep 17 00:00:00 2001 From: Adam Schmalhofer Date: Thu, 23 Dec 2021 16:06:55 +0100 Subject: [PATCH 36/48] lcars: Show "0" on timer Sometimes when my watch buzzes, I look at it and am puzzled why. Until I remember that I had a timer set. This now shows a timer of "0". --- apps/lcars/lcars.app.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 5042560d3..6e0a46844 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -201,7 +201,7 @@ function drawState(){ // Alarm within symbol g.setFontAntonioMedium(); - if(isAlarmEnabled() > 0){ + if(isAlarmEnabled()){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); g.drawString(getAlarmMinutes(), 115+25, 107+25+1); @@ -404,7 +404,7 @@ function getCurrentTimeInMinutes(){ } function isAlarmEnabled(){ - return settings.alarm > 0; + return settings.alarm >= 0; } function getAlarmMinutes(){ @@ -429,11 +429,13 @@ function handleAlarm(){ .then(() => new Promise(resolve => setTimeout(resolve, t))) .then(() => Bangle.buzz(t, 1)) .then(() => new Promise(resolve => setTimeout(resolve, t))) - .then(() => Bangle.buzz(t, 1)); - - // Update alarm state to disabled - settings.alarm = -1; - Storage.writeJSON(SETTINGS_FILE, settings); + .then(() => Bangle.buzz(t, 1)) + .then(() => new Promise(resolve => setTimeout(resolve, 5E3))) + .then(() => { + // Update alarm state to disabled + settings.alarm = -1; + Storage.writeJSON(SETTINGS_FILE, settings); + }); } From b8959f7335f56fe1daae00881fcc29fe52e76de1 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 29 Dec 2021 09:25:06 +0100 Subject: [PATCH 37/48] Wrong icon. --- apps/lcars/lcars.app.js | 12 ++++++------ apps/lcars/lcars.icon.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index f27c26b7f..d2295b1f8 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -129,21 +129,21 @@ function printData(key, y){ if(key == "Battery"){ var bat = E.getBattery(); g.drawString("BAT:", 26, y); - g.drawString(bat+ "%", 68, y); + g.drawString(bat+ "%", 65, y); } else if(key == "Steps"){ var steps = getSteps(); g.drawString("STEP:", 26, y); - g.drawString(steps, 68, y); + g.drawString(steps, 65, y); } else if(key == "Temp."){ var temperature = Math.floor(E.getTemperature()); g.drawString("TMP:", 26, y); - g.drawString(temperature + "C", 68, y); + g.drawString(temperature + "C", 65, y); } else if(key == "HRM"){ g.drawString("HRM:", 26, y); - g.drawString(hrmValue, 68, y); + g.drawString(hrmValue, 65, y); } else { g.drawString("NOT FOUND", 26, y); @@ -197,14 +197,14 @@ function drawState(){ hours % 4 == 1 ? iconMars : hours % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 115, 107); + g.drawImage(iconImg, 117, 107); // Alarm within symbol g.setFontAntonioMedium(); if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 115+25, 107+25+1); + g.drawString(getAlarmMinutes(), 117+25, 107+25+1); } g.setFontAlign(-1, -1, 0); } diff --git a/apps/lcars/lcars.icon.js b/apps/lcars/lcars.icon.js index 49694cf7c..22e98a39a 100644 --- a/apps/lcars/lcars.icon.js +++ b/apps/lcars/lcars.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("lmy5YCFi1ZsuWAQgGGy1YgXbtu2AQgjH4EAEZ2XCINbEZxRBvIjNzwRBh4jN2ARBgIjNwCIClojMTQcFEZdkCIgjLngRDg4jLsDREEZOzTwIAEjwjHs5oDAAiSEEYUcCA5uFeoQQJAAP2EYRECgJHGJQrRDps4BwsD5wDBrYjB+AXBtJaHBAV5spoC6dNGY8NmBBBEYMAg2atJHHvOmwEB8qtBmnTpgjImncgEtkEB02atARHBYOYSQPgh4jKgILBCIMAhIjBc4ojEzVwCII7B6dAEZpfBEZXmEZ53CI4twEAqVCkwjCNYaMGboQjDUgIjGboOnAgMGR4WgC4YAD+dNmgEBgg5BluUa4QQDg7dB0wjCJoNl2z7CAQJBDEYLwDh9tyxEBjitFEYJEBfwQjB7z1GEYQsCgfbEYNZT4ggBEYWcOIVZEYPbtAQCgfNEANODIYOBEYVlDQQAHg4OCCgW0CBEKEYySBg4gFi1Z4AjFWwM922OJQOPtoLBoBHGgPlAoQCEoAjGgIdCAQto+wjFhIgFAQwjDrYjIAQYjDEBQjFARwA==")) +require("heatshrink").decompress(atob("mEwgeevPnAQsc+fPngCE+/fvoCEvAbIA4/AgFzEZwRBjwjNvBUBEZ3eCIMOEZtwCIMBEZuARYU5EZecTocHEZf0CIcBEbvgaggjKTwIAEbQpoHAAiSEeoYQHJQr1CCBJKEIgcBI4xKFaIdt3AOFgfuAYMeEYLRBj1pLQ4ICuYjBAgPbtoRHhu3AYN5VoMGzVpI49502AgPPVoM27dsK48N23cgE5CgOmzVoCI4LBzCSB8EP2wjJgILBAYMAhIjBsAjJzVwg47C7YRJEYhfBEZXmEZ53CI4q2BEAiVCkwjCNYaMGboQjDkBfDCAbdB04EBgyPDC4YAD/dt2wRCHIM5njXCCAcHboOmCIQ0B5/nfYT6DFIIjBeAcOvM8+EAjitFEYJEBAANzEYOeeowjCFgUDzwjB+YrDgAgBEYWcA4Mc+YjCvAQCgftEANuDIYOBEYXPNwIAIg4OCCgXkCBEOEZDvBEAhEB4AjF/inB8+OJQOOvILBoAjGU4IFDAQYjGbQIdCAQt4EY0DEZACDEYceEZACDC4bLBEZwCO")) \ No newline at end of file From 92dde29d4540002fd4008a88275d2b38fc82d17c Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 29 Dec 2021 09:26:49 +0100 Subject: [PATCH 38/48] Left align date and time --- apps/lcars/lcars.app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index d2295b1f8..af4ff26e7 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -225,12 +225,12 @@ function drawPosition0(){ drawLock(); // Write time - g.setFontAlign(0, -1, 0); + g.setFontAlign(-1, -1, 0); g.setColor(cWhite); var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 70, 10); + g.drawString(timeStr, 28, 10); // Write date g.setColor(cWhite); @@ -238,7 +238,7 @@ function drawPosition0(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 70, 56); + g.drawString(dayStr, 29, 56); // Draw data g.setFontAlign(-1, -1, 0); From 402a2fc6b4a99ce6b7be75c7a1c3cc056790bfc8 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:07:17 +0100 Subject: [PATCH 39/48] Updated contributors --- apps/lcars/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index b7a692c96..4630db1ea 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -1,9 +1,8 @@ # LCARS clock A simple LCARS inspired clock. -Note: To display the steps, the health app is required. -If this app is not installed, the data will not be shown. - +Note: To display the steps, the health app is required. If this app is not installed, the data will not be shown. +To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerdavid/BangleApps) ## Features * LCARS Style watch face. @@ -28,5 +27,6 @@ Access different screens via swipe left/ right
Icons made by Smashicons, Freepik from www.flaticon.com
-## Creator -Made by [David Peer](https://github.com/peerdavid) \ No newline at end of file +## Contributors +- Creator: [David Peer](https://github.com/peerdavid). +- Improvements: [Adam Schmalhofer](https://github.com/adamschmalhofer). From b04578840bf945f53cf844e2a64344157f90b86f Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:19:48 +0100 Subject: [PATCH 40/48] Added vref to settings --- apps/lcars/lcars.app.js | 5 +++++ apps/lcars/lcars.settings.js | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 391f14c20..36a335a81 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -145,6 +145,11 @@ function printData(key, y){ g.drawString("HRM:", 26, y); g.drawString(hrmValue, 65, y); + } else if (key == "VREF"){ + var voltage = E.getAnalogVRef().toFixed(2); + g.drawString("VREF:", 26, y); + g.drawString(voltage + "V", 65, y); + } else { g.drawString("NOT FOUND", 26, y); } diff --git a/apps/lcars/lcars.settings.js b/apps/lcars/lcars.settings.js index 2255caf9b..0d004b002 100644 --- a/apps/lcars/lcars.settings.js +++ b/apps/lcars/lcars.settings.js @@ -18,14 +18,14 @@ storage.write(SETTINGS_FILE, settings) } - var data_options = ['Battery', 'Steps', 'Temp.', "HRM"]; + var data_options = ["Battery", "Steps", "Temp.", "HRM", "VREF"]; E.showMenu({ '': { 'title': 'LCARS Clock' }, '< Back': back, 'Row 1': { value: 0 | data_options.indexOf(settings.dataRow1), - min: 0, max: 3, + min: 0, max: 4, format: v => data_options[v], onchange: v => { settings.dataRow1 = data_options[v]; @@ -34,7 +34,7 @@ }, 'Row 2': { value: 0 | data_options.indexOf(settings.dataRow2), - min: 0, max: 3, + min: 0, max: 4, format: v => data_options[v], onchange: v => { settings.dataRow2 = data_options[v]; @@ -43,7 +43,7 @@ }, 'Row 3': { value: 0 | data_options.indexOf(settings.dataRow3), - min: 0, max: 3, + min: 0, max: 4, format: v => data_options[v], onchange: v => { settings.dataRow3 = data_options[v]; From 9551f7751033f2b3fabd411cb2bae58945ba942d Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:38:02 +0100 Subject: [PATCH 41/48] Show large text for alarm --- apps/lcars/lcars.app.js | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 36a335a81..8aa31f18b 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -23,6 +23,7 @@ let cBlue = "#0094FF"; let cOrange = "#FF9900"; let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; +let cRed = "#FF0000"; /* * Global lcars variables @@ -79,12 +80,6 @@ var iconSatellite = { buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA=")) }; -var iconAlarm = { - width : 50, height : 50, bpp : 3, - transparent : 1, - buffer : require("heatshrink").decompress(atob("kmSpICEp//BAwCJn/+CJ8k//5CKAABCJs8uPH//x48EI5YjCAARNKEYUcv//jgFBExEnEYoAC+QmHIgIgC/gpCuPBCI2fIgU4AQXjA4P8CIuTEYZKBAolwHApXBEAWP//jxwpBAALaFDoYCIiQmDDIP4EAT+CEwnJEwYjLAQLaFEYomDKALmDNwoCIOIZuD8AkFgCYDHAQjMAQTdDNwOAEg0Dx0/cYeREZtxQYOTHgJuHOIvkXJy8DNwIACJQ8Ah4NDAAfxEZARHOIIkHg4jQAQb1CQ4KVJgEOnDIBSoIjNAQPBcAaVJcAKVBcDGOcD7OBMQM48BuH8f//JKCnhKNggRBkmfTQJxBEwhuD/gRCyVHJRlyCIVJXgYmB8ZQBAoIKBXIQmCOIt/NxAUCOIImCIgIpCBAJuDAQZEE/huIAQWTDgImBTYQGC8gRFcYpKFCI8kDwQAFCJBfBEAX/+IjBiQRIEw4jJAQc8v//NYwCIOgJrIJpA1OcwbaFAQWQA=")) -}; - var iconCharging = { width : 50, height : 50, bpp : 3, transparent : 5, @@ -193,24 +188,26 @@ function drawState(){ var current = new Date(); var hours = current.getHours(); - var iconImg = - isAlarmEnabled() ? iconAlarm : - Bangle.isCharging() ? iconCharging : - bat < 30 ? iconNoBattery : - Bangle.isGPSOn() ? iconSatellite : - hours % 4 == 0 ? iconSaturn : - hours % 4 == 1 ? iconMars : - hours % 4 == 2 ? iconMoon : - iconEarth; - g.drawImage(iconImg, 117, 107); - - // Alarm within symbol - g.setFontAntonioMedium(); - if(isAlarmEnabled()){ + if(!isAlarmEnabled()){ + var iconImg = + Bangle.isCharging() ? iconCharging : + bat < 30 ? iconNoBattery : + Bangle.isGPSOn() ? iconSatellite : + hours % 4 == 0 ? iconSaturn : + hours % 4 == 1 ? iconMars : + hours % 4 == 2 ? iconMoon : + iconEarth; + g.drawImage(iconImg, 117, 107); + } else { + // Alarm within symbol + g.setFontAntonioMedium(); g.setFontAlign(0, 0, 0); - g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 117+25, 107+25+1); + g.setColor(cRed); + g.drawString("ALARM", 117+25, 107); + g.setFontAntonioLarge(); + g.drawString(getAlarmMinutes(), 117+25, 107+35); } + g.setFontAlign(-1, -1, 0); } From 4856788e9eb13802d6be8688242872dd74c922b4 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:48:57 +0100 Subject: [PATCH 42/48] Minor color changes --- apps/lcars/lcars.app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 8aa31f18b..1ba16fc59 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -23,7 +23,6 @@ let cBlue = "#0094FF"; let cOrange = "#FF9900"; let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; -let cRed = "#FF0000"; /* * Global lcars variables @@ -202,7 +201,7 @@ function drawState(){ // Alarm within symbol g.setFontAntonioMedium(); g.setFontAlign(0, 0, 0); - g.setColor(cRed); + g.setColor(cPurple); g.drawString("ALARM", 117+25, 107); g.setFontAntonioLarge(); g.drawString(getAlarmMinutes(), 117+25, 107+35); From 9ecfb20fbc1f74b1121bbcf4206b53faaf67cc30 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:56:10 +0100 Subject: [PATCH 43/48] Updated colors --- apps/lcars/lcars.app.js | 3 ++- apps/lcars/screenshot.png | Bin 4798 -> 4732 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 1ba16fc59..9d125db4a 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -173,6 +173,7 @@ function drawLock(){ g.drawString("NOCON", 128, 33); } if(Bangle.isLocked()){ + g.setColor(cPurple); g.drawString("LOCK", 128, 53); } } @@ -201,7 +202,7 @@ function drawState(){ // Alarm within symbol g.setFontAntonioMedium(); g.setFontAlign(0, 0, 0); - g.setColor(cPurple); + g.setColor(cOrange); g.drawString("ALARM", 117+25, 107); g.setFontAntonioLarge(); g.drawString(getAlarmMinutes(), 117+25, 107+35); diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 4d4911227dc8ce48bd8db53c3947900c4e8ac87e..385273048d77e884dd0ebfb66931ccc68d884ca1 100644 GIT binary patch delta 4726 zcmV-+5{d1;CHy3iF@H8mL_t(|UhQ4kw&N%a?EC*8oj$fhf{B(Ah{d+%|Ng!HX@9TRzkh%4lJW0hu`AhOS62IbU9VpmEScV2vs0G>*O0*g0QjOLm3ZU~ z;EQ(Va?CgcyqjwQ0B^<{rH^AfzW@&KUMoC+zyJXFqJBRExPNyiASTdawRj#D_*&o# zU{~-0BR;$k7I3h@0pI|ygDFGA3=91Id%a$Mv-V)#8BTn1n}7c{`h_L}Kpr?^+$Upc zO5cNlrB+h zr!1=tu3COc27e9!<8W#je5sY4F1C#^3{RxzdA6!7x^vEZRe_R|KS$+k<+Qxkatutd zkmjTs=CUyS-5EH6ivkM;UJC4Gxe~;joE)Sm$WOjoB@ZltuqS{u*%}wt44&0O2#JA9 zX62Z+1RuxH>3d2}sfYGv*nBgUfl=qTg6#9EEMn{30Dnq+T?61+nKf@8O+Vy0!obN) zIg{ofMHx6ZciFD?nd-~b7&riYcF8mV3o$SUsxpkQGVr^}Q|uiKtk8{ha)`0l?}3(J z;NJ-$6%J^OE4>+#Z8K4vBnC!eS0uZD%F(h9UjQ$*7owLFuOPRV zjw*oPDSt323n5Jva;8LMWG>~#)#v&!m4PXxdN|Q4(^B42RtJ(_IHI+cKesS2>9Z_` zMza)Y1DTe()0lW_79s$=$Ry5@fp;tu^0)~aw^)HPaWF73iY%;(W>S!pou{mx44f9- zKIzFKi-AnoZjptU#lTvYpcjBO5L*DO$ua@hz<QEHS4Qz+NoevJxllamW`t zkgy^cxG|o!u$IKuIj}4Phy!p6c`ULleX(RAI0ojHmCL*@Rjyp7)|Rc$Ap~+an#CH8 zWq&=L`<3RGP9(K@k{^27mPi+6#t8p9&Mq=c(nRhP-faJq zmf?Wq;=Oo7Ib;9?10z;yEaM3}Pg&o%o4#>gI=G2W=#czx8W+;RQqBdzz>VNUs(XUY zQx?UnpGlEn1y0J_N(@XL=+t(fmG-_R1NU$;0@SNc;*b?E%N_`H1x_o6*!-3Z9De{t zT>mYDY;{CpSp?*HxDX7?_^B1Zmik%__?XCG8`V8!Ss-j-VB}PBz6c@3z*;$^55d5M zl~BN;;6&vi<&ZLn<4+lgH!ar2vQ)hk9%wPJR1WFK?P6fc!J8qpJ;3Lb62_Rf0kE(i zxSZ$(11rO-m0<$F2ydOsNW0O>RDT=6uXVPBM0zmC<}8Xc5K zIi!pg!pQv#NIsW4oy=W=Ql{)84{Vq)Nlvza1SyM@K?e>h%K~B!oGm9RqzyoMd#xLV zf`KibuAJ~8*@apFTi-5JcfGR^8ndEIjkxA^S%@ACWo7Gp(rD2~i{CA>5P#=$6Etf+ z*LtD?$vdO^2Lq#)63TJFHpFjrp3I|il!e4c7K0(gE58~}bVBrp@vF#rw*Hl;+kw2+i8 zLNW|g{Tc?ACYeY$!Lh%li`K68yoQZ?Fz_am%3Rz&2KEN<$zb3Xs}_)OnG$qjsI{#< zuLrOn1E;KnmVXDnMHV9eg?j4O>T6?QO%}?c+NULAV2UZF7&rlna%?RKwRqY(c}wN50ALg>q7C+k{wr;oZqrxdth4oUVwO7S zxf@M;-G6hFH)_Ss0$^^%uV?t60c7>(%Q3J99tyzLR2w^)VRn|HOUXa4(7)r%EcHj} zOw}*nPN&yAnAct%gf03_W8fC0d)BQE=ale*B{rY)L`*)M0*>i)phu>DV zn+Ra<&TDy9@AmEva?PGQfYX0&n$G9bXdN;`8e`nu*xpR0+4GSM+!I6^V*~?dc_Dx? zHG4jefjz;C7&oRMVS!c)WSe@@JIZ+jnu(jtfRbAwwCs2EZi{P#G4}c>vg=S6mfk@s3<}3V#Ea z*GFj}MeZE)Gsz(dxzj9f(^5VF?B}g14E$sO2YCI!yA$8YEChP>sdkqb#gN>0HRh78 zZO!FLmkM$~4FK18gs*ce2KEAnb~iBvVkCr+2Cy{g^L6>Xq%Fa~+Et@y3_JqBWk$ks zzj3agWzu&q$ockW3Ims2;9kW@I)AMteMXs*Yg1!b^m$@ht-PhJt$AucT@>=`oRe#ez<;1;HnHC+V zFff-!L!C`cf-IeG0WhaKB~yx%uegx$**5;#wu&Abo(>SdKfe!Ed-wvCF@=Gz2w*A8 zP%|KEa9q~U)KWcnMqLPo;VHwgHCu#F+NQA zh6~m+lt;MHhmixoPeEoyKYf4p=TN|#jRU|Hj=f`*pL4yRiJI-YtL=brV%(Cc^NF9A z4FkYlmb`(S9*oPG#fympz&8M1OBdK16&e^Ai;<6*y7g~p9=KK6sDIzb0y&7w7OEI7 z31st&->{?=!$b4Heas(HTPz^OzFaJeF{~Cl9~9rp!NVBXx~b)d39_L|tzuDIG?NVU zRaMIMsK?1f?a=~GwC=Fjmx)(eKs=0rQHLQr(s}^6c4=3thd%4Q$Abbg!n`9GcuNqY zL_zgq7z1yOBRj~rO@A(X4)M*x$Q}c$QEE5WNcA+Ch&@mittltPzBTgHI>H@%wXyIp z2CfA#RWAUnLPae=F|bc;tHr+Qd6wpAh=r#zFcnrHtW*nNOFgM2 zMaSo844mp)^s6M@z1m8#ZyvVPWFw|9u;ef#8_**QL4^f5FcH9L15}%!jsURdo(JEU zxh{+t%D^SFNeo;92EBet0(T7vkvgf26~Kr+EbXIZmt^4mEr#~sTW%-=BM#G8N_)Mx zvRF9)(6~&B=YNsGnBTdEwrO|wIebVzQPnr!i)STj`n@az*IZqyf!pG6>p?EGTWTR`_kF;;0(Bw8gx`siz#%!gm4PK9K-iM1 zZ|RH1)YKr*$jjq72kOro(4!GWMh*M!_8QH=B@1h;B{47+M_Xc7iJehETiymM0$62a zV(Wr${(rYFefD{Sk6ei>V_M|3I~u@0F_y9ej*4MZzoci>;F-n1In(A-obr1QM&?d< zT#A7QypgJ!sL26qAgz&ErF>;2n1Qv}Ib&-2H1hfSsq+4bO7+L?g{W0B>W#I42dIDE zWWofprFTPgn^B?eEY$FtWb@+02u7j+0pn zV9wB*?%Ey3o-sO-}%jX|>`Tknb&&9y+qaMA$yZd0Yz4R#M zK7xU30i1)l2Edm3qa1#>cBU|}6rc78AuIsSPX}87n75I$F|rB&ZlD_3pP>v~zN*oK zmq-?ZN~>AoFO*?9K%(_?=UVg|35qMVHI#vqVJLpGl)H4xW^5Z=J(1>guNd=WjAfi+N2vvuw}iLpIQr0J@~)vfhC`tSr9Lm3!Z zbf{%uDO}LNhNQWyfJDnn6WS*Lu(gj%Ft9Y+_h8@va4SsKtse~h_6^FItyzfHY{|M% znxokx7#K0_EC9D;N|1itz04E_mVYt^QVg8e^PbI9xn?P}k>YtoPb93lJNP{MH!N8pj9OC<0;MiY}Z?OL-U9DMr!(iVohV(mI;B!Dky~GLxd2fLD&Tv_; zZ=X}i8$JWX>p3Vik}YsLR__U7ufY&<(2IGWS?=dvhybzQn;1Foj8doWZ{0ssI207*qoM6N<$ Eg5O2u&j0`b delta 4793 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 TQ(~2;00000NkvXXu0mjfvsL(J From a58f32b042b1af718b6d7543c1611b5c7b522b86 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 19:33:49 +0100 Subject: [PATCH 44/48] Performane improvements --- apps/lcars/lcars.app.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 9d125db4a..f9b1e410e 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -183,6 +183,7 @@ function drawState(){ return; } + g.clearRect(110, 90, g.getWidth(), 170); g.setColor(cWhite); var bat = E.getBattery(); var current = new Date(); @@ -197,7 +198,7 @@ function drawState(){ hours % 4 == 1 ? iconMars : hours % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 117, 107); + g.drawImage(iconImg, 117, 104); } else { // Alarm within symbol g.setFontAntonioMedium(); @@ -522,6 +523,11 @@ Bangle.on("drag", e => { } else { increaseAlarm(); } + + // Only update the state and return to + // avoid a full draw as this is much faster. + drawState(); + return; } if(lcarsViewPos == 1){ From 0e167ada67f86208fb6fb84cf5edd708295933d3 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 4 Jan 2022 08:05:59 +0100 Subject: [PATCH 45/48] Lower line as battery indicator --- apps/lcars/lcars.app.js | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index f9b1e410e..07037b197 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -149,7 +149,7 @@ function printData(key, y){ } } -function drawHoriztonatlBgLine(color, x1, x2, y, h){ +function drawHorizontalBgLine(color, x1, x2, y, h){ g.setColor(color); for(var i=0; i Date: Tue, 4 Jan 2022 08:45:23 +0100 Subject: [PATCH 46/48] Design chnges --- apps/lcars/lcars.app.js | 55 +++++++++++++++++++++----------------- apps/lcars/screenshot.png | Bin 4732 -> 5112 bytes 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 07037b197..63e3a3a33 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -23,6 +23,7 @@ let cBlue = "#0094FF"; let cOrange = "#FF9900"; let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; +let cBlack = "#000000"; /* * Global lcars variables @@ -104,6 +105,7 @@ Graphics.prototype.setFontAntonioLarge = function(scale) { g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAPgAAAAAB8AAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAD8AAAAAH/gAAAAP/8AAAAf//gAAA///AAAB//+AAAD//8AAAH//4AAAP//wAAAB//gAAAAP/AAAAAB+AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAf////8AP/////4B//////Af/////8D8AAAAfgeAAAAA8DwAAAAHgeAAAAA8D//////gf/////8B//////AP/////wAf////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAHgAAAAAA8AAAAAAPgAAAAAB4AAAAAAf/////gP/////8B//////gP/////8B//////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAD/+AAP8A//wAP/gP/+AH/8D//wD//gfgAA//8DwAAf+HgeAAP/A8DwAH/gHgfgP/wA8D///4AHgP//+AA8A///AAHgB//AAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AA/gAD/AAH/gA/4AA/+AP/AAH/4D/4AA//gfgA4AB8DwAPAAHgeAB4AA8DwAPgAHgfAD+AB8D//////gP/////4B//5//+AD/+H//gAH/AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAP/AAAAAP/4AAAAP//AAAAP/x4AAAf/wPAAAf/gB4AAf/AAPAAP/AAB4AB//////gP/////8B//////gP/////8AAAAAPAAAAAAB4AAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wD/AB///Af+AP//4D/4B///Af/gP//4B/8B4D4AAPgPAeAAA8B4DwAAHgPAfAAB8B4D////gPAf///4B4B////APAD///gAAAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///AAAP////4AH/////wB//////Af/////8D8APAA/geADwAB8DwAeAAHgeADwAA8D4AeAAPgf/j+AH8B/8f///gP/h///4Af8H//+AAPgP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAPAAAAAAB4AAAABgPAAAA/8B4AAB//gPAAD//8B4AH///gPAH///8B4P//+AAPH//wAAB///gAAAP//AAAAB/+AAAAAP+AAAAAB+AAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4A/+AAf/w//+AP//v//4B//////Af/////8D4AfwAPgeAB8AA8DwAHAAHgeAB8AA8D4Af4APgf/////8B//////AP//v//4A//4//8AA/4A/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAD//+D/gB///4f+AP///j/4D///8f/gfAAHgB8DwAA8AHgeAAHgA8DwAA8AHgfgAHgB8D//////gP/////4A/////+AD/////gAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAfgAAB+AD8AAAPwAfgAAB+AD8AAAPwAfgAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DBATExMTExMTExMTCw=="), 45+(scale<<8)+(1<<16)); }; + /* * Draw watch face */ @@ -117,36 +119,41 @@ function queueDraw() { } -function printData(key, y){ +function printData(key, y, c){ g.setFontAlign(-1,-1,0); + var text = "ERR"; + var value = "NOT FOUND"; if(key == "Battery"){ - var bat = E.getBattery(); - g.drawString("BAT:", 26, y); - g.drawString(bat+ "%", 65, y); + text = "BAT"; + value = E.getBattery() + "%"; } else if(key == "Steps"){ - var steps = getSteps(); - g.drawString("STEP:", 26, y); - g.drawString(steps, 65, y); + text = "STEP"; + value = getSteps(); } else if(key == "Temp."){ - var temperature = Math.floor(E.getTemperature()); - g.drawString("TMP:", 26, y); - g.drawString(temperature + "C", 65, y); + text = "TEMP"; + value = Math.floor(E.getTemperature()) + "C"; } else if(key == "HRM"){ - g.drawString("HRM:", 26, y); - g.drawString(hrmValue, 65, y); + text = "HRM"; + value = hrmValue; } else if (key == "VREF"){ - var voltage = E.getAnalogVRef().toFixed(2); - g.drawString("VREF:", 26, y); - g.drawString(voltage + "V", 65, y); + text = "VREF"; + value = E.getAnalogVRef().toFixed(2) + "V"; - } else { - g.drawString("NOT FOUND", 26, y); } + + g.setColor(c); + g.fillRect(133, y-2, 165 ,y+18); + g.fillCircle(164, y+8, 10); + g.setColor(cBlack); + g.drawString(text, 135, y); + + g.setColor(c); + g.drawString(value, 88, y); } function drawHorizontalBgLine(color, x1, x2, y, h){ @@ -183,7 +190,7 @@ function drawState(){ return; } - g.clearRect(110, 90, g.getWidth(), 170); + g.clearRect(20, 93, 77, 170); g.setColor(cWhite); var bat = E.getBattery(); var current = new Date(); @@ -198,16 +205,16 @@ function drawState(){ hours % 4 == 1 ? iconMars : hours % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 117, 104); + g.drawImage(iconImg, 29, 104); } else { // Alarm within symbol g.setFontAntonioMedium(); g.setFontAlign(0, 0, 0); g.setColor(cOrange); - g.drawString("ALARM", 117+25, 107); + g.drawString("ALARM", 29+25, 107); g.setColor(cWhite); g.setFontAntonioLarge(); - g.drawString(getAlarmMinutes(), 117+25, 107+35); + g.drawString(getAlarmMinutes(), 29+25, 107+35); } g.setFontAlign(-1, -1, 0); @@ -252,9 +259,9 @@ function drawPosition0(){ // Draw data g.setFontAlign(-1, -1, 0); g.setColor(cWhite); - printData(settings.dataRow1, 97); - printData(settings.dataRow2, 122); - printData(settings.dataRow3, 147); + printData(settings.dataRow1, 97, cOrange); + printData(settings.dataRow2, 122, cPurple); + printData(settings.dataRow3, 147, cBlue); // Draw state drawState(); diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 385273048d77e884dd0ebfb66931ccc68d884ca1..ea57e979fcbbc7761a7b06bf69000c22d526cab9 100644 GIT binary patch delta 5110 zcmVQ z^7rrGzt2DP^ZESy_czDP|0j#x$qr*>(a-08?W$mDwC6c~?Qprw(WH8RDV2 z_f!UM1@GPfw(8R}Xd?646TBmKXYgrY(ZH*LUB;6jw(_Y#%7VPM$EggA7z%|)cWfl+ zBJ+xFr_9e|V9Bf&(@OAJ3|;=Nc_&hi7Z;D2P}MRal`=pyrqXq%S@!@z}6 zYbLEh$}(`x%(7hcyVi!&7?=en8*ghTM|wdb^V-@jCOyNz9&^?*q-=^I2A*a2N_!^* zGreWRi3D9_UK^T3Crt+aUavuG#>J*Av$FB%-bw)fSYRsyw|FTS4a|5SN+VJOkE?M1 zT40M8B7ZWkt%H(H-@?FJo^^UwBU>&vE4|g0$7tX!OdScj$h=qpZjIN%z$$=eK|3ta zSTBX8m1}LxF!5s;I10c6+seFp8F*`6TY<@@k7VF_L8o~skT;{$nPuW+U?Cy4g02St z*1T8%ZjINtKzzhjti_H!tQnbCG{d6&A{f}(R+fHW zW`AMFF7ze|!Mu%zEU+OQxt;2)8A;Gml}OM<=GD@Mh`8D*Fotoz;8BiZGTXwI29|d; zz3s8n0c^3b?3ifq%5v-cw=(e7ydpr^l83jGhK@K|3qZ6$)4UKlZ1NbZk z_CVSS;K;mMfOk~fR!|*PuhS)jr*rq#z<-gTi_GiD&VNE#kMTmZc19%VBJ*l($J^sy z+7I088bh6mBmxSz+;HQRCVbB=d7*mm8SX9QO1bFN8RIHL+81fwpS95&Z)6})q41{x z7%kMk02T`@c_2qy&}{)VGhk0+V3u9kcuZrLj_`K?UkBhqi}NjDZ@ai`PI!0Pw1115 zJ$_=QPfydpEHK%4Ok*{dUF7!lmb}>d?-9@Q$9kIzE$OsvWwcYrwDoli%&;pHCwee2 zowZjSYtw;c(iV`{8W`ozwD&O#%rZ3tPA1Ny06c43=DH7atGL$2o(4woH~&^ z06Y@Ff`K)gFx~`h$1WLIxp2uWmXd+_q3NAQlP)yoG?_M|dkpNom4;f842&!!!jpj) zgLnsam3R2iC3$yPGexka}dd@EdYNVfXB{QoJh>Y%{dA6wwb)s#&|v0 z{yL3;EdZm6?{TnQmiamWH!!fb`M~VVP5nL{T1O8CA}ovx^)tT{XPx;qr;7$ZGt>B# z5R(NMM)YnYTkk<=OwN|a_J7~04BX1XN3gF}r!D11vN_wSt??Le*34<$S$oxKG&F73 z;adRI+L^BeaG^!9Bg=dy!1D`hazSHYD<0E#r!z29$&9nV1-ANQ_phN|LYxMM-;+73 ziCONGEpYm+1Qu=Aa624lOh`1<@R(}R6moZ!dn6c8s z<4i!Z;5)e4^fRh6(Y~JTu^!J%I_J2Zt*vi}mz)U@*;h5u=-au>_j3J#?F{svmjCPfAJeIZ?y0!qG1OEbeS@yLsa9uJxV|%TA6$7{G&3|Oz#aqzAz#8CcEghkK zOBt_X-~_PFWzh_*19-jEieTSyz3?UtJiZ`MeFqMCA(DZUfnBk-brHAHQ^1YpEx;H> zDHngO3ox{JMBz*wd*kfEz(byzZcYtseA~E%O?wuB&j+wRsTb|qqJit3JI@cCUI=pY zLV7n^0j#lO3x5M6c17X6%*v*VX5jP#i=DL=u&4`&d9OxpARyM3?!Ix+Fb|rRIw63f za2ANY@fbgFeO6+tA9y5`v9dSai96a4+yXWU0t;Mho(P;Mycd)$=@C)ai@!QuD}XJwZ{f%`10owbN+USqI6uVW-i~ zI16zW18W`X$q0`f82}@8Md2&}x5i`7@>(7QEq%?t8UtH@Yi-MA{lG*)$Ou7aUNT0l7L;1jU!(y>MSF9@md)8%JKmL)kvpOiCmxj-}082IJKMws-wbW#GLVw>5tRFd2@%5m)MSwe!GR?Q~}P zQyKWohG*H&us|~KGy3thtq5h{h@F+!_Cz+k%L3!gI?IpOljBkDlb*U|n&(-d0&v*3 zw(^mw=i%hCEvjCF54)T^Ha3~~vVH!jiml#-uzy})iMq9Xw|toMs`9Q^*@?>k<7RXZ zH$M-XMC#$Y4|Qf1Nqe2!%jU~G$t(0+t05z=@4pTOa{^>+Z|S(*Ty=wC#Bh5M3gc9~#lVdfrp+Q}aRg9N-<%Z&$XT z3xD9~#v{LKba_t)JF@2p;PTHgZrQ`#-?keq=Ec>Orv@>`(~TX?WXPVcWZ*qPgcu_k zxbh1TjEU^|ItGpeFJs(Xf}{nuTA(`2LqEh0H*gZXTe~IGvlf_-Qzm#>gJryHSzrQi z(1If~H>VMta7`YZ=aD(vY;cB`QmkfM&%!SrJYDSL2 zRmn%2;gf+wyZ$#b1P0kDCBF4{uQO}E?-n^%Gq9D9Y*!smGPuQ{Jxnj_lMK8!fWb~! z-MKX=tiRXOtp=_FiY;=^sz+@q1k#>Cz%q8-?quMd0jy;&L8dX0#%KkU9!M<)Z+~f~ z20krc52V`6BkPZ}uNPkIlMLL_vq5ns80z0OaC-4qtT?Y_w#Wy${p<}IkEy*uiDVVS z#HC)zz(Js7vq96d$8?B+BjkhJelCOIY79Jpe6U9{FpIpPcnD;@42)z+ize0vnOCm@ zCQl;|azG9ShG~(ENCpl9CYue?sDHf-tjQ4B`7DST4b09YHAo{ha56B9xWIU*)9dM5 z^FmnDxy+Z<%vRG{>M5Dk^PVIF2ZHI0tXf=4EnWyqJ|N9(0=RPhF@E5>9L68qch>^VonAh}H4UFm`H(w&W5QX_u10M)tw1D$=(yX1YUVqK(0$5?- zo^q_sj%45iK^IjNBOfdVX28~>nNgdPfsut?7|tw=JO20yca>t$dGqB9tnIfxYL2hOt)0KoIHg7Laa z`7T`je=Gi(1zd{;W)AdNUVjTzcSi28JAZpHaGpkE!8_k_FVPFA5dc)ZN*=U{Vrt84 z!PK3RJJx22=Q4|6;GgrrbcXZSPcU(X`CbO7%uY z0=Rl5!0I@`#7_rtl%JLXB?Ef*PTbo8j2KsjKOMYxYhSsKe7Aas)PGkJuGG3;S@ALk z4l(XQnLGx-G?S7Gvt-_b5V*0JM*w(ndD)AOae+oMX)^CdR2`W7wl^|p#x?x7mRBK} zH}IhlW`#zq^t?NMw?2)g9?O%X-*|OMTiIHg_&`FrL{V4$@{;z|sM|5H$Go#6w>Wfv z{?~TYtR1&#B#o}Aihq%qPk4QI=8SamNu}@E2M{0KS}yti98RC}mF1X+-a&h{a_WV& z_6(}D+btP*#k?%iq}rdYt`RhwB^%FTGz4NV9UE4cQPQyGYH5cym%lUld2yI9&Bk@T zZq2}maZz~083zW$l4(5Vsq^#F6-HmcH1W0d`xH9OH!K5d`G3{vnRZ$AtUsoq%^c`s z8>JPuV&E?3H4rv!8!v7N)Ts0-hL&jxn zy#P3H(YY%KDsKW}Rup~|^DcUB&3vs)sAZe*;w=g=BPOb$sMu(pOsAiJ; zF)%Ycoj5DzoqrGTY|OGbc`FlYY}U%a8atvH1L<9>4lGNT@_QJ#lyMskTzel7!+yhy zk8wt=>V=q@y%~iY5**3Eh2bP)d)3#Nv`8As$et#yy(n6`!n8daxRiSv2L7Iq>I9Bt z-WuDTS#~9BVZz@9-Sn3M3@ig%@iBmxvT7-$v8A;vM1O7V^+MFl{VWF7-cnM|`4)!W za>Jqry%w`Ec}We6G;m?etqd#~)?;AV4%A+6CepOB)W!pIKbL`}7hdxNAFP4p3LHDM zCP;XzdkGrL@5}0LS)SCh9s@I;k0>w1Z8WfUQ{qPh3+9zt*V4>KGjKf>GyYf^zxK=4 z3~TN1)qf1vtASe>IK2?YT)Kc5Pqsf=ca@|%?JysPKrSU*Vtb5UHuM>$9f?qmYx2Uz-!UKt!FT5Cbeb?&99scEXb@d?{_M# zkBiNJtk3z{J9UD2Ptv|ED|k!$u4RRPE`ecEZGZki>8x;%l|5f?k01E5J8|ed?h)Z#QsTw_n)UIf8 z3f5=)D-)*f*K{k&Q!=%c55vGR?G^^E%d^^mEPBb)XusZuiDBhWi#9&`%!4`5jGGDQ zTz{?9qV>*|Ll47r;x6t@e5v{!)HmbQjGEAHP;!+z+e&^+A9}_#WX%SF%i4 zvtdu3OxrYHEt78VIND5fnVq=SJ8nPBT<&w0Q)}b}&b^I($NU*4MCWxQ!!Lg)Zki4! zpOH$W2YU_f2)eh{`E&+mnfI+7ljQ>sxoCe@` zn)@!T{;;=t4vJ?l;}XDk!PJrU9H+O#mMWU<58T98KpIxPCjEZYrv0@qc-` zgHYW@o$==lEY#k0yDqg8M;rKd5tU9^bv_E04R#oi0v|G9Ri9E%cV<{N#g`{Q=f9~l zh>TwW8qGN0w>+jar~84CDIXEO>U;%!DEtS%o(xgI*J?y}CSbv;#1r8A%BhvCAQ-rc zpA6jExm)A6YG4bzs+L6Bm96~I41Zk70+xa2_9p|geHs>zSO8HA9Y< z1_?5joW|J&Ct5&S3qh2>(QDW$6oc@@wm4h7!Sz^EJd2}j_f7#Qu0p+SP0 zc7hjz1??(cYGBlpJA@-}S>ddFAhxSft0*soQVzS5s4{lP*^AV`s3&&_?`2?W0jGcf zeo#PbBf-F9GCA0sbb>jjQh(V^i}XV5fW+P`cVu978typIa|;G8Tgk%>zM!LXXS})4 z3!~H0ZDnAJQPChlt-k>S&vr;ZFzUln6PFB(Iy1wsY=P9kSMHsx8??aaKpP}age#3$AHxb|gtS15 z1ttK`n<5F~7Sm(|pxtVc=ZhcQ3R@dsIKx{EN0{7nKN6awBTh#}>P;-pS z3iZ=8VSnEgJ$$sRUT4o1{ZMRA@rYU}!`51Z@-Vl=Y% zDtFJ$e&S$3{d8#tuIGbjMnoe!y1XZX>xjXK`swlvtcjWkaG{Z%41A2nMS}qK)0G(b YKi)^^b0eb_3;+NC07*qoM6N<$f=R!@)&Kwi delta 4727 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 Date: Tue, 4 Jan 2022 08:47:23 +0100 Subject: [PATCH 47/48] Updated readme --- apps/lcars/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 4630db1ea..97695a408 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -13,6 +13,7 @@ To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerda * [Screen 1] Shows different states such as (charging, out of battery, GPS on etc.) * [Screen 1] Swipe up/down to activate an alarm. * [Screen 1] Shows 3 customizable datapoints on the first screen. + * [Screen 1] The lower orange line indicates the battery level. * [Screen 2] Display month graphs for steps + hrm on the second screen. From a614a398ccc420b95c8d0e0456ccd489c5506cee Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 4 Jan 2022 09:05:31 +0100 Subject: [PATCH 48/48] Minor design improvements --- apps/lcars/lcars.app.js | 5 +++-- apps/lcars/screenshot.png | Bin 5112 -> 5195 bytes 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 63e3a3a33..74d0450c0 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -148,12 +148,13 @@ function printData(key, y, c){ g.setColor(c); g.fillRect(133, y-2, 165 ,y+18); - g.fillCircle(164, y+8, 10); + g.fillCircle(161, y+8, 10); g.setColor(cBlack); g.drawString(text, 135, y); g.setColor(c); - g.drawString(value, 88, y); + g.setFontAlign(1,-1,0); + g.drawString(value, 130, y); } function drawHorizontalBgLine(color, x1, x2, y, h){ diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index ea57e979fcbbc7761a7b06bf69000c22d526cab9..b3dfd42000766a5bff8e62a6e5d66103ac4f2a9b 100644 GIT binary patch delta 5194 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 Ef?}il!TQ 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 YKi)^^b0eb_3;+NC07*qoM6N<$g2zF@sQ>@~