From 326afaf72eaef69906dc8aeda12e851ec078e42f Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 29 Dec 2022 21:59:23 +0000 Subject: [PATCH] New widget: bt2 --- apps/widbt2/metadata.json | 14 ++++++++ apps/widbt2/widget.js | 65 ++++++++++++++++++++++++++++++++++++++ apps/widbt2/widget.png | Bin 0 -> 1119 bytes 3 files changed, 79 insertions(+) create mode 100644 apps/widbt2/metadata.json create mode 100644 apps/widbt2/widget.js create mode 100644 apps/widbt2/widget.png diff --git a/apps/widbt2/metadata.json b/apps/widbt2/metadata.json new file mode 100644 index 000000000..af7728958 --- /dev/null +++ b/apps/widbt2/metadata.json @@ -0,0 +1,14 @@ +{ + "id": "widbt2", + "name": "Bluetooth Widget 2", + "version": "0.01", + "description": "If active, shows a white bluetooth icon, if connected, a blue one", + "icon": "widget.png", + "type": "widget", + "tags": "widget,bluetooth,clkinfo", + "provides_widgets" : ["bluetooth"], + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name":"widbt2.wid.js","url":"widget.js"} + ] +} diff --git a/apps/widbt2/widget.js b/apps/widbt2/widget.js new file mode 100644 index 000000000..8b1fc3ede --- /dev/null +++ b/apps/widbt2/widget.js @@ -0,0 +1,65 @@ +(function(){ + "ram"; + + // 0: asleep, 1: active, 2: connected + let state = NRF.getSecurityStatus().connected + ? 2 + : 0; // could be active, assuming not here + + const width = () => state > 0 ? 15 : 0; + + const update = (newState) => { + state = newState; + WIDGETS.bluetooth.width = width(); + setTimeout(Bangle.drawWidgets, 50); // no need for .bind() + }; + + // { {key: State]: { boolean: string } } + // ^ dark theme + const colours = { + 1: { // active: white + false: "#fff", + true: "#fff", + }, + 2: { // connected: blue + false: "#0ff", + true: "#00f", + }, + }; + + WIDGETS.bluetooth = { + area: "tl", + sortorder: -1, + draw: function() { + if (state == 0) + return; + + g.reset(); + + g.setColor(colours[state][g.theme.dark]); + + g.drawImage( + atob("CxQBBgDgFgJgR4jZMawfAcA4D4NYybEYIwTAsBwDAA=="), + this.x + 2, + this.y + 2 + ); + }, + width: width(), + }; + + NRF.on("connect", update.bind(null, 2)); + NRF.on("disconnect", update.bind(null, 1)); + + let origWake = NRF.wake; + let origSleep = NRF.sleep; + + NRF.wake = function() { + update(1); + return origWake.apply(this, arguments); + }; + + NRF.sleep = function() { + update(0); + return origSleep.apply(this, arguments); + }; +})(); diff --git a/apps/widbt2/widget.png b/apps/widbt2/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..1a884a62c1029ae43243f8f58ef9dc3a3327e437 GIT binary patch literal 1119 zcmV-l1fctgP)cE5(396`@Dz$wLqIPzYppJ*B(brZX|I zHChYW;Hm1lL~9feUi^283bm!!Ka0DG`v(zZvk8h?W%2@c?XT zES*ZPJU3a{7h{cB0RRrPTh=dGr*a^!0&xQX?DMczGEQwQ4)Y`c0EQJR_Oa?r)W%5x z0HhI_x1HK2pc0j7k^sKW*iQXQ=2YX6D9n-q_%qO+(!1;R%(3!ggBm9SkZ!j|fYm^E zR%O?(qZ5_=gLo$b@WZ#`wXJ`4=)@t~Y>Yv)Y!7y;OB zeO8rs?l*_RK!7NCKLhRU0}||esEhzCyx)O;I=Y5XtC(@B$NTljy45^tT?SHJ10ruX zOS$(<@@!=?P@`0+S)vnkL!=bB)DOg{Q*}L+GO)XAK;&$g@DSo22n#XlR9!)?07D(! zDxz;SOSunBbNCAVm!5U2c~9jVx@WU3=u3)pJ!ur3cu;sm-)NQ!pM}i;0{{TnZpA^Z ztASvff%b#?JdoF$<=hv8)Q159pyx{LBoBD4SyIzhb(HlW;>}!J+1=AqCDO_A6&XN}=e)0!pcibn z_HtD9d_@BAknp}zDCb9=>MK#y^fmCZ_8GoYkv>KTT7e$nHy?0mXP*UpX*>1PgVgRc z3#Fdn#d~2}5mATky^{qxZ#%U!Ve5AonQN!;&C-!_@cJGbKmk6^xYakqWbkDSU>e?6 zF9=onXw<2mHO=A62q0{DUp*iYB(+@Ja7a-n2aQU$C-1do)^M)j_l7Z`m-DHf;N2WNgeIsEr6@kFmJ z8_YbwGn3bL?QPY+LOBr_TDRcEMmfJ|;s=HR0IQ!ry9xAti1(G5Y&@#1^&${_&Hfi+ z9c`2jUpMuHhg{we{KebpwXs3NLqaRiAr)b6sg!$n>kZxDN)lj0k<-mm?qZatNdeqJ z)Lky+8&Ml40dUjvB)_tlzY&Ld+&A&{bh~wEWib~^c!+ZagoS&X-t=l^d_A@r#J2*U lKABp3ezkHW*6{xc{R@3@kib`1LqGrk002ovPDHLkV1l684mkh- literal 0 HcmV?d00001