From 6084c2b9ad22d484086feceb1d148df8163bd074 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 10 May 2023 12:05:30 +0100 Subject: [PATCH 1/3] Fix issue with widget utils - just a single hidden widget would cancel checking others --- modules/widget_utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/widget_utils.js b/modules/widget_utils.js index 2a6a407be..e83555729 100644 --- a/modules/widget_utils.js +++ b/modules/widget_utils.js @@ -88,7 +88,7 @@ exports.swipeOn = function(autohide) { } for (var w of global.WIDGETS) { - if (w._draw) return; // already hidden + if (w._draw) continue; // already hidden w._draw = w.draw; w.draw = function() { g=og; From 5d08afdba08d1850e10108356bb56d6f8f674e3c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 10 May 2023 12:06:54 +0100 Subject: [PATCH 2/3] New widget - allows you to use clock info from your widget bar --- apps/widclkinfo/ChangeLog | 1 + apps/widclkinfo/metadata.json | 13 +++++++++ apps/widclkinfo/screenshot.png | Bin 0 -> 3011 bytes apps/widclkinfo/widget.js | 49 +++++++++++++++++++++++++++++++++ apps/widclkinfo/widget.png | Bin 0 -> 7064 bytes 5 files changed, 63 insertions(+) create mode 100644 apps/widclkinfo/ChangeLog create mode 100644 apps/widclkinfo/metadata.json create mode 100644 apps/widclkinfo/screenshot.png create mode 100644 apps/widclkinfo/widget.js create mode 100644 apps/widclkinfo/widget.png diff --git a/apps/widclkinfo/ChangeLog b/apps/widclkinfo/ChangeLog new file mode 100644 index 000000000..4c21f3ace --- /dev/null +++ b/apps/widclkinfo/ChangeLog @@ -0,0 +1 @@ +0.01: New Widget! diff --git a/apps/widclkinfo/metadata.json b/apps/widclkinfo/metadata.json new file mode 100644 index 000000000..3848563c6 --- /dev/null +++ b/apps/widclkinfo/metadata.json @@ -0,0 +1,13 @@ +{ "id": "widclkinfo", + "name": "Clock Info Widget", + "version":"0.01", + "description": "Use 'Clock Info' in the Widget bar. Tap on the widget to select, then drag up/down/left/right to choose what information is displayed.", + "icon": "widget.png", + "screenshots" : [ { "url":"screenshot.png" }], + "type": "widget", + "tags": "widget,clkinfo", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"widclkinfo.wid.js","url":"widget.js"} + ] +} diff --git a/apps/widclkinfo/screenshot.png b/apps/widclkinfo/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d36f6bf05273212e8a54e20a0937ac7e5450c12b GIT binary patch literal 3011 zcmbuBX;2eL7RNgY;S5B?06__$qk|xaFcB1xLvB`-BS4IXsD!vi33!Gx0Rd5l0arkR z2neGhBoK%Ma5&h9OC>i=H;Y-X$D zk%`9gPu<+TdZxcqV^ji?I0@T&$5+=jr6YCgB*_O}59lA?4@u5Iz<_3aS=sG{LPKVNoP_?WX}7fM`K@$ZI%_1pUITN!|-jGy)Gq){lkk(gS;`7 zpoE#NuMf_AM_6wcZ`U_;WoV1dEjb`>$*P3KSdIjdjbrVQ)0qklev9S?>PdBY!cy6) zccxpDr!G1{XTKglbDI&9%36(a!Zm(70olktNMnlZxX^RcH#;7$&B)KfiW&YC(XrFY zqzqOSwD+YG0eL02|KpW>pUvk7O5HUot%~5Po+Ytz?WGhUHv5UJ@l3iutU7%nSCdBj zx?>kMg;QCfSbvf6rLDF;9bLl*H=!$7wRZZwa(Cq^Xm$JoV*aDWp5I2D z0VQ@%jBfc$4Eo3R^KZ21mV!F_@8JXMQ*FS-UA||6eq-Qed{Pj}!>A;l-FK2{pxYdV zV+cz}4;I^8NlIR;zzS0PC&E@Q9ZuUXVDA=9>8}&Tz6@c=qZ7dmW7zEZ$CBU>EVD#s zLEnxuJ+aSD0gtIZg_YoKt_26K5_ew3G9!sWFI1wZt8PB5eSgwEq_U@<%`J|}^d7xl zRg|HqNQblgA>G!_F9?H;KSX~Gy4byYXZMXZdPpwd&gNR2!%_;LLS7nMF|?&btN90u z-^FcNm{S$PGSoSL%`ITFE$%}_xSOK?3IcUhtY;0xHA+V#)t;3O*SfV% zHdNU*yq`7T(-|4zkzeG*M0hv`9uM8vr{c)>1I#KFoi>;$;t~e{n)cBgIg)1YDX9dH zL|GyQrrb&>sJ*@tiea85QQ?3-IXh$xUJFEuU{*BrIvga%a!^3bd3}2UAYcSTARydE zeuHSr{x27A{KBkbPz=|4OeiVmo!(8R3QH>kJ>F$R^V*P1p)EHUSJ6cyyZT954c2!s z_c%D2&9cMTUkBElqUL-3qdy4T^*S-i`5I#UFnuIxZAAN-NQY^aKBbT=Cv`dgJ~n4$ zMqEVzIoyCt@ zN){Sle7x8@x~<306=bm3Rm6_nUQSN<*o97%b6*p=ki54I{_IT56-79m0&=Qw%*^;{{T+C{9cx zE$7D-y~eEh+~WoHc>H&0fbw?LG442vK5FSj=-cbqh)fOce4}O5S6jcI9~0so5u(?v zdruc|y|FWCLbbf42YYn)!A$5%srPPnHBc{hH zx|D$4&4-GHAEM$f)YVkbL^bzgZLMKd6RjnXwxR@xCX@3a#I<2Sdm9r%m(TJm1fS>N z__yj$p{OrU%^Q}BTCb7^(@R~f(DYXb>#tAVvs&c^yeJr{5L!pb(hB}tM#sn9Wn&D0 zz|R-+LP)OHSSmwB7LjzEH~$YPQ4@ksktgQUp7A(&`gW{An+nGY;L~!3MBzqaW=FQHU7n~ z;@zFzhviOz*H2b#$8@&tob1vtn-v5GIYNuo9U4c`KdD;rqIkwx>v5z09|m8m>{fO4 zb#AI)k-y<;RS%(BKy84mEGc0s(h9)1$yt7Ads(6wV`(nW;;a0#;!<$m?LSpnU<7PYW6vAXJG@*g%0|pQlF;@0&kRn4n9W9@SL8d&t0UC^lot~(|2C`4 z)K+9?$7=heoiRsdT`{HHCjL0wsJxM1XJK_1UvxuGoc}Ky$RfK%TFT_Hxn?WB5?dfA zoKg_~3_eHNYNh{}E?1?snQascM~R=(x4}H*LCEl!n>W@2SZj(6_4uHR=Mljhp)!(b z>gxa@Q1|Rw2eZk)+u(ola77JabTX!SH`;5ZDrkL#u-1d=*k{4-$_;2oQSA`|HApVR zLuSC=&e^zvIM`+!SFm7}Fo}FL+G3cHIS=r6xRSdXVMrib382rAOvXSM262HhZ z>}X<|=U))zq#%3Bq)FnP{##2Fm@-rEzgR;};-&|Rp05@?*n$6fv0pi%t2}20_oMD* z$tGa$h~UF!S7~x}N=^DzHJ?J6$P*WBPx`V*zJK5zo7oW=>~=#&H`L%0^#^q`sL$kP z0sGOjr%0f5g$*KNy#$%lcqWAF6`rB$D`@`pa%+@9hx0OH)7Lvw2Oono?_5yEw+5n+ zPm<>cUv>yB2P8x2UV{slC(9Kn@K%E~3vqEn_HCgFi18{i$1lqNygvNZxWd z?tU@6XEL=X5KF{lP{{fluR4LM40x zd_VI3M9rzE(;Pii8n&Tev)f$_i=?_0Ui*~~3w5dyLXY(4bxI1E#orPkY}u#UaI+mi zj6ju#v7jJ|wTQ@h3;?AlDW!QwfGlao=+<(_kd0BQ#O2EkN19qh8KkUUeW6qaly01n z2Qe;g<3n(hk}U}!G+5wfHgRu#Xrfw3+XSt$aBYcCfs9we1aBxwl^ktm!}qQLwM31^ z3tMD}Us*Oq_(IffU$^N! z-VP-bDKi3x&^FfEm?koTF8=d0FW41 z7coSc#Q;a5kf$yr@}O+NlBmV~f&E$J!!!F}6rGEpI+`jzlYjP4S=;IZf{WBr@v?!qxWKdLWS%RG@qW=HGdIjb1sKB^ z{Ld}M1PEyJ+Y#v_{o$WqF%RHFK@LY>@>JR~eMW-0m*BvX;5Bs|2bj;AT1kD1Ae3Lw z`>+^*6B!R*RY(tAaw@mLK|rp7#VxWF4f^h$qZLDeH7-Q9S;`$e)SCfcDN+=FMr2Ca pgJO8M?zt2zd~47L{=dL0I^v_7PrUj!AW|v^Zcd(#r4FRHe*+JDn@Rux literal 0 HcmV?d00001 diff --git a/apps/widclkinfo/widget.js b/apps/widclkinfo/widget.js new file mode 100644 index 000000000..403f289e7 --- /dev/null +++ b/apps/widclkinfo/widget.js @@ -0,0 +1,49 @@ +if (!require("clock_info").loadCount) { // don't load if a clock_info was already loaded + // Load the clock infos + let clockInfoItems = require("clock_info").load(); + // Add the + let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { + // Add the dimensions we're rendering to here - these are used to detect taps on the clock info area + x : 0, y: 0, w: 72, h:24, + // You can add other information here you want to be passed into 'options' in 'draw' + // This function draws the info + draw : (itm, info, options) => { + // itm: the item containing name/hasRange/etc + // info: data returned from itm.get() containing text/img/etc + // options: options passed into addInteractive + clockInfoInfo = info; + if (WIDGETS["clkinfo"]) + WIDGETS["clkinfo"].draw(WIDGETS["clkinfo"]); + } + }); + let clockInfoInfo; // when clockInfoMenu.draw is called we set this up + + // The actual widget we're displaying + WIDGETS["clkinfo"] = { + area:"tl", + width: clockInfoMenu.w, + draw:function(e) { + clockInfoMenu.x = e.x; + clockInfoMenu.y = e.y; + var o = clockInfoMenu; + // Clear the background + g.reset(); + // indicate focus - make background reddish + //if (clockInfoMenu.focus) g.setBgColor(g.blendColor(g.theme.bg, "#f00", 0.25)); + if (clockInfoMenu.focus) g.setColor("#f00"); + g.clearRect(o.x, o.y, o.x+o.w-1, o.y+o.h); + if (clockInfoInfo) { + var x = o.x; + if (clockInfoInfo.img) { + g.drawImage(clockInfoInfo.img, x,o.y); // draw the image + x+=24; + } + var availableWidth = o.x+clockInfoMenu.w - (x+2); + g.setFont("6x8:2").setFontAlign(-1,0); + if (g.stringWidth(clockInfoInfo.text) > availableWidth) + g.setFont("6x8"); + g.drawString(clockInfoInfo.text, x+2,o.y+12); // draw the text + } + } + }; +} \ No newline at end of file diff --git a/apps/widclkinfo/widget.png b/apps/widclkinfo/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..16ecea9f8d6a2bd9e205b5061406bd3aa5df4715 GIT binary patch literal 7064 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 literal 0 HcmV?d00001 From 8a65bc9c7b498e4bf9a918dae9e100a57130ba5d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 10 May 2023 13:48:09 +0100 Subject: [PATCH 3/3] docs --- apps/cscsensor/metadata.json | 2 +- apps/recorder/README.md | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/cscsensor/metadata.json b/apps/cscsensor/metadata.json index ba250c914..87eb5d12f 100644 --- a/apps/cscsensor/metadata.json +++ b/apps/cscsensor/metadata.json @@ -5,7 +5,7 @@ "version": "0.08", "description": "Read BLE enabled cycling speed and cadence sensor and display readings on watch", "icon": "icons8-cycling-48.png", - "tags": "outdoors,exercise,ble,bluetooth", + "tags": "outdoors,exercise,ble,bluetooth,bike,cycle,bicycle", "supports": ["BANGLEJS", "BANGLEJS2"], "readme": "README.md", "storage": [ diff --git a/apps/recorder/README.md b/apps/recorder/README.md index 34955b986..0dd208af5 100644 --- a/apps/recorder/README.md +++ b/apps/recorder/README.md @@ -15,10 +15,11 @@ You can record * **Time** The current time * **GPS** GPS Latitude, Longitude and Altitude -* **Steps** Steps counted by the step counter * **HR** Heart rate and confidence * **BAT** Battery percentage and voltage -* **Core** CoreTemp body temperature +* **Steps** Steps counted by the step counter +* **Baro** (Bangle.js 2) Using the built-in barometer to record Temperature, Pressure and Altitude +* **Core** CoreTemp body temperature *if* you have a CoreTemp device and the https://banglejs.com/apps/?id=coretemp app installed You can then start/stop recording from the Recorder app itself (and as long as widgets are enabled in the app you're using, you can move to another app and continue recording).