|
| 1 | +// Ensure we don't advertise when we return to the clock, which stops everyone getting spammed at the conference |
| 2 | +if (!NRF.getSecurityStatus().connected) try { NRF.sleep(); } catch (e) {} |
| 3 | + |
| 4 | +Graphics.prototype.setFontWDXLLubrifontTC = function() { |
| 5 | + // Actual height 69 (69 - 1) |
| 6 | + // 1 BPP |
| 7 | + return this.setFontCustom( |
| 8 | + atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAB/4AAAAAAAAAAB/4AAAAAAAAAAB/4AAAAAAAAAAB/4AAAAAAAAAAB/4AAAAAAAAAAB/4AAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAf8AAAAAAAAAAf/8AAAAAAAAAP//8AAAAAAAAP///8AAAAAAAH////8AAAAAAH/////8AAAAAD//////4AAAAD///////wAAAD///////4AAAB///////8AAAB///////8AAAAP//////+AAAAAP/////+AAAAAAf////+AAAAAAAf////AAAAAAAAf///AAAAAAAAAf//gAAAAAAAAAP/gAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///////8AAAAD///////+AAAAH////////AAAAP////////gAAAf////////wAAA/////////4AAA/////////4AAA/4AAAAAA/4AAA/wAAAAAAf4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAf4AAA/wAAAAAAf4AAA/////////4AAA/////////4AAAf////////4AAAf////////wAAAP////////gAAAH////////AAAAD///////+AAAAA///////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAADgAAA/gAAAAAAP4AAA/gAAAAAAP4AAA/wAAAAAAP4AAA/wAAAAAAf4AAA/wAAAAAAf4AAA/////////4AAA/////////4AAAf////////4AAAf////////4AAAP////////4AAAH////////4AAAD////////4AAAAf///////4AAAAAAAAAAAf4AAAAAAAAAAAP4AAAAAAAAAAAP4AAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAf//+AAAA/gAAB////AAAA/gAAB////gAAA/wAAD////wAAA/wAAH////wAAA/wAAP////4AAA/wAAP////4AAA/wAAP+AA/4AAA/wAAf8AAf4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/////4AAP4AAA/////4AAP4AAAf////4AAP4AAAf////wAAP4AAAP////gAAP4AAAH////AAAP4AAAD///+AAAP4AAAA///4AAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAHwAAA/gAAPgAAP4AAA/gAAfwAAP4AAA/wAAfwAAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAAf4AAP4AAA/wAA/4AAf4AAA/8AB/+AA/4AAA/////////4AAA/////////4AAAf////////wAAAP////////gAAAH////////AAAAD///4///+AAAAB///wP//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf////4AAAAAAA/////8AAAAAAA/////+AAAAAAA//////AAAAAAA//////gAAAAAA//////wAAAAAAf/////wAAAAAAH/////wAAAAAAAAAAA/4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAAf4AAAAAAAAAAA/4AAAAAAAAAAB/+AAAAAAf////////wAAA/////////4AAA/////////4AAA/////////4AAA/////////4AAA/////////4AAAf////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///4AAAHwAAAD///8AAAP4AAAH///+AAAP4AAAP////AAAP4AAAf////gAAP4AAA/////wAAP4AAA/////wAAP4AAA/4AB/wAAP4AAA/wAA/wAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAfwAAP4AAA/wAAf4AAf4AAA/wAAf4AAf4AAA/wAAf////4AAA/wAAf////4AAA/wAAP////4AAA/wAAP////wAAA/wAAH////gAAA/gAAD////AAAA/gAAB///+AAAAfAAAAf//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///////8AAAAD///////+AAAAH////////AAAAP////////gAAAf////////wAAA/////////4AAA/////////4AAA/4AP/gAA/4AAA/wAH/AAAf4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAP4AAA/wAD/AAAf4AAA/wAD/AAAf4AAA/wAD/////4AAA/wAD/////4AAA/wAB/////4AAA/wAB/////wAAA/wAA/////gAAA/gAAf////AAAA/gAAP///+AAAAfAAAD///4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAA/gAAAAAAAAAAA/gAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/wAAAAAAAAAAA/8AAAAAAAAAAA/////////wAAA/////////4AAAf////////4AAAP////////4AAAH////////4AAAD////////4AAAB////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///g///8AAAAD///x///+AAAAH////////AAAAP////////gAAAf////////wAAA/////////4AAA/////////4AAA/4AD/4AA/4AAA/wAB/wAAf4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAA/wAAP4AAA/wAB/wAAf4AAA/////////4AAA/////////4AAAf////////4AAAf////////wAAAP////////gAAAH////////AAAAD///x///+AAAAA///Af//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB////AAAHwAAAD////gAAP4AAAH////wAAP4AAAP////4AAP4AAAf////8AAP4AAA/////+AAP4AAA/////+AAP4AAA/4AAP+AAP4AAA/wAAH+AAP4AAA/gAAH+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/gAAD+AAP4AAA/wAAH/AAf4AAA/wAAH/AAf4AAA/////////4AAA/////////4AAA/////////4AAAf////////wAAAP////////gAAAH////////AAAAD///////+AAAAA///////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAA/wAAAAAA/8AAB/4AAAAAA/8AAB/4AAAAAA/8AAB/4AAAAAA/8AAB/4AAAAAA/8AAB/4AAAAAA/8AAB/4AAAAAAf4AAA/wAAAAAAAAAAAAAAAA'), |
| 9 | + 46, |
| 10 | + atob("DBklFCUkJCUlHCUlDA=="), |
| 11 | + 78|65536 |
| 12 | + ); |
| 13 | +}; |
| 14 | + |
| 15 | +{ // must be inside our own scope here so that when we are unloaded everything disappears |
| 16 | + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global |
| 17 | +let drawTimeout; |
| 18 | + |
| 19 | +// Actually draw the watch face |
| 20 | +let draw = function() { |
| 21 | + var x = g.getWidth() / 2; |
| 22 | + var y = g.getHeight() / 2; |
| 23 | + g.reset().clearRect(Bangle.appRect); // clear whole background (w/o widgets) |
| 24 | + var date = new Date(); |
| 25 | + var timeStr = "22:22";//require("locale").time(date, 1); // Hour and minute |
| 26 | + g.setFontAlign(0, 0).setFont("WDXLLubrifontTC").drawString(timeStr, x, y); |
| 27 | + // Show date and day of week |
| 28 | + var dateStr = require("locale").date(date, 0).toUpperCase()+"\n"+ |
| 29 | + require("locale").dow(date, 0).toUpperCase(); |
| 30 | + g.setFontAlign(0, 0).setFont("17").drawString(dateStr, x, y+48); |
| 31 | + |
| 32 | + // queue next draw |
| 33 | + if (drawTimeout) clearTimeout(drawTimeout); |
| 34 | + drawTimeout = setTimeout(function() { |
| 35 | + drawTimeout = undefined; |
| 36 | + draw(); |
| 37 | + }, 60000 - (Date.now() % 60000)); |
| 38 | +}; |
| 39 | + |
| 40 | +let onTap = function(e) { // Show QR on double tap |
| 41 | + if (e.dir!="front" || !e.double) return; |
| 42 | + Bangle.setUI({ |
| 43 | + mode : "custom", |
| 44 | + btn : function() { |
| 45 | + Bangle.showClock(); |
| 46 | + }, swipe : function() { |
| 47 | + Bangle.showClock(); |
| 48 | + }, remove : function() { // this allows fast load |
| 49 | + require("widget_utils").show(); |
| 50 | + Bangle.setLCDTimeout(require("Storage").readJSON("setting.json").timeout||10); |
| 51 | + } |
| 52 | + }); |
| 53 | + require("widget_utils").hide(); |
| 54 | + let img = require("libqr").getImage("https://www.espruino.com"); |
| 55 | + var scale = Math.floor(g.getHeight()/(g.imageMetrics(img).height+2)); |
| 56 | + g.clear().drawImage(img,88,88,{rotate:0,scale:scale}); |
| 57 | + Bangle.setLCDPower(1); |
| 58 | + Bangle.setLCDTimeout(0); |
| 59 | + Bangle.setLocked(0); |
| 60 | +}; |
| 61 | + |
| 62 | +// Show launcher when middle button pressed |
| 63 | +Bangle.setUI({ |
| 64 | + mode : "clock", |
| 65 | + remove : function() { |
| 66 | + // Called to unload all of the clock app |
| 67 | + if (drawTimeout) clearTimeout(drawTimeout); |
| 68 | + drawTimeout = undefined; |
| 69 | + delete Graphics.prototype.setFontWDXLLubrifontTC; |
| 70 | + Bangle.removeListener("tap", onTap); |
| 71 | + }, |
| 72 | + redraw: draw, |
| 73 | +}); |
| 74 | +Bangle.on("tap", onTap); |
| 75 | +Bangle.loadWidgets(); |
| 76 | +draw(); |
| 77 | +setTimeout(Bangle.drawWidgets,0); |
| 78 | + |
| 79 | +} |
0 commit comments