Merge pull request #2088 from peerdavid/master

[BW Clock] Added option for a dynamic screen mode to show widgets only if unlocked.
pull/2090/head
Gordon Williams 2022-08-15 09:11:20 +01:00 committed by GitHub
commit fad985c1e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 25 deletions

View File

@ -11,4 +11,5 @@
0.11: Performance improvements.
0.12: Implements a 2D menu.
0.13: Clicks < 24px are for widgets, if fullscreen mode is disabled.
0.14: Adds humidity to weather data.
0.14: Adds humidity to weather data.
0.15: Added option for a dynamic mode to show widgets only if unlocked.

View File

@ -4,7 +4,7 @@ A very minimalistic clock to mainly show date and time.
![](screenshot.png)
## Features
The BW clock provides many features as well as 3rd party integrations:
The BW clock provides many features and also 3rd party integrations:
- Bangle data such as steps, heart rate, battery or charging state.
- A timer can be set directly. *Requirement: Scheduler library*
- Weather temperature as well as the wind speed can be shown. *Requirement: Weather app*
@ -12,7 +12,13 @@ The BW clock provides many features as well as 3rd party integrations:
Note: If some apps are not installed (e.gt. weather app), then this menu item is hidden.
## Menu
## Settings
- Screen: Normal (widgets shown), Dynamic (widgets shown if unlocked) or Full (widgets are hidden).
- Enable/disable lock icon in the settings. Useful if fullscreen mode is on.
- The colon (e.g. 7:35 = 735) can be hidden in the settings for an even larger time font to improve readability further.
- Your bangle uses the sys color settings so you can change the color too.
## Menu structure
2D menu allows you to display lots of different data including data from 3rd party apps and it's also possible to control things e.g. to set a timer or send a HomeAssistant trigger.
Simply click left / right to go through the menu entries such as Bangle, Timer etc.
@ -31,16 +37,9 @@ to e.g. send a trigger via HomeAssistant once you selected it.
Battery
```
## Settings
- Fullscreen on/off (widgets are still loaded).
- Enable/disable lock icon in the settings. Useful if fullscreen is on.
- The colon (e.g. 7:35 = 735) can be hidden in the settings for an even larger time font to improve readability further.
- There are no design settings, as your bangle sys settings are used.
## Thanks to
<a href="https://www.flaticon.com/free-icons/" title="Icons">Icons created by Flaticon</a>
## Creator
[David Peer](https://github.com/peerdavid)

View File

@ -16,7 +16,7 @@ const H = g.getHeight();
* Settings
*/
let settings = {
fullscreen: false,
screen: "Normal",
showLock: true,
hideColon: false,
menuPosX: 0,
@ -253,6 +253,15 @@ function getMenuEntry(){
/************
* Helper
*/
function isFullscreen(){
var s = settings.screen.toLowerCase();
if(s == "dynamic"){
return Bangle.isLocked()
} else {
return s == "full"
}
}
function getSteps() {
var steps = 0;
try{
@ -267,8 +276,7 @@ function getSteps() {
// In case we failed, we can only show 0 steps.
}
steps = Math.round(steps/100) / 10; // This ensures that we do not show e.g. 15.0k and 15k instead
return steps + "k";
return steps;
}
@ -385,7 +393,7 @@ function drawDate(){
// Draw date
y = parseInt(y/2)+4;
y += settings.fullscreen ? 0 : 13;
y += isFullscreen() ? 0 : 13;
var date = new Date();
var dateStr = date.getDate();
dateStr = ("0" + dateStr).substr(-2);
@ -410,7 +418,7 @@ function drawDate(){
function drawTime(){
// Draw background
var y = H/5*2 + (settings.fullscreen ? 0 : 8);
var y = H/5*2 + (isFullscreen() ? 0 : 8);
g.setColor(g.theme.fg);
g.fillRect(0,y,W,H);
var date = new Date();
@ -479,7 +487,7 @@ function drawLock(){
function drawWidgets(){
if(settings.fullscreen){
if(isFullscreen()){
for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";}
} else {
Bangle.drawWidgets();
@ -517,6 +525,13 @@ Bangle.on('lcdPower',on=>{
Bangle.on('lock', function(isLocked) {
if (drawTimeout) clearTimeout(drawTimeout);
drawTimeout = undefined;
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;}
}
draw();
});
@ -531,7 +546,7 @@ Bangle.on('charging',function(charging) {
});
Bangle.on('touch', function(btn, e){
var widget_size = settings.fullscreen ? 0 : 20; // Its not exactly 24px -- empirically it seems that 20 worked better...
var widget_size = isFullscreen() ? 0 : 20; // Its not exactly 24px -- empirically it seems that 20 worked better...
var left = parseInt(g.getWidth() * 0.22);
var right = g.getWidth() - left;
var upper = parseInt(g.getHeight() * 0.22) + widget_size;
@ -627,6 +642,12 @@ g.setTheme({bg:g.theme.fg,fg:g.theme.bg, dark:!g.theme.dark}).clear();
// Load widgets and draw clock the first time
Bangle.loadWidgets();
// Cache draw function for dynamic screen to hide / show widgets
// Bangle.loadWidgets() could also be called later on but its much slower!
for (let wd of WIDGETS) {wd._draw=wd.draw; wd._area=wd.area;}
// Draw first time
draw();
// Show launcher when middle button pressed

View File

@ -1,7 +1,7 @@
{
"id": "bwclk",
"name": "BW Clock",
"version": "0.14",
"version": "0.15",
"description": "A very minimalistic clock to mainly show date and time.",
"readme": "README.md",
"icon": "app.png",

View File

@ -4,7 +4,7 @@
// initialize with default settings...
const storage = require('Storage')
let settings = {
fullscreen: false,
screen: "Normal",
showLock: true,
hideColon: false,
};
@ -17,15 +17,16 @@
storage.write(SETTINGS_FILE, settings)
}
var screenOptions = ["Normal", "Dynamic", "Full"];
E.showMenu({
'': { 'title': 'BW Clock' },
'< Back': back,
'Fullscreen': {
value: settings.fullscreen,
format: () => (settings.fullscreen ? 'Yes' : 'No'),
onchange: () => {
settings.fullscreen = !settings.fullscreen;
'Screen': {
value: 0 | screenOptions.indexOf(settings.screen),
min: 0, max: 2,
format: v => screenOptions[v],
onchange: v => {
settings.screen = screenOptions[v];
save();
},
},