Skip to content

Commit 2122307

Browse files
committed
Added Web AI summit app with initial configurations
1 parent 7517338 commit 2122307

File tree

11 files changed

+422
-0
lines changed

11 files changed

+422
-0
lines changed

apps/webaisummit/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Web AI Summit 2025 App
2+
=======================
3+
4+
This app preloads certain apps for the Web AI Summit 2025.
5+
6+
* WebAI boot screen and delay
7+
* WebAI Welcome screen
8+
* WebAI widget text in top left
9+
* QR Connect app to redirect to `banglejs.com/webai`
10+
* WebAI clock
11+
12+
When in the clock, you can display a QR code with your own custom URL by double tapping.
13+
14+
*Don't tap too fast or two slow* - count `one, two` and tap once for each word, and the QR code will appear. Tap the button or swipe on the screen to go back to the clock.
15+
16+
**Bluetooth is turned off by default** - to enable it, either:
17+
18+
* Go to the end of the Welcome app
19+
* On the clock, tap the button once on the clock to go to the launcher, then scroll down and tap `Connect`

apps/webaisummit/app-icon.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/webaisummit/app.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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+
}

apps/webaisummit/app.png

7.37 KB
Loading

apps/webaisummit/boot.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
// delay loading so that users see the WebAI splash screen!
3+
let t=getTime();
4+
g.drawRect(40,136,136,152);
5+
while (getTime() < t+1) {
6+
g.fillRect(44,140,44+(getTime()-t)*88,148).flip();
7+
}
8+
}

apps/webaisummit/metadata.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"id": "webaisummit",
3+
"name": "WebAI Summit app",
4+
"shortName": "WebAI",
5+
"version": "0.01",
6+
"description": "App/config preinstalled onto watches for the Web AI Summit 2025",
7+
"icon": "app.png",
8+
"type": "clock",
9+
"tags": "clock",
10+
"dependencies" : { "libqr":"module", "qrconnect":"app" },
11+
"supports": ["BANGLEJS2"],
12+
"readme": "README.md",
13+
"storage": [
14+
{"name":".splash","url":"splash.img"},
15+
{"name":".bootPowerOn","url":"boot.js"},
16+
{"name":"qrconnect.json","url":"qrconnect.json"},
17+
{"name":"webaisummit.wid.js","url":"widget.js"},
18+
{"name":"webaisummit.img","url":"app-icon.js","evaluate":true},
19+
{"name":"webaisummit.app.js","url":"app.js"},
20+
{"name":"welcome.js","url":"welcome.js"}
21+
]
22+
}

apps/webaisummit/qrconnect.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"url":"https://banglejs.com/webai"}

apps/webaisummit/social.js

Whitespace-only changes.

apps/webaisummit/splash.img

921 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)