2022-06-29 17:14:00 +00:00
|
|
|
/************
|
2022-04-03 11:47:33 +00:00
|
|
|
* Includes
|
|
|
|
*/
|
2022-03-25 16:22:39 +00:00
|
|
|
const locale = require('locale');
|
2022-03-27 09:26:22 +00:00
|
|
|
const storage = require('Storage');
|
2022-09-11 16:26:56 +00:00
|
|
|
// const clock_info = require("clock_info");
|
2022-03-27 09:26:22 +00:00
|
|
|
|
2022-06-29 17:14:00 +00:00
|
|
|
/************
|
2022-04-03 11:47:33 +00:00
|
|
|
* Statics
|
|
|
|
*/
|
|
|
|
const SETTINGS_FILE = "bwclk.setting.json";
|
|
|
|
const W = g.getWidth();
|
|
|
|
const H = g.getHeight();
|
2022-03-27 09:26:22 +00:00
|
|
|
|
2022-06-29 17:14:00 +00:00
|
|
|
/************
|
2022-04-03 11:47:33 +00:00
|
|
|
* Settings
|
2022-03-27 09:26:22 +00:00
|
|
|
*/
|
|
|
|
let settings = {
|
2022-08-14 19:30:19 +00:00
|
|
|
screen: "Normal",
|
2022-03-27 09:26:22 +00:00
|
|
|
showLock: true,
|
2022-05-20 05:47:35 +00:00
|
|
|
hideColon: false,
|
2022-06-29 17:14:00 +00:00
|
|
|
menuPosX: 0,
|
|
|
|
menuPosY: 0,
|
2022-03-27 09:26:22 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
|
|
|
|
for (const key in saved_settings) {
|
|
|
|
settings[key] = saved_settings[key]
|
|
|
|
}
|
|
|
|
|
2022-09-17 15:26:43 +00:00
|
|
|
var lock_input = false;
|
2022-03-27 09:26:22 +00:00
|
|
|
|
2022-06-29 17:14:00 +00:00
|
|
|
/************
|
2022-03-27 09:26:22 +00:00
|
|
|
* Assets
|
|
|
|
*/
|
2022-03-25 16:57:19 +00:00
|
|
|
// Manrope font
|
|
|
|
Graphics.prototype.setLargeFont = function(scale) {
|
2022-06-29 20:03:10 +00:00
|
|
|
// Actual height 47 (48 - 2)
|
2022-05-19 18:21:24 +00:00
|
|
|
this.setFontCustom(
|
2022-06-29 20:03:10 +00:00
|
|
|
atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAD/AAAAAAAAA/wAAAAAAAAP8AAAAAAAAD/AAAAAAAAA/wAAAAAAAAP8AAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAD/AAAAAAAAP/wAAAAAAAf/8AAAAAAB///AAAAAAH///wAAAAAf///8AAAAB/////AAAAH////8AAAAP////wAAAA/////AAAAB////+AAAAA////4AAAAAP///gAAAAAD//+AAAAAAA//4AAAAAAAP/gAAAAAAAD/AAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///+AAAAAB////8AAAAB/////wAAAA/////+AAAA//////wAAAf/////+AAAH//////wAAD//////+AAB/+AAAf/gAAf+AAAA/8AAH/AAAAH/AAD/gAAAA/4AA/wAAAAH+AAP8AAAAB/gAD+AAAAAf4AA/gAAAAH+AAP4AAAAA/gAD+AAAAAf4AA/wAAAAH+AAP8AAAAB/gAD/AAAAA/4AA/4AAAAP+AAH/AAAAH/AAB/4AAAH/wAAP/wAAP/4AAD//////+AAAf//////AAAD//////gAAAf/////wAAAD/////4AAAAf////4AAAAB////4AAAAAB///gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAH/AAAAAAAAD/gAAAAAAAA/4AAAAAAAAf8AAAAAAAAH+AAAAAAAAD/gAAAAAAAB/wAAAAAAAAf8AAAAAAAAP///////AAD///////wAA///////8AAP///////AAD///////wAA///////8AAP///////AAD///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAB/AAAA/gAAA/wAAA/4AAAf8AAAf+AAAP/AAAP/gAAH/wAAH/4AAD/8AAD/+AAB//AAA//gAA//wAAf/AAAP/8AAH/AAAH//AAD/gAAD//wAA/wAAB//8AAP8AAA///AAD/AAAf+fwAA/gAAP/n8AAP4AAH/x/AAD+AAD/4fwAA/gAB/8H8AAP8AAf+B/AAD/AAP/AfwAA/4AH/gH8AAH/AH/wB/AAB/8H/4AfwAAP///8AH8AAD////AB/AAAf///gAfwAAD///wAH8AAAf//4AB/AAAD//4AAfwAAAP/8AAH8AAAAf4AAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAADgAAAfwAAAB+AAAH8AAAAfwAAB/AAAAH+AAAfwAAAB/wAAH8AAAA/+AAB/AAAAP/gAAfwA4AA/8AAH8AfgAH/AAB/AP8AA/4AAfwD/gAH+AAH8B/4AB/gAB/A/8AAf4AAfwf/AAD+AAH8P/wAA/gAB/H/8AAf4AAfz//gAH+AAH8//4AB/gAB/f//AA/4AAf/+/4Af8AAH//P/AP/AAB//j////gAAf/wf///4AAH/4H///8AAB/8A///+AAAf+AH///AAAH/AA///gAAB/gAD//wAAAfwAAP/wAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAH/wAAAAAAAH/8AAAAAAAH//AAAAAAAH//wAAAAAAH//8AAAAAAH///AAAAAAH///wAAAAAH///8AAAAAP//9/AAAAAP//8fwAAAAP//4H8AAAAP//4B/AAAAP//4AfwAAAP//4AH8AAAD//4AB/AAAA//4AAfwAAAP/4AAH8AAAD/wAAB/AAAA/wAAAfwAAAPwAH////AADwAB////wAAwAAf///8AAAAAH////AAAAAB////wAAAAAf///8AAAAAH////AAAAAA////wAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAGAHwAAAB///gB+AAAH///8AfwAAB////AP+AAAf///wD/wAAH///+A/+AAB////gP/gAAf///4A/8AAH/8P8AH/AAB/AD+AA/4AAfwA/gAH+AAH8AfwAB/gAB/AH8AAf4AAfwB/AAH+AAH8AfwAB/gAB/AH8AAf4AAfwB/gAH+AAH8Af4AB/gAB/AH/AA/wAAfwB/4Af8AAH8AP/AP/AAB/AD////gAAfwAf///wAAH8AD///8AAB/AA///+AAAfwAH///AAAAAAA///gAAAAAAD//gAAAAAAAP/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///4AAAAAH////wAAAAH/////AAAAD/////4AAAB//////AAAA//////4AAAf//////AAAP//////4AAD/8D/w/+AAB/4B/wD/wAAf8A/wAf8AAP+AP4AD/gAD/AD+AAf4AA/wB/AAH+AAP4AfwAB/gAD+AH8AAf4AA/gB/AAH+AAP4AfwAB/gAD+AH+AAf4AA/wB/gAH+AAP8Af8AD/gAD/gH/gB/wAAf8A/8A/8AAH/AP///+AAB/gB////gAAPwAP///wAAB4AD///4AAAMAAf//8AAAAAAD//+AAAAAAAP/+AAAAAAAA/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAABwAAfwAAAAB8AAH8AAAAD/AAB/AAAAD/wAAfwAAAH/8AAH8AAAH//AAB/AAAP//wAAfwAAP//8AAH8AAf//+AAB/AAf//8AAAfwA///8AAAH8A///4AAAB/A///4AAAAfx///wAAAAH9///wAAAAB////gAAAAAf///gAAAAAH///AAAAAAB///AAAAAAAf/+AAAAAAAH/+AAAAAAAB/8AAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAf/AAAAAP+Af/8AAAAP/4P//wAAAP//P//+AAAH//////wAAB//////8AAA///////gAAf//////8AAH////gP/AAD/wf/wA/wAA/4D/4AP+AAP8Af8AB/gAD/AH/AAf4AA/gA/wAH+AAP4AP4AA/gAD+AD/AAP4AA/gA/wAH+AAP8Af8AB/gAD/AH/AAf4AA/4D/4AP+AAP/B//AH/AAB////4D/wAAf//////8AAD//////+AAAf//////AAAH//////wAAA//8///4AAAD/+D//8AAAAP+Af/8AAAAAAAB/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAB//AAAAAAAB//8AAAAAAB///gAAgAAA///8AAcAAAf///gAPAAAH///8AH4AAD////AD/AAB/+H/4B/wAAf+Af+Af8AAP+AB/wD/gAD/gAf8Af4AA/wAD/AH+AAP8AA/wB/gAD+AAH8AP4AA/gAB/AD+AAP4AAfwB/gAD+AAH8Af4AA/wAD/AH+AAP8AA/gD/gAD/gAf4A/wAAf8A
|
2022-05-19 18:21:24 +00:00
|
|
|
46,
|
2022-06-29 20:03:10 +00:00
|
|
|
atob("ExspGyUkJiQnISYnFQ=="),
|
|
|
|
62+(scale<<8)+(1<<16)
|
2022-05-19 18:21:24 +00:00
|
|
|
);
|
2022-04-02 14:19:47 +00:00
|
|
|
return this;
|
|
|
|
};
|
|
|
|
|
|
|
|
Graphics.prototype.setMediumFont = function(scale) {
|
2022-03-25 16:57:19 +00:00
|
|
|
// Actual height 41 (42 - 2)
|
|
|
|
this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAB/AAAAAAAP/AAAAAAD//AAAAAA///AAAAAP///AAAAB///8AAAAf///AAAAH///wAAAB///+AAAAH///gAAAAH//4AAAAAH/+AAAAAAH/wAAAAAAH8AAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///8AAAAH////AAAAP////wAAAf////4AAA/////8AAB/////+AAD/gAAH+AAD+AAAD/AAH8AAAB/AAH4AAAA/gAH4AAAAfgAH4AAAAfgAPwAAAAfgAPwAAAAfgAPwAAAAfgAHwAAAAfgAH4AAAAfgAH4AAAA/gAH8AAAA/AAD+AAAD/AAD/gAAH/AAB/////+AAB/////8AAA/////4AAAf////wAAAH////gAAAB///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAfwAAAAAAA/gAAAAAAA/AAAAAAAB/AAAAAAAD+AAAAAAAD8AAAAAAAH8AAAAAAAH//////AAH//////AAH//////AAH//////AAH//////AAH//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAA/AAAP4AAB/AAAf4AAD/AAA/4AAD/AAB/4AAH/AAD/4AAP/AAH/AAAf/AAH8AAA//AAH4AAB//AAP4AAD//AAPwAAH+/AAPwAAP8/AAPwAAf4/AAPwAA/4/AAPwAA/w/AAPwAB/g/AAPwAD/A/AAP4AH+A/AAH8AP8A/AAH/A/4A/AAD///wA/AAD///gA/AAB///AA/AAA//+AA/AAAP/8AA/AAAD/wAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAH4AAAHwAAH4AAAH4AAH4AAAH8AAH4AAAP+AAH4AAAH+AAH4A4AB/AAH4A+AA/AAH4B/AA/gAH4D/AAfgAH4H+AAfgAH4P+AAfgAH4f+AAfgAH4/+AAfgAH5/+AAfgAH5//AAfgAH7+/AA/gAH/8/gB/AAH/4f4H/AAH/wf//+AAH/gP//8AAH/AH//8AAH+AD//wAAH8AB//gAAD4AAf+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAD/AAAAAAAP/AAAAAAB//AAAAAAH//AAAAAAf//AAAAAB///AAAAAH///AAAAAf/8/AAAAB//w/AAAAH/+A/AAAA//4A/AAAD//gA/AAAH/+AA/AAAH/4AA/AAAH/gAA/AAAH+AAA/AAAHwAAA/AAAHAAf///AAEAAf///AAAAAf///AAAAAf///AAAAAf///AAAAAf///AAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAP/AHgAAH///AP4AAH///gP8AAH///gP8AAH///gP+AAH///gD/AAH/A/AB/AAH4A/AA/gAH4A+AAfgAH4B+AAfgAH4B+AAfgAH4B8AAfgAH4B8AAfgAH4B+AAfgAH4B+AAfgAH4B+AA/gAH4B/AA/AAH4A/gD/AAH4A/4H+AAH4Af//+AAH4AP//8AAH4AP//4AAHwAD//wAAAAAB//AAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///8AAAAD////AAAAP////wAAAf////4AAA/////8AAB/////+AAD/gP4H+AAD/AfgD/AAH8A/AB/AAH8A/AA/gAH4B+AAfgAH4B+AAfgAPwB8AAfgAPwB8AAfgAPwB+AAfgAPwB+AAfgAH4B+AAfgAH4B/AA/gAH8B/AB/AAH+A/wD/AAD+A/8P+AAB8Af//+AAB4AP//8AAAwAH//4AAAAAD//gAAAAAA//AAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAHAAPwAAAA/AAPwAAAD/AAPwAAAf/AAPwAAB//AAPwAAP//AAPwAA//8AAPwAH//wAAPwAf/+AAAPwB//4AAAPwP//AAAAPw//8AAAAP3//gAAAAP//+AAAAAP//wAAAAAP//AAAAAAP/4AAAAAAP/gAAAAAAP+AAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAH+A//gAAAf/h//4AAA//z//8AAB/////+AAD/////+AAD///+H/AAH+H/4B/AAH8B/wA/gAH4A/gAfgAH4A/gAfgAPwA/AAfgAPwA/AAfgAPwA/AAfgAPwA/AAfgAH4A/gAfgAH4A/gAfgAH8B/wA/gAH/H/4B/AAD///+H/AAD/////+AAB/////+AAA//z//8AAAf/h//4AAAH+A//gAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAD/8AAAAAAP/+AAAAAAf//AAcAAA///gA8AAB///wB+AAD/x/4B/AAD+AP4B/AAH8AH8A/gAH4AH8A/gAH4AD8AfgAP4AD8AfgAPwAB8AfgAPwAB8AfgAPwAB8AfgAPwAB8AfgAH4AD8AfgAH4AD4A/gAH8AH4B/AAD+APwD/AAD/g/wP+AAB/////+AAA/////8AAAf////4AAAP////wAAAH////AAAAA///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DxcjFyAfISAiHCAiEg=="), 54+(scale<<8)+(1<<16));
|
|
|
|
return this;
|
|
|
|
};
|
|
|
|
|
|
|
|
Graphics.prototype.setSmallFont = function(scale) {
|
|
|
|
// Actual height 28 (27 - 0)
|
2022-06-27 15:41:43 +00:00
|
|
|
this.setFontCustom(
|
2022-06-28 08:10:46 +00:00
|
|
|
atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/+cB//5wH//nAAAAAAAAAAAAAAAAAAAB8AAAHwAAAfAAAAAAAAAAAAAfAAAB8AAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAQcAADhwAAOHBAA4c8ADh/wAP/+AB/+AA//wAH+HAAe4cMBDh/wAOP/AA//wAP/wAH/3AAf4cABzhwAAOHAAA4cAADgAAAOAAAAAAAAAAAAAAAAAAAAwAH8HwA/4PgD/geAePA8BwcBw/BwH78DgfvwOB+HA4HAeBwcA8HDgB4f+ADg/wAGB+AAAAAAAAAAAAAAAH4AAA/wBwHngPAcOB4Bw4PAHDh4AcOPAA/x4AD/PAADx4AAAPAAAB5wAAPPwAB5/gAPOPAB4wcAPDBwB4MHAPA4cA4B/gBAH8AAAHAAAAAAAAAAAAAPAAHD/AB/f+AP/x4B4+DwHB4HAcDwcBwHhwHAPHAcAccB4A5wDgB+AGA/4AAH/AAAf+AAAA8AAABgAAAAAfAAAB8AAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/8AD//+A/+/+H4AD98AAB3gAADIAAAAAAAAAAAAAIAAABwAAAXwAAHPwAB8P8D/gP//4AH/8AAAAAAAAAAAAAAAAAAAAAAAAHAAAAcwAAA/gAAb8AAB/gAAH+AAAD+AAAOwAABxAAADAAAAAAAAAAAAAADAAAAMAAAAwAAADAAAAMAAAAwAAB//AAH/8AAAwAAADAAAAMAAAAwAAADAAAAMAAAAAAAAAAAAAABwAAAHIAAAfgAAB8AAAAAAAAAAAAAAAAAAAAAwAAADAAAAMAAAAwAAADAAAAMAAAAwAAADAAAAMAAAAAAAAAAAAAAAAAAAAAAABwAAAHAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAA/wAA//AA//AA//AAH/AAAfAAABAAAAAAAAAAAAAAAAAAAf/wAH//wA///gDgAOAcAAcBwABwHAAHAcAAcBwABwHgAPAPAB4Af//AA//4AA/+AAAAAAAAAAAAAAAAMAAABwAAAOAAAB4AAAH///Af//8B///wAAAAAAAAAAAAAAAAAAAAwAcAPADwB8AfAPAB8B4APwHAB/AcAPcBwB5wHAPHAcB4cA8PBwD/4HAH/AcAHwBwAAAAAAAAAAAAGAHAAcAcAB4BwYDwHDwHAceAcBz4BwHfgHAf3AcB+eDwHw/+AeB/wBwD+AAAAAAAAAAAAAAAAABwAAAfAAAP8AAD/wAA/nAAP4cAD+BwAfgHAB4AcAEA//AAD/8AAP/wAABwAAAHAAAAMAAAAAAAAAAAAAEAH/w4Af/D4B/8HgHDgPAcOAcBw4BwHDgHAcOAcBw8DwHB4eAcH/wBgP+AAAPwAAAAAAAAAAAAAAAB//AAf//AD//+AOHB4Bw4BwHDgHAcOAcBw4BwHDgHAcPA8A4eHgDh/8AEB/gAAD4AAAAAAAAAABwAAAHAAAAcAAMBwADwHAB/AcA/4BwP8AHH/AAd/gAB/wAAH8AAAeAAAAAAAAAAAAAAAEAAPD+AB/f8AP//4B4+DwHDwHAcHAcBwcBwHBwHAcPAcB/+DgD//+AH5/wACB8AAAAAAAAAAAAAAAAEAAAD+AAAf+DAD74OAODw8BwHBwHAOHAcA4cBwDBwHAcHAeBw8A+ePgB//8AD//gAB/wAAAAAAAAAAAAAAAAAAAAAHBwAAcHAABwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AcgDgB+AOAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAeAAAD8AAAf4AADzwAAeHgADwPAAGAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACAAOAcAA8DgAB4cAABzgAAD8AAAHgAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAHgAAA+AAAHgAAAcAAABwD5wHAfnAcD8cBweAAHzwAAP+AAAfwAAAcAAAAAAAAAAAAAAAAAAB/AAA//AAH/+AA8A8AHAA4A4ABwDg+HAcH8OBw444GDBhgYMGGBgwYYHDjjgcP8OBw/44DgDhAOAGAAeAYAA+HgAB/8AAB/gAAAAAAAAAAAAABAAAA8AAAfwAAP/AAH/gAD/4AB/zgAf4OAB8A4AHwDgAf4OAA/84AAP/gAAH/AAAD/gAAB/AAAA8AAAAQAAAAAAAAAB///wH///Af//8BwOBwHA4HAcDgcBwOBwHA4HAcDgcBweBwHj4HAP/58Afz/gAcH8AAAPAAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB8B8ADwHgADAYAAAAAAAAAAAAAAAH///Af//8B///wHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAeAA8A8AHgB8B+AD//gAH/8AAD/AAAAAAAAAAAAAAAAf//8B///wH///AcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAcAAcAAAAAAAAAAAAAAB///wH///Af//8BwOAAHA4AAcDgABwOAAHA4AAcDgABwOAAHAAAAcAAAAAAAAAP/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwGBwHgYPAOBg4A+GPgB4f8ADh/gAAH4AAAAAAAAAAAAAAAH///Af//8B///wAA4AAADgAAAOAAAA4AAADgAAAOAAAA4AAADgAAAOAAAA4AAf//8B///wH///AAAAAAAAAAAAAAAAAAAB///wH///Af//8AAAAAAAAAAAABgAAAHgAAAeAAAA8AAABwAAAHAAAAcAAABwH///Af//4B///AAAAAAAAAAAAAAAAAAAAf//8B///wH///AAHgAAA/AAAH+AAA88AAHh8AA8D4AHgDwA8AHgHgAPAYAAcBAAAwAAABAAAAAAAAAAH///Af//8B///wAAAHAAAAcAAABwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAAAAAAAAAAAAH///Af//8B///wB/AAAB/AAAA/AAAA/gAAA/gAAA/gAAA/AAAD8AAA/AAAfwAAH8AAB/AAAfgAAP4AAB///wH///Af//8AAAAAAAAAAAAAAAAAAAH///Af//8B///wD8AAAD4AAAH4AAAHwAAAPwAAAPgAAAPgAAAfAAAAfAAAA/Af//8B///wH///AAAAAAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB+D8AD//gAH/8AAD+AAAAAAAAAAAH///Af//8B///wHAOAAcA4ABwDgAHAOAAcA4ABwDgAHAeAAeBwAA+fAAD/4AAD/AAADgAAAAAAAAf8AAH/8AB//8AHgDwA8AHgHgAPAcAAcBwABwHAAHAcAAcBwABwHAAnAcAHcA4AfgDwA+AH4P4AP//wAf/3AAP4AAAAAAAAAAAf//8B///wH///AcA4ABwDgAHAOAAcA4ABwDgAHAOAAcB+AB4H+AD59/AP/h8AP8BwAOABAAAAAAAAAAAAAwAD4HwA/4fAD/geAePA8BwcBwHBwHAcDgcBwOBwHA4HAcDgcA4HDwD4eeAHw/4AOD/AAIDwAAAAABwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAH///Af//8B///wHAAAAcAAABwAAAHAAAAcAAABwAAAGAAAAAAAAAAAAAH//wAf//gB///AAAAeAAAA8AAABwAAAHAAAAcAAABwAAAHAAAAcAAADgAAAeAf//wB//+AH//gAAAAAAAAAAGAAAAfAAAB/gAAB/wAAA/4AAAf8AAAP/AAAH8AAADwAAA/AAAf8AAP+AAP/AAH/gAB/wAAH4AAAcAAABAAAAHwAAAf4AAA/+AAAP/gAAH/wAAB/wAA
|
2022-06-27 15:41:43 +00:00
|
|
|
32,
|
2022-06-28 08:10:46 +00:00
|
|
|
atob("BgkMGhEZEgYMDAwQCAwICxILEBAREBEOEREJCREVEQ8ZEhEUExAOFBQHDREPGBMUERQSEhEUERsREBIMCwwTEg4QERAREQoREQcHDgcYEREREQoPDBEPFg8PDwwIDBMcCgoAAAAAAAAAAAAAACERESEAAAAAAAAAAAAAAAAhIQAGCRAQEhAIDw8XCQ8RABIODRELCw4REwcLCQoPHBscDxISEhISEhoUEBAQEAcHBwcTExQUFBQUDhQUFBQUEBEREBAQEBAQGhARERERBwcHBxAREREREREPEREREREPEQ8="),
|
2022-06-27 15:41:43 +00:00
|
|
|
28+(scale<<8)+(1<<16)
|
|
|
|
);
|
2022-06-28 08:10:46 +00:00
|
|
|
return this;
|
2022-03-25 16:57:19 +00:00
|
|
|
};
|
|
|
|
|
2022-08-18 20:15:53 +00:00
|
|
|
Graphics.prototype.setMiniFont = function(scale) {
|
2022-08-20 07:42:51 +00:00
|
|
|
// Actual height 16 (15 - 0)
|
2022-08-18 20:15:53 +00:00
|
|
|
this.setFontCustom(
|
2022-08-20 07:42:51 +00:00
|
|
|
atob('AAAAAAAAAAAAAP+w/5AAAAAA4ADgAOAA4AAAAAAAAAABgBmAGbAb8D+A+YDZ8B/wf4D5gJmAGQAQAAAAAAAeOD8cMwzxj/GPMYwc/Az4AAAAAHAA+DDIYMjA+YBzAAYADeA7MHMw4zDD4ADAAAAz4H/wzjDHMMMwwbBj4APgADAAAAAA4ADgAAAAAAAAAAfwH/54B+ABAAAAAOABeAcf/gfwAAAAACAAaAD4APgAOABgAAAAAAACAAIAAgA/wAMAAgACAAAAAAAAPAA4AAAAAAIAAgACAAIAAgAAAAAAADAAMAAAAAAAcAfwf4D4AIAAAAA/wH/gwDDAMMAwwDB/4D/AAAAAAGAAwAD/8P/wAAAAAHAw8HDA8MHww7DnMH4wGBAAAMBgyHDcMPww/DDv4MfAAAAAAAHgD+A+YPhgwGAH8AfwAEAAAAAA/GD8cMwwzDDMMM5wx+ABgAAAP8B/4MwwzDDMMMwwx+ADwAAAgADAAMBwwfDPgP4A8ADAAAAAe+D/8M4wxjDGMP5wf+ABwAAAfAB+cMYwwjDCMMYwf+A/wAAAAAAAAAxgBCAAAAAAAAAYPBA4AAAAAAAAAgAHAA+AHMAYYAAAAAAAAAAAAAAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAAABhgHMAPgAcAAgAAAAAAAABgAOAAwbDDsMYA/AA4AAAAAAAD4A/wGBgxzDPsMyQjJDPkM+wYIBxgD+AAAAAAABAA8A/gf8DwwODA/sAfwAHwADAAAP/w//DGMMYwxjDOMP9we+ABwA8AP8Bw4MAwwDDAMMAwwDDgcHDgMMAAAAAA//D/8MAwwDDAMMAw4HB/4D/AAAAAAP/w//DGMMYwxjDGMMQwgBAAAP/w//DDAMMAwwDDAMAADwA/wHDgwDDAMMAwwDDCMOJwc+ADwAAA//D/8AMAAwADAAMAAwD/8P/wAAAAAP/w//AAAABgAHAAMAAwAHD/4P+AAAAAAP/w//AOAB+AOcBw4MBwgDAAEAAA//D/8AAwADAAMAAwADAAAP/w//A8AA8AA+AA8AHwB8AeAHgA//D/8AAAAAD/8P/wcAAcAA8AA4AB4P/w//AAAA8AP8Bw4MAwwDDAMMAwwDDgcH/gP8AAAAAA//D/8MMAwwDDAMYA7gB8ABgADwA/wHDgwDDAMMAwwDDA8ODwf/A/8AAAAAD/8P/wwwDDAMMAx4Dv4HxwEBAAAHjg/HDMMMYwxjDGMONwc+ABwMAAwADAAMAA//D/8MAAwADAAIAAAAD/wP/gAHAAMAAwADAAMAHg/8AAAMAA+AA/AAfgAPAA8AfgPwD4AMAAwAD4AD+AA/AA8A/g/gDwAP4AH8AB8APwH8D8AMAAgBDAMPDgO8APAB8AOcDw8MAwgBCAAOAAeAAeAAfwH/B4AOAAwAAAAMAwwPDB8Mew3jD4MPAwwDAAAAAAAAB//3//QABAAAAAAADgAP4AH+AB8AAQAABAAEAAf/9//wAAAAAAAAAAGAAwAGAAwABgADAAGAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAQA3wHbAZMBswGzAf4A/wAAAAAP/w//AYMBgwGDAYMA/gB8AAAAEAD+Ae8BgwGDAYMBgwDGAAAAMAD+Ae8BgwGDAYMBhw//D/8AAAAYAP4B/wGTAZMBkwGTAP4AcAEAAYAP/w//CQAJAAAwAP4hz3GDMQMxAzGHcf/h/8AAAAAP/w//AYABgAGAAYAA/wB/AAAAAA3/Df8AAAAAOf/9//AAAAAP/w//ADgAfADGAYMBAQAAD/8P/wAAAAAB/wH/AYABgAGAAf8A/wGAAYABgAH/AP8AAAAAAf8B/wGAAYABgAGAAP8AfwAAADAA/gHvAYMBgwGDAYMA/gB8AAAAAAH/8f/xgwGDAYMBgwD+AHwAAAAwAP4B7wGDAYMBgwGHAf/x//AAAAAB/wH/AYABgAEAAAAA5gHzAbMBkwGbAd8AzgEAAYAP/wf/AQMBAwAAAAAB/gH/AAMAAwADAAcB/wH/AAABAAHgAPwAHwAPAH4B8AGAAQAB8AB+AA8APwHwAeAA/AAPAD8B+AHAAQEBgwHOAHwAOAD+AccBAwAAAQAB4AD4EB/wB8A/APgBwAAAAAEBgwGPAZ8B8wHjAcMBAQAAAAAABgf/9/n2AAAAAAAP/w//AAAEAAYAB/nz//AGAAAAAAAAAAAAcABgAGAAcAAwAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'),
|
2022-08-18 20:15:53 +00:00
|
|
|
32,
|
2022-08-20 07:42:51 +00:00
|
|
|
atob("AwUHDwoOCwQHBwcJBAcEBgoGCQkKCQoICQoFBQoMCgkPCgoMCwkICwsECAoIDgsMCgwKCgoLCg8KCQoHBgcLCwgJCgkKCQYKCgQECAQOCgoKCgYIBwoIDAkJCAcEBwsQ"),
|
|
|
|
16+(scale<<8)+(1<<16)
|
2022-08-18 20:15:53 +00:00
|
|
|
);
|
|
|
|
return this;
|
|
|
|
};
|
|
|
|
|
2022-06-27 15:59:15 +00:00
|
|
|
function imgLock(){
|
|
|
|
return {
|
|
|
|
width : 16, height : 16, bpp : 1,
|
|
|
|
transparent : 0,
|
|
|
|
buffer : E.toArrayBuffer(atob("A8AH4A5wDDAYGBgYP/w//D/8Pnw+fD58Pnw//D/8P/w="))
|
|
|
|
}
|
|
|
|
}
|
2022-03-27 09:26:22 +00:00
|
|
|
|
2022-04-03 13:33:54 +00:00
|
|
|
|
2022-09-17 16:07:43 +00:00
|
|
|
// ----clock_info ------------------------------------------------------
|
2022-09-18 09:46:25 +00:00
|
|
|
function loadClockInfo() {
|
2022-09-11 16:26:56 +00:00
|
|
|
// info used for drawing...
|
|
|
|
var hrm = "--";
|
|
|
|
var alt = "--";
|
2022-09-12 05:20:11 +00:00
|
|
|
var interval = null;
|
2022-09-11 16:26:56 +00:00
|
|
|
// callbacks (needed for easy removal of listeners)
|
2022-09-17 15:14:20 +00:00
|
|
|
function batteryUpdateHandler() { bangleItems[0].emit("redraw"); }
|
|
|
|
function stepUpdateHandler() { bangleItems[1].emit("redraw"); }
|
|
|
|
function hrmUpdateHandler() { bangleItems[2].emit("redraw"); }
|
2022-09-11 16:26:56 +00:00
|
|
|
function altUpdateHandler() {
|
|
|
|
Bangle.getPressure().then(data=>{
|
|
|
|
if (!data) return;
|
|
|
|
alt = Math.round(data.altitude) + "m";
|
2022-09-17 15:14:20 +00:00
|
|
|
bangleItems[3].emit("redraw");
|
2022-09-11 16:26:56 +00:00
|
|
|
});
|
2022-09-04 09:49:26 +00:00
|
|
|
}
|
2022-09-12 05:20:11 +00:00
|
|
|
function deleteInterval(inter){
|
|
|
|
if(inter){
|
|
|
|
clearInterval(inter);
|
|
|
|
}
|
|
|
|
delete inter;
|
|
|
|
}
|
2022-09-11 16:26:56 +00:00
|
|
|
// actual items
|
2022-09-12 05:20:11 +00:00
|
|
|
var items = [{
|
2022-09-17 15:14:20 +00:00
|
|
|
name: "Bangle",
|
|
|
|
img: atob("GBiBAf8B//4B//4B//4B//4A//x4//n+f/P/P+fPn+fPn+fP3+/Px+/Px+fn3+fzn+f/n/P/P/n+f/x4//4A//4B//4B//4B//8B/w=="),
|
2022-09-11 16:26:56 +00:00
|
|
|
items: [
|
|
|
|
{ name : "Battery",
|
|
|
|
get : () => ({
|
|
|
|
text : E.getBattery() + "%",
|
|
|
|
img : atob(Bangle.isCharging() ? "GBiBAAABgAADwAAHwAAPgACfAAHOAAPkBgHwDwP4Hwf8Pg/+fB//OD//kD//wD//4D//8D//4B//QB/+AD/8AH/4APnwAHAAACAAAA==" : "GBiBAAAAAAAAAAAAAAAAAAAAAD//+P///IAAAr//Ar//Ar//A7//A7//A7//A7//Ar//AoAAAv///D//+AAAAAAAAAAAAAAAAAAAAA==") }),
|
|
|
|
show : function() {
|
2022-09-12 05:20:11 +00:00
|
|
|
deleteInterval(interval);
|
|
|
|
interval = setInterval(()=>this.emit('redraw'), 60000);
|
2022-09-11 16:26:56 +00:00
|
|
|
Bangle.on("charging", batteryUpdateHandler);
|
|
|
|
batteryUpdateHandler();
|
|
|
|
},
|
|
|
|
hide : function() {
|
2022-09-12 05:20:11 +00:00
|
|
|
deleteInterval(interval);
|
2022-09-11 16:26:56 +00:00
|
|
|
Bangle.removeListener("charging", batteryUpdateHandler);
|
|
|
|
},
|
2022-06-29 17:14:00 +00:00
|
|
|
},
|
2022-09-11 16:26:56 +00:00
|
|
|
{ name : "Steps", get : () => ({
|
|
|
|
text : Bangle.getHealthStatus("day").steps,
|
|
|
|
img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==") }),
|
|
|
|
show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); },
|
|
|
|
hide : function() { Bangle.removeListener("step", stepUpdateHandler); },
|
2022-08-18 20:15:53 +00:00
|
|
|
},
|
2022-09-11 16:26:56 +00:00
|
|
|
{ name : "HRM", get : () => ({
|
|
|
|
text : Math.round(Bangle.getHealthStatus("last").bpm) + " bpm",
|
|
|
|
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==") }),
|
|
|
|
show : function() { Bangle.setHRMPower(1,"clkinfo"); Bangle.on("HRM", hrmUpdateHandler); hrm = Math.round(Bangle.getHealthStatus("last").bpm); hrmUpdateHandler(); },
|
|
|
|
hide : function() { Bangle.setHRMPower(0,"clkinfo"); Bangle.removeListener("HRM", hrmUpdateHandler); hrm = "--"; },
|
|
|
|
}
|
|
|
|
],
|
|
|
|
}];
|
|
|
|
var bangleItems = items[0].items;
|
|
|
|
|
|
|
|
if (Bangle.getPressure){ // Altimeter may not exist
|
|
|
|
bangleItems.push({ name : "Altitude", get : () => ({
|
|
|
|
text : alt,
|
|
|
|
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAAACAAAGAAAPAAEZgAOwwAPwQAZgYAwAMBgAGBAACDAADGAABv///////wAAAAAAAAAAAAAAAAAAAA==") }),
|
2022-09-12 05:20:11 +00:00
|
|
|
show : function() { deleteInterval(); interval = setInterval(altUpdateHandler, 60000); alt = "--"; altUpdateHandler(); },
|
|
|
|
hide : function() { deleteInterval(); },
|
2022-06-27 15:41:43 +00:00
|
|
|
});
|
2022-09-11 16:26:56 +00:00
|
|
|
}
|
2022-06-29 17:14:00 +00:00
|
|
|
|
2022-09-11 16:26:56 +00:00
|
|
|
// now load extra data from a third party files
|
|
|
|
require("Storage").list(/clkinfo.js$/).forEach(fn => {
|
|
|
|
items = items.concat(eval(require("Storage").read(fn))());
|
|
|
|
});
|
2022-06-29 17:14:00 +00:00
|
|
|
|
2022-09-11 16:26:56 +00:00
|
|
|
// return it all!
|
|
|
|
return items;
|
2022-09-18 10:01:53 +00:00
|
|
|
}
|
2022-09-17 16:07:43 +00:00
|
|
|
// ----clock_info ------------------------------------------------------
|
2022-09-06 18:37:23 +00:00
|
|
|
|
|
|
|
|
2022-09-15 19:16:00 +00:00
|
|
|
// Custom menus
|
|
|
|
var clockItems = {
|
2022-09-17 15:14:20 +00:00
|
|
|
name: null,
|
|
|
|
img: null,
|
2022-09-15 19:16:00 +00:00
|
|
|
items: [
|
2022-09-15 19:44:47 +00:00
|
|
|
{ name: "WeekOfYear",
|
2022-09-15 19:16:00 +00:00
|
|
|
get: () => ({ text: "Week " + weekOfYear(), img: null}),
|
2022-09-17 15:14:20 +00:00
|
|
|
show: function() { clockItems.items[0].emit("redraw"); },
|
2022-09-15 19:16:00 +00:00
|
|
|
hide: function () {}
|
|
|
|
},
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2022-09-17 16:07:43 +00:00
|
|
|
// ----agenda_clock_info ------------------------------------------------------
|
|
|
|
var agendaItems = {
|
|
|
|
name: "Agenda",
|
|
|
|
img: atob("GBiBAf////////85z/AAAPAAAPgAAP////AAAPAAAPAAAPAAAOAAAeAAAeAAAcAAA8AAAoAABgAADP//+P//8PAAAPAAAPgAAf///w=="),
|
|
|
|
items: []
|
|
|
|
};
|
|
|
|
|
|
|
|
var now = new Date();
|
|
|
|
var agenda = storage.readJSON("android.calendar.json")
|
|
|
|
.filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000)
|
|
|
|
.sort((a,b)=>a.timestamp - b.timestamp);
|
|
|
|
|
|
|
|
agenda.forEach((entry, i) => {
|
|
|
|
|
|
|
|
var title = entry.title.slice(0,14);
|
|
|
|
var date = new Date(entry.timestamp*1000);
|
|
|
|
var dateStr = locale.date(date).replace(/\d\d\d\d/,"");
|
|
|
|
dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : "";
|
|
|
|
|
|
|
|
agendaItems.items.push({
|
2022-09-18 10:00:58 +00:00
|
|
|
name: "agendaEntry-" + i,
|
2022-09-17 16:07:43 +00:00
|
|
|
get: () => ({ text: title + "\n" + dateStr, img: null}),
|
|
|
|
show: function() { agendaItems.items[i].emit("redraw"); },
|
|
|
|
hide: function () {}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
// ----agenda_clock_info ------------------------------------------------------
|
|
|
|
|
|
|
|
|
2022-09-17 16:21:54 +00:00
|
|
|
|
|
|
|
// ----weather_clock_info ------------------------------------------------------
|
|
|
|
var weather = {
|
|
|
|
temp: "?",
|
|
|
|
hum: "?",
|
|
|
|
wind: "?",
|
|
|
|
};
|
|
|
|
|
|
|
|
var weatherJson = storage.readJSON('weather.json');
|
|
|
|
if(weatherJson !== undefined && weatherJson.weather !== undefined){
|
|
|
|
weather = weatherJson.weather;
|
|
|
|
weather.temp = locale.temp(weather.temp-273.15);
|
|
|
|
weather.hum = weather.hum + "%";
|
|
|
|
weather.wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/);
|
|
|
|
weather.wind = Math.round(weather.wind[1]) + "kph";
|
|
|
|
}
|
|
|
|
|
|
|
|
var weatherItems = {
|
|
|
|
name: "Weather",
|
|
|
|
img: atob("GBiBAf+///u5//n7//8f/9wHP8gDf/gB//AB/7AH/5AcP/AQH/DwD/uAD84AD/4AA/wAAfAAAfAAAfAAAfgAA/////+bP/+zf/+zfw=="),
|
|
|
|
items: [
|
|
|
|
{
|
|
|
|
name: "temperature",
|
|
|
|
get: () => ({ text: weather.temp, img: atob("GBiBAf/D//+B//8Y//88//88//88//88//88//8k//8k//8k//8k//8k//8k//4kf/5mf/zDP/yBP/yBP/zDP/5mf/48f/8A///D/w==")}),
|
|
|
|
show: function() { weatherItems.items[0].emit("redraw"); },
|
|
|
|
hide: function () {}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "humidity",
|
|
|
|
get: () => ({ text: weather.hum, img: atob("GBiBAf/7///z///x///g///g///Af//Af/3Af/nA//jg//B/v/B/H+A/H8A+D8AeB8AcB4AYA8AYA8AYA+A4A/B4A//4A//8B///Dw==")}),
|
|
|
|
show: function() { weatherItems.items[1].emit("redraw"); },
|
|
|
|
hide: function () {}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "wind",
|
|
|
|
get: () => ({ text: weather.wind, img: atob("GBiBAf4f//wP//nn//Pn//Pzg//nAf/meIAOfAAefP///P//+fAAAfAAB////////wAAP4AAH///z///z//nz//nz//zj//wH//8Pw==")}),
|
|
|
|
show: function() { weatherItems.items[2].emit("redraw"); },
|
|
|
|
hide: function () {}
|
|
|
|
},
|
|
|
|
]
|
|
|
|
};
|
2022-09-18 10:00:58 +00:00
|
|
|
// ----weather_clock_info ------------------------------------------------------
|
2022-09-17 16:21:54 +00:00
|
|
|
|
|
|
|
|
2022-09-18 10:00:58 +00:00
|
|
|
// ----ha_clock_info ------------------------------------------------------
|
|
|
|
var triggers = require("ha.lib.js").getTriggers();
|
2022-09-17 16:21:54 +00:00
|
|
|
|
2022-09-18 10:00:58 +00:00
|
|
|
var haItems = {
|
|
|
|
name: "Home",
|
|
|
|
img: atob("GBiBAf/////////n///D//+B//8A//48T/wkD/gkD/A8D+AYB8AYA4eZ4QyZMOyZN+fb5+D/B+B+B+A8B+AYB+AYB+AYB+AYB+A8Bw=="),
|
|
|
|
items: [
|
|
|
|
// {
|
|
|
|
// name: "item1",
|
|
|
|
// get: () => ({ text: "Item1", img: atob("GBiBAf/D//+B//8Y//88//88//88//88//88//8k//8k//8k//8k//8k//8k//4kf/5mf/zDP/yBP/yBP/zDP/5mf/48f/8A///D/w==")}),
|
|
|
|
// show: function() { haItems.items[0].emit("redraw"); },
|
|
|
|
// hide: function () {}
|
|
|
|
// },
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
triggers.forEach((trigger, i) => {
|
|
|
|
haItems.items.push({
|
|
|
|
name: "haTrigger-" + i,
|
|
|
|
get: () => ({ text: trigger.display, img: trigger.getIcon()}),
|
|
|
|
show: function() { haItems.items[i].emit("redraw"); },
|
|
|
|
hide: function () {}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
// ----ha_clock_info ------------------------------------------------------
|
2022-09-17 16:21:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
// Still missing
|
2022-09-17 16:07:43 +00:00
|
|
|
var timerItems = {};
|
|
|
|
|
|
|
|
|
2022-09-12 05:20:11 +00:00
|
|
|
// Load menu
|
2022-09-18 09:46:25 +00:00
|
|
|
var menu = loadClockInfo();
|
2022-09-17 16:07:43 +00:00
|
|
|
menu = menu.concat(agendaItems);
|
2022-09-17 16:21:54 +00:00
|
|
|
menu = menu.concat(weatherItems);
|
2022-09-18 10:00:58 +00:00
|
|
|
menu = menu.concat(haItems);
|
2022-09-15 19:16:00 +00:00
|
|
|
menu = menu.concat(clockItems);
|
|
|
|
|
2022-09-12 05:20:11 +00:00
|
|
|
// Set draw functions for each item
|
|
|
|
menu.forEach((menuItm, x) => {
|
|
|
|
menuItm.items.forEach((item, y) => {
|
|
|
|
function drawItem() {
|
2022-09-15 19:16:00 +00:00
|
|
|
// For the clock, we have a special case, as we don't wanna redraw
|
|
|
|
// immediately when something changes. Instead, we update data each minute
|
|
|
|
// to save some battery etc. Therefore, we hide (and disable the listener)
|
|
|
|
// immedeately after redraw...
|
2022-09-12 05:20:11 +00:00
|
|
|
item.hide();
|
2022-09-15 19:16:00 +00:00
|
|
|
|
2022-09-17 15:26:43 +00:00
|
|
|
// After drawing the item, we enable inputs again...
|
|
|
|
lock_input = false;
|
|
|
|
|
2022-09-12 05:20:11 +00:00
|
|
|
var info = item.get();
|
2022-09-12 05:25:32 +00:00
|
|
|
drawMenuItem(info.text, info.img);
|
2022-09-12 05:20:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
item.on('redraw', drawItem);
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
2022-09-12 05:25:32 +00:00
|
|
|
|
2022-03-25 16:22:39 +00:00
|
|
|
|
2022-06-29 17:14:00 +00:00
|
|
|
/************
|
2022-04-03 11:47:33 +00:00
|
|
|
* Helper
|
2022-03-27 09:53:27 +00:00
|
|
|
*/
|
2022-08-14 19:30:19 +00:00
|
|
|
function isFullscreen(){
|
|
|
|
var s = settings.screen.toLowerCase();
|
2022-08-14 20:06:32 +00:00
|
|
|
if(s == "dynamic"){
|
2022-08-14 19:30:19 +00:00
|
|
|
return Bangle.isLocked()
|
2022-08-14 20:06:32 +00:00
|
|
|
} else {
|
|
|
|
return s == "full"
|
2022-08-14 19:30:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-05 08:03:04 +00:00
|
|
|
|
2022-09-15 19:16:00 +00:00
|
|
|
function weekOfYear() {
|
|
|
|
var date = new Date();
|
|
|
|
date.setHours(0, 0, 0, 0);
|
|
|
|
// Thursday in current week decides the year.
|
|
|
|
date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
|
|
|
|
// January 4 is always in week 1.
|
|
|
|
var week1 = new Date(date.getFullYear(), 0, 4);
|
|
|
|
// Adjust to Thursday in week 1 and count number of weeks from date to week1.
|
|
|
|
return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000
|
|
|
|
- 3 + (week1.getDay() + 6) % 7) / 7);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-06-29 17:14:00 +00:00
|
|
|
/************
|
|
|
|
* DRAW
|
2022-04-17 07:43:44 +00:00
|
|
|
*/
|
|
|
|
function draw() {
|
|
|
|
// Queue draw again
|
|
|
|
queueDraw();
|
|
|
|
|
|
|
|
// Draw clock
|
|
|
|
drawDate();
|
2022-09-15 19:01:43 +00:00
|
|
|
drawMenuAndTime();
|
2022-04-17 07:43:44 +00:00
|
|
|
drawLock();
|
|
|
|
drawWidgets();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-04-15 13:50:16 +00:00
|
|
|
function drawDate(){
|
|
|
|
// Draw background
|
2022-09-15 19:01:43 +00:00
|
|
|
var y = H/5*2 + (isFullscreen() ? 0 : 8);
|
|
|
|
g.reset().clearRect(0,0,W,y);
|
2022-04-15 13:50:16 +00:00
|
|
|
|
|
|
|
// Draw date
|
2022-06-29 20:03:10 +00:00
|
|
|
y = parseInt(y/2)+4;
|
2022-08-14 19:30:19 +00:00
|
|
|
y += isFullscreen() ? 0 : 13;
|
2022-04-15 13:50:16 +00:00
|
|
|
var date = new Date();
|
|
|
|
var dateStr = date.getDate();
|
|
|
|
dateStr = ("0" + dateStr).substr(-2);
|
|
|
|
g.setMediumFont(); // Needed to compute the width correctly
|
|
|
|
var dateW = g.stringWidth(dateStr);
|
2022-03-27 09:53:27 +00:00
|
|
|
|
2022-04-15 13:50:16 +00:00
|
|
|
g.setSmallFont();
|
|
|
|
var dayStr = locale.dow(date, true);
|
|
|
|
var monthStr = locale.month(date, 1);
|
|
|
|
var dayW = Math.max(g.stringWidth(dayStr), g.stringWidth(monthStr));
|
|
|
|
var fullDateW = dateW + 10 + dayW;
|
2022-03-25 16:22:39 +00:00
|
|
|
|
2022-05-15 19:45:56 +00:00
|
|
|
g.setFontAlign(-1,0);
|
2022-06-29 17:14:00 +00:00
|
|
|
g.drawString(dayStr, W/2 - fullDateW/2 + 10 + dateW, y-12);
|
|
|
|
g.drawString(monthStr, W/2 - fullDateW/2 + 10 + dateW, y+11);
|
|
|
|
|
2022-04-15 13:50:16 +00:00
|
|
|
g.setMediumFont();
|
|
|
|
g.setColor(g.theme.fg);
|
2022-08-03 20:02:12 +00:00
|
|
|
g.drawString(dateStr, W/2 - fullDateW / 2, y+2);
|
2022-04-15 13:50:16 +00:00
|
|
|
}
|
2022-04-03 13:33:54 +00:00
|
|
|
|
|
|
|
|
2022-09-15 19:01:43 +00:00
|
|
|
function drawTime(y, smallText){
|
2022-03-25 16:57:19 +00:00
|
|
|
// Draw background
|
2022-03-27 09:26:22 +00:00
|
|
|
var date = new Date();
|
2022-04-11 18:05:48 +00:00
|
|
|
|
2022-03-27 09:26:22 +00:00
|
|
|
// Draw time
|
2022-04-02 13:59:44 +00:00
|
|
|
g.setColor(g.theme.bg);
|
2022-05-15 19:45:56 +00:00
|
|
|
g.setFontAlign(0,0);
|
2022-05-20 05:47:35 +00:00
|
|
|
|
2022-05-20 11:13:54 +00:00
|
|
|
var hours = String(date.getHours());
|
|
|
|
var minutes = date.getMinutes();
|
|
|
|
minutes = minutes < 10 ? String("0") + minutes : minutes;
|
|
|
|
var colon = settings.hideColon ? "" : ":";
|
|
|
|
var timeStr = hours + colon + minutes;
|
2022-05-20 05:47:35 +00:00
|
|
|
|
2022-05-20 11:13:54 +00:00
|
|
|
// Set y coordinates correctly
|
2022-05-15 19:45:56 +00:00
|
|
|
y += parseInt((H - y)/2) + 5;
|
2022-04-02 14:19:47 +00:00
|
|
|
|
2022-04-17 07:43:44 +00:00
|
|
|
// Show large or small time depending on info entry
|
2022-09-15 19:01:43 +00:00
|
|
|
if(smallText){
|
|
|
|
y -= 15;
|
|
|
|
g.setMediumFont();
|
|
|
|
} else {
|
|
|
|
g.setLargeFont();
|
|
|
|
}
|
2022-09-11 16:26:56 +00:00
|
|
|
g.drawString(timeStr, W/2, y);
|
2022-09-12 05:20:11 +00:00
|
|
|
}
|
2022-03-27 09:26:22 +00:00
|
|
|
|
2022-09-12 05:25:32 +00:00
|
|
|
function drawMenuItem(text, image){
|
2022-09-15 19:01:43 +00:00
|
|
|
// First clear the time region
|
|
|
|
var y = H/5*2 + (isFullscreen() ? 0 : 8);
|
2022-09-12 05:25:32 +00:00
|
|
|
|
2022-09-15 19:01:43 +00:00
|
|
|
g.setColor(g.theme.fg);
|
|
|
|
g.fillRect(0,y,W,H);
|
2022-08-18 20:15:53 +00:00
|
|
|
|
2022-09-15 19:01:43 +00:00
|
|
|
// Draw menu text
|
|
|
|
var hasText = (text != null && text != "");
|
|
|
|
if(hasText){
|
|
|
|
g.setFontAlign(0,0);
|
2022-09-17 16:07:43 +00:00
|
|
|
|
|
|
|
// For multiline text we show an even smaller font...
|
2022-09-17 16:21:54 +00:00
|
|
|
text = String(text);
|
2022-09-17 16:07:43 +00:00
|
|
|
if(text.split('\n').length > 1){
|
|
|
|
g.setMiniFont();
|
|
|
|
} else {
|
|
|
|
g.setSmallFont();
|
|
|
|
}
|
2022-09-15 19:01:43 +00:00
|
|
|
|
|
|
|
var imgWidth = image == null ? 0 : 24;
|
|
|
|
var strWidth = g.stringWidth(text);
|
2022-09-17 16:07:43 +00:00
|
|
|
g.setColor(g.theme.fg).fillRect(0, 149-14, W, H);
|
|
|
|
g.setColor(g.theme.bg).drawString(text, W/2 + imgWidth/2 + 2, 149+3);
|
2022-09-15 19:01:43 +00:00
|
|
|
|
|
|
|
if(image != null){
|
2022-09-18 10:00:58 +00:00
|
|
|
var scale = imgWidth / image.width;
|
|
|
|
g.drawImage(image, W/2 + -strWidth/2-4 - parseInt(imgWidth/2), 149 - parseInt(imgWidth/2), {scale: scale});
|
2022-09-12 05:20:11 +00:00
|
|
|
}
|
2022-09-15 19:01:43 +00:00
|
|
|
}
|
2022-08-18 20:15:53 +00:00
|
|
|
|
2022-09-15 19:01:43 +00:00
|
|
|
// Draw time
|
|
|
|
drawTime(y, hasText);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function drawMenuAndTime(){
|
2022-09-17 15:14:20 +00:00
|
|
|
var menuEntry = menu[settings.menuPosX];
|
|
|
|
|
|
|
|
// The first entry is the overview...
|
|
|
|
if(settings.menuPosY == 0){
|
|
|
|
drawMenuItem(menuEntry.name, menuEntry.img);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Draw item if needed
|
2022-09-17 15:26:43 +00:00
|
|
|
lock_input = true;
|
2022-09-17 15:14:20 +00:00
|
|
|
var item = menuEntry.items[settings.menuPosY-1];
|
|
|
|
item.show();
|
2022-04-15 13:50:16 +00:00
|
|
|
}
|
2022-03-27 09:26:22 +00:00
|
|
|
|
2022-04-15 13:50:16 +00:00
|
|
|
|
|
|
|
function drawLock(){
|
2022-03-27 09:26:22 +00:00
|
|
|
if(settings.showLock && Bangle.isLocked()){
|
2022-04-02 14:19:47 +00:00
|
|
|
g.setColor(g.theme.fg);
|
2022-06-27 15:59:15 +00:00
|
|
|
g.drawImage(imgLock(), W-16, 2);
|
2022-03-27 09:26:22 +00:00
|
|
|
}
|
2022-04-15 13:50:16 +00:00
|
|
|
}
|
|
|
|
|
2022-03-27 09:26:22 +00:00
|
|
|
|
2022-04-15 13:50:16 +00:00
|
|
|
function drawWidgets(){
|
2022-08-14 19:30:19 +00:00
|
|
|
if(isFullscreen()){
|
2022-03-27 09:26:22 +00:00
|
|
|
for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";}
|
|
|
|
} else {
|
|
|
|
Bangle.drawWidgets();
|
|
|
|
}
|
2022-03-25 16:22:39 +00:00
|
|
|
}
|
|
|
|
|
2022-04-15 13:50:16 +00:00
|
|
|
|
2022-04-17 07:43:44 +00:00
|
|
|
|
2022-04-15 13:50:16 +00:00
|
|
|
/*
|
2022-04-17 07:43:44 +00:00
|
|
|
* Draw timeout
|
2022-04-15 13:50:16 +00:00
|
|
|
*/
|
2022-04-17 07:43:44 +00:00
|
|
|
// timeout used to update every minute
|
|
|
|
var drawTimeout;
|
2022-04-15 13:50:16 +00:00
|
|
|
|
2022-04-17 07:43:44 +00:00
|
|
|
// schedule a draw for the next minute
|
|
|
|
function queueDraw() {
|
|
|
|
if (drawTimeout) clearTimeout(drawTimeout);
|
|
|
|
drawTimeout = setTimeout(function() {
|
|
|
|
drawTimeout = undefined;
|
|
|
|
draw();
|
|
|
|
}, 60000 - (Date.now() % 60000));
|
2022-04-15 13:50:16 +00:00
|
|
|
}
|
|
|
|
|
2022-04-17 07:43:44 +00:00
|
|
|
|
2022-03-25 16:22:39 +00:00
|
|
|
// Stop updates when LCD is off, restart when on
|
|
|
|
Bangle.on('lcdPower',on=>{
|
|
|
|
if (on) {
|
|
|
|
draw(); // draw immediately, queue redraw
|
|
|
|
} else { // stop draw timer
|
|
|
|
if (drawTimeout) clearTimeout(drawTimeout);
|
|
|
|
drawTimeout = undefined;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
Bangle.on('lock', function(isLocked) {
|
|
|
|
if (drawTimeout) clearTimeout(drawTimeout);
|
2022-04-03 13:59:20 +00:00
|
|
|
drawTimeout = undefined;
|
2022-08-14 19:30:19 +00:00
|
|
|
|
2022-08-15 06:48:57 +00:00
|
|
|
if(!isLocked && settings.screen.toLowerCase() == "dynamic"){
|
|
|
|
// If we have to show the widgets again, we load it from our
|
|
|
|
// cache and not through Bangle.loadWidgets as its much faster!
|
|
|
|
for (let wd of WIDGETS) {wd.draw=wd._draw;wd.area=wd._area;}
|
2022-08-14 19:30:19 +00:00
|
|
|
}
|
2022-08-15 06:48:57 +00:00
|
|
|
|
2022-04-03 13:59:20 +00:00
|
|
|
draw();
|
|
|
|
});
|
|
|
|
|
|
|
|
Bangle.on('charging',function(charging) {
|
|
|
|
if (drawTimeout) clearTimeout(drawTimeout);
|
2022-03-25 16:22:39 +00:00
|
|
|
drawTimeout = undefined;
|
2022-06-29 17:33:23 +00:00
|
|
|
|
|
|
|
// Jump to battery
|
2022-09-12 05:20:11 +00:00
|
|
|
settings.menuPosX = 0;
|
|
|
|
settings.menuPosY = 0;
|
2022-03-25 16:22:39 +00:00
|
|
|
draw();
|
|
|
|
});
|
|
|
|
|
2022-03-27 09:53:27 +00:00
|
|
|
Bangle.on('touch', function(btn, e){
|
2022-08-14 19:30:19 +00:00
|
|
|
var widget_size = isFullscreen() ? 0 : 20; // Its not exactly 24px -- empirically it seems that 20 worked better...
|
2022-07-01 13:09:40 +00:00
|
|
|
var left = parseInt(g.getWidth() * 0.22);
|
2022-04-03 11:57:05 +00:00
|
|
|
var right = g.getWidth() - left;
|
2022-07-01 13:09:40 +00:00
|
|
|
var upper = parseInt(g.getHeight() * 0.22) + widget_size;
|
2022-03-27 09:53:27 +00:00
|
|
|
var lower = g.getHeight() - upper;
|
|
|
|
|
|
|
|
var is_upper = e.y < upper;
|
|
|
|
var is_lower = e.y > lower;
|
2022-07-01 13:09:40 +00:00
|
|
|
var is_left = e.x < left && !is_upper && !is_lower;
|
|
|
|
var is_right = e.x > right && !is_upper && !is_lower;
|
2022-06-27 15:41:43 +00:00
|
|
|
var is_center = !is_upper && !is_lower && !is_left && !is_right;
|
2022-03-27 09:53:27 +00:00
|
|
|
|
2022-09-17 15:26:43 +00:00
|
|
|
if(lock_input){
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-07-01 14:04:16 +00:00
|
|
|
if(is_lower){
|
2022-03-27 09:53:27 +00:00
|
|
|
Bangle.buzz(40, 0.6);
|
2022-09-17 15:14:20 +00:00
|
|
|
settings.menuPosY = (settings.menuPosY+1) % (menu[settings.menuPosX].items.length+1);
|
2022-06-29 17:14:00 +00:00
|
|
|
|
2022-09-15 19:01:43 +00:00
|
|
|
drawMenuAndTime();
|
2022-03-27 09:53:27 +00:00
|
|
|
}
|
|
|
|
|
2022-07-01 14:04:16 +00:00
|
|
|
if(is_upper){
|
2022-07-01 18:14:18 +00:00
|
|
|
if(e.y < widget_size){
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-03-27 09:53:27 +00:00
|
|
|
Bangle.buzz(40, 0.6);
|
2022-06-29 17:14:00 +00:00
|
|
|
settings.menuPosY = settings.menuPosY-1;
|
2022-09-17 15:14:20 +00:00
|
|
|
settings.menuPosY = settings.menuPosY < 0 ? menu[settings.menuPosX].items.length : settings.menuPosY;
|
2022-06-29 17:14:00 +00:00
|
|
|
|
2022-09-15 19:01:43 +00:00
|
|
|
drawMenuAndTime();
|
2022-03-27 09:53:27 +00:00
|
|
|
}
|
2022-04-02 14:54:16 +00:00
|
|
|
|
2022-04-03 11:57:05 +00:00
|
|
|
if(is_right){
|
2022-04-02 14:54:16 +00:00
|
|
|
Bangle.buzz(40, 0.6);
|
2022-06-29 17:14:00 +00:00
|
|
|
settings.menuPosX = (settings.menuPosX+1) % menu.length;
|
2022-09-15 19:01:43 +00:00
|
|
|
settings.menuPosY = 0;
|
|
|
|
drawMenuAndTime();
|
2022-04-03 11:57:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if(is_left){
|
|
|
|
Bangle.buzz(40, 0.6);
|
2022-09-15 19:01:43 +00:00
|
|
|
settings.menuPosY = 0;
|
2022-06-29 17:14:00 +00:00
|
|
|
settings.menuPosX = settings.menuPosX-1;
|
|
|
|
settings.menuPosX = settings.menuPosX < 0 ? menu.length-1 : settings.menuPosX;
|
2022-09-15 19:01:43 +00:00
|
|
|
drawMenuAndTime();
|
2022-04-02 14:54:16 +00:00
|
|
|
}
|
2022-06-27 15:41:43 +00:00
|
|
|
|
|
|
|
if(is_center){
|
2022-09-11 16:26:56 +00:00
|
|
|
// var menuEntry = getMenuEntry();
|
|
|
|
// if(menuEntry.length > 4 && menuEntry[4] != null){
|
|
|
|
// Bangle.buzz(80, 0.6).then(()=>{
|
|
|
|
// try{
|
|
|
|
// menuEntry[4]();
|
|
|
|
// setTimeout(()=>{
|
|
|
|
// Bangle.buzz(80, 0.6);
|
|
|
|
// drawTime();
|
|
|
|
// }, 250);
|
|
|
|
// } catch(ex){
|
|
|
|
// // In case it fails, we simply ignore it.
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// );
|
|
|
|
// }
|
2022-06-27 15:41:43 +00:00
|
|
|
}
|
2022-03-27 09:53:27 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
2022-04-15 13:26:57 +00:00
|
|
|
E.on("kill", function(){
|
2022-06-27 15:45:42 +00:00
|
|
|
try{
|
|
|
|
storage.write(SETTINGS_FILE, settings);
|
|
|
|
} catch(ex){
|
|
|
|
// If this fails, we still kill the app...
|
|
|
|
}
|
2022-04-15 13:26:57 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
2022-05-19 18:09:26 +00:00
|
|
|
/*
|
|
|
|
* Draw clock the first time
|
|
|
|
*/
|
|
|
|
// The upper part is inverse i.e. light if dark and dark if light theme
|
|
|
|
// is enabled. In order to draw the widgets correctly, we invert the
|
|
|
|
// dark/light theme as well as the colors.
|
|
|
|
g.setTheme({bg:g.theme.fg,fg:g.theme.bg, dark:!g.theme.dark}).clear();
|
|
|
|
|
2022-08-25 23:58:19 +00:00
|
|
|
// Show launcher when middle button pressed
|
|
|
|
Bangle.setUI("clock");
|
|
|
|
|
2022-05-19 18:09:26 +00:00
|
|
|
// Load widgets and draw clock the first time
|
|
|
|
Bangle.loadWidgets();
|
2022-08-15 06:48:57 +00:00
|
|
|
|
|
|
|
// Cache draw function for dynamic screen to hide / show widgets
|
|
|
|
// Bangle.loadWidgets() could also be called later on but its much slower!
|
2022-08-15 06:51:02 +00:00
|
|
|
for (let wd of WIDGETS) {wd._draw=wd.draw; wd._area=wd.area;}
|
2022-08-15 06:48:57 +00:00
|
|
|
|
|
|
|
// Draw first time
|
2022-05-19 18:09:26 +00:00
|
|
|
draw();
|