low-power-mode: initial app

pull/2684/head
Rob Pilling 2023-03-10 23:20:28 +00:00
parent a33a6df463
commit 4bb96f314c
7 changed files with 149 additions and 0 deletions

1
apps/lowpower/ChangeLog Normal file
View File

@ -0,0 +1 @@
0.01: New app!

25
apps/lowpower/README.md Normal file
View File

@ -0,0 +1,25 @@
# Low Power Mode
With this app installed, your Bangle will automatically switch into low power mode when the battery reaches a specified threshold, displaying a simple clock.
# Features
## Time
[x] Show simple date/time
[ ] Disable alarms - with a setting?
## No backlight (#2502)
[x] LCD brightness
[ ] LCD timeout
## Peripherals
[x] Disable auto heart rate measurement in health app (#2502)
[x] Overwrite setGPSPower() function (#2502)
[ ] Turn off already-running GPS / HRM
## Features
[ ] Wake on twist -> off (#2502)
# Creator
[bobrippling](https://github.com/bobrippling/)

40
apps/lowpower/app.js Normal file
View File

@ -0,0 +1,40 @@
"use strict";
if (typeof lowpowerInterval !== "undefined")
lowpowerInterval = clearInterval(lowpowerInterval);
Bangle.setLCDBrightness(0);
Bangle.setGPSPower = Bangle.setHRMPower = function (_val, _name) { return false; };
Bangle.removeAllListeners();
var nextDraw;
var draw = function () {
var x = g.getWidth() / 2;
var y = g.getHeight() / 2 - 48;
var date = new Date();
var timeStr = require("locale").time(date, 1);
var dateStr = require("locale").date(date, 0).toUpperCase() +
"\n" +
require("locale").dow(date, 0).toUpperCase();
g.reset()
.clearRect(Bangle.appRect)
.setFont("Vector", 32)
.setFontAlign(0, 0)
.drawString(timeStr, x, y)
.setFont("Vector", 24)
.drawString(dateStr, x, y + 56)
.drawString("".concat(E.getBattery(), "%"), x, y + 104);
if (nextDraw)
clearTimeout(nextDraw);
nextDraw = setTimeout(function () {
nextDraw = undefined;
draw();
}, 60000 - (date.getTime() % 60000));
};
Bangle.setUI({
mode: "clock",
remove: function () {
if (nextDraw)
clearTimeout(nextDraw);
nextDraw = undefined;
},
});
g.clear();
draw();

52
apps/lowpower/app.ts Normal file
View File

@ -0,0 +1,52 @@
// from boot.js
if(typeof lowpowerInterval !== "undefined")
lowpowerInterval = clearInterval(lowpowerInterval) as undefined;
// backlight
Bangle.setLCDBrightness(0);
// peripherals
Bangle.setGPSPower = Bangle.setHRMPower = (_val: boolean, _name: string) => false;
// events
Bangle.removeAllListeners();
// clock
let nextDraw: number | undefined;
const draw = () => {
const x = g.getWidth() / 2;
const y = g.getHeight() / 2 - 48;
const date = new Date();
const timeStr = require("locale").time(date, 1);
const dateStr = require("locale").date(date, 0).toUpperCase() +
"\n" +
require("locale").dow(date, 0).toUpperCase();
g.reset()
.clearRect(Bangle.appRect)
.setFont("Vector", 32)
.setFontAlign(0, 0)
.drawString(timeStr, x, y)
.setFont("Vector", 24)
.drawString(dateStr, x, y + 56)
.drawString(`${E.getBattery()}%`, x, y + 104);
if(nextDraw) clearTimeout(nextDraw);
nextDraw = setTimeout(() => {
nextDraw = undefined;
draw();
}, 60000 - (date.getTime() % 60000));
};
Bangle.setUI({
mode: "clock",
remove: () => {
if (nextDraw) clearTimeout(nextDraw);
nextDraw = undefined;
},
});
g.clear();
draw();

8
apps/lowpower/boot.js Normal file
View File

@ -0,0 +1,8 @@
"use strict";
var lowpowerInterval = setInterval(function () {
if (Bangle.isCharging())
return;
if (E.getBattery() > 5)
return;
load("lowpower.app.js");
}, 5 * 60 * 1000);

8
apps/lowpower/boot.ts Normal file
View File

@ -0,0 +1,8 @@
let lowpowerInterval: number | undefined = setInterval(() => {
if(Bangle.isCharging())
return;
if(E.getBattery() > 5)
return;
load("lowpower.app.js");
}, 5 * 60 * 1000);

View File

@ -0,0 +1,15 @@
{
"id": "lowpower",
"name": "Low Power Mode",
"version": "0.01",
"description": "Switches to displaying a simple clock when the battery percentage is low, nothing more",
"readme": "README.md",
"icon": "TODOOOOOOOOOOOOOOOO.png",
"type": "clock",
"tags": "clock",
"supports": ["BANGLEJS2"],
"storage": [
{"name":"lowpower.boot.js","url":"boot.js"},
{"name":"lowpower.app.js","url":"app.js"}
]
}