mirror of https://github.com/espruino/BangleApps
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
commit
fad985c1e7
|
@ -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.
|
|
@ -4,7 +4,7 @@ A very minimalistic clock to mainly show date and time.
|
|||

|
||||
|
||||
## 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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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();
|
||||
},
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue