diff --git a/apps/messages/app.js b/apps/messages/app.js
index 6feda9494..282a2b125 100644
--- a/apps/messages/app.js
+++ b/apps/messages/app.js
@@ -92,6 +92,7 @@ function getMessageImage(msg) {
if (s=="skype") return atob("GhoBB8AAB//AA//+Af//wH//+D///w/8D+P8Afz/DD8/j4/H4fP5/A/+f4B/n/gP5//B+fj8fj4/H8+DB/PwA/x/A/8P///B///gP//4B//8AD/+AAA+AA==");
if (s=="slack") return atob("GBiBAAAAAAAAAABAAAHvAAHvAADvAAAPAB/PMB/veD/veB/mcAAAABzH8B3v+B3v+B3n8AHgAAHuAAHvAAHvAADGAAAAAAAAAAAAAA==");
if (s=="sms message") return getNotificationImage();
+ if (s=="threema") return atob("GBjB/4Yx//8AAAAAAAAAAAAAfgAB/4AD/8AH/+AH/+AP//AP2/APw/APw/AHw+AH/+AH/8AH/4AH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=");
if (s=="twitter") return atob("GhYBAABgAAB+JgA/8cAf/ngH/5+B/8P8f+D///h///4f//+D///g///wD//8B//+AP//gD//wAP/8AB/+AB/+AH//AAf/AAAYAAA");
if (s=="telegram") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA==");
if (s=="whatsapp") return atob("GBiBAAB+AAP/wAf/4A//8B//+D///H9//n5//nw//vw///x///5///4///8e//+EP3/APn/wPn/+/j///H//+H//8H//4H//wMB+AA==");
@@ -120,6 +121,7 @@ function getMessageImageCol(msg,def) {
"outlook mail": "#0072c6",
"skype": "#00aff0",
"slack": "#e51670",
+ "threema": "#000",
"telegram": "#0088cc",
"twitter": "#1da1f2",
"whatsapp": "#4fce5d",
diff --git a/apps/widcw/ChangeLog b/apps/widcw/ChangeLog
new file mode 100644
index 000000000..a4bc24d1a
--- /dev/null
+++ b/apps/widcw/ChangeLog
@@ -0,0 +1 @@
+0.01: First version
\ No newline at end of file
diff --git a/apps/widcw/logo.svg b/apps/widcw/logo.svg
new file mode 100644
index 000000000..e093414d5
--- /dev/null
+++ b/apps/widcw/logo.svg
@@ -0,0 +1,62 @@
+
+
+
+
diff --git a/apps/widcw/metadata.json b/apps/widcw/metadata.json
new file mode 100644
index 000000000..653b093ec
--- /dev/null
+++ b/apps/widcw/metadata.json
@@ -0,0 +1,13 @@
+{
+ "id": "widcw",
+ "name": "Calendar Week Widget",
+ "version": "0.01",
+ "description": "Widget which shows the current calendar week",
+ "icon": "widget.png",
+ "type": "widget",
+ "tags": "widget,calendar",
+ "supports": ["BANGLEJS","BANGLEJS2"],
+ "storage": [
+ {"name":"widcw.wid.js","url":"widget.js"}
+ ]
+}
diff --git a/apps/widcw/widget.js b/apps/widcw/widget.js
new file mode 100644
index 000000000..ef43a4551
--- /dev/null
+++ b/apps/widcw/widget.js
@@ -0,0 +1,48 @@
+(function() {
+ var width = 22; // width of the widget
+
+ function draw() {
+ const x = this.x, y = this.y, x2 = x+21, y2 = y+23;
+
+ var date = new Date();
+
+ // Calculate calendar week (https://stackoverflow.com/a/6117889)
+ getCW= function(date){
+ var d=new Date(date.getFullYear(), date.getMonth(), date.getDate());
+ var dayNum = d.getDay() || 7;
+ d.setDate(d.getDate() + 4 - dayNum);
+ var yearStart = new Date(d.getFullYear(),0,1);
+ return Math.ceil((((d - yearStart) / 86400000) + 1)/7);
+ };
+
+ g.reset().setFontAlign(0, 0) // center all text
+ // header
+ .setBgColor("#f00").setColor("#fff")
+ .clearRect(x, y, x2, y+8).setFont("4x6").drawString("CW", (x+x2)/2+1, y+5)
+ // date
+ .setBgColor("#fff").setColor("#000")
+ .clearRect(x, y+9, x2, y2).setFont("Vector:16").drawString(getCW(date), (x+x2)/2+2, y+17);
+
+ if (!g.theme.dark) {
+ // black border around date for light themes
+ g.setColor("#000").drawPoly([
+ x, y+9,
+ x, y2,
+ x2, y2,
+ x2, y+9
+ ]);
+ }
+
+ // redraw when date changes
+ setTimeout(()=>WIDGETS["widcw"].draw(), (86401 - Math.floor(date/1000) % 86400)*1000);
+
+ }
+
+ // add your widget
+ WIDGETS["widcw"]={
+ area:"tl", // tl (top left), tr (top right), bl (bottom left), br (bottom right)
+ width: width, // how wide is the widget? You can change this and call Bangle.drawWidgets() to re-layout
+ draw:draw // called to draw the widget
+ };
+
+})();
diff --git a/apps/widcw/widget.png b/apps/widcw/widget.png
new file mode 100644
index 000000000..c73d40c5a
Binary files /dev/null and b/apps/widcw/widget.png differ
diff --git a/apps/widcw/widget.svg b/apps/widcw/widget.svg
new file mode 100644
index 000000000..d3e567286
--- /dev/null
+++ b/apps/widcw/widget.svg
@@ -0,0 +1,55 @@
+
+
+
+
diff --git a/modules/exstats.js b/modules/exstats.js
index 8a726a5de..b72ee6584 100644
--- a/modules/exstats.js
+++ b/modules/exstats.js
@@ -119,6 +119,7 @@ Bangle.on("GPS", function(fix) {
Bangle.on("step", function(steps) {
if (!state.active) return;
if (stats["step"]) stats["step"].emit("changed",stats["step"]);
+ state.stepHistory[0] += steps-state.lastStepCount;
state.lastStepCount = steps;
});
Bangle.on("HRM", function(h) {