From 7d986c2d46ae35d6f0df2f7a2c6285ff80177c9a Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 30 Jan 2023 18:07:02 +0100 Subject: [PATCH] Added dynamic screen --- apps/happyclk/README.md | 2 +- apps/happyclk/happyclk.app.js | 32 +++++++++++++++++++++++++----- apps/happyclk/happyclk.settings.js | 4 ++-- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/apps/happyclk/README.md b/apps/happyclk/README.md index 2311add6a..d5b8752fb 100644 --- a/apps/happyclk/README.md +++ b/apps/happyclk/README.md @@ -15,7 +15,7 @@ Here you can see an example of a locked bangle with a low battery: ![](screenshot_3.png) ## Settings -- Screen: Normal (widgets shown), Full (widgets are hidden). +- Screen: Normal (widgets shown), Dynamic (widgets shown if unlocked) or Full (widgets are hidden). - Theme: Select your custom theme, independent of system settings. ## Creator diff --git a/apps/happyclk/happyclk.app.js b/apps/happyclk/happyclk.app.js index b43ce2efa..2ba84e1b5 100644 --- a/apps/happyclk/happyclk.app.js +++ b/apps/happyclk/happyclk.app.js @@ -3,15 +3,18 @@ */ +const storage = require('Storage'); +const widget_utils = require("widget_utils"); + + /************************************************ * Settings */ -const storage = require('Storage'); const SETTINGS_FILE = "happyclk.setting.json"; let settings = { color: "Dark", - screen: "Full" + screen: "Dynamic" }; let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; @@ -83,6 +86,16 @@ var drawTimeout; * HELPER */ +let isFullscreen = function() { + var s = settings.screen.toLowerCase(); + if(s == "dynamic"){ + return Bangle.isLocked(); + } else { + return s == "full"; + } + }; + + // Based on the great multi clock from https://github.com/jeffmer/BangleApps/ Graphics.prototype.drawPupils = function(cx, cy, r1, dx, dy, angle) { angle = angle % 360; @@ -175,7 +188,7 @@ let drawSmile = function(isLocked){ } let drawEyeBrow = function(){ - if(settings.screen != "Full") return; + if(!isFullscreen()) return; g.setColor(colors.fg); var w = 6; @@ -187,8 +200,8 @@ let drawEyeBrow = function(){ let drawWidgets = function(){ - if (settings.screen == "Full") { - require('widget_utils').hide(); + if (isFullscreen()) { + widget_utils.hide(); } else { Bangle.drawWidgets(); } @@ -229,6 +242,15 @@ 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! + widget_utils.show(); + } + draw(isLocked); }); diff --git a/apps/happyclk/happyclk.settings.js b/apps/happyclk/happyclk.settings.js index d047a8d4a..dd9f2f675 100644 --- a/apps/happyclk/happyclk.settings.js +++ b/apps/happyclk/happyclk.settings.js @@ -5,7 +5,7 @@ const storage = require('Storage') let settings = { color: "Dark", - screen: "Full" + screen: "Dynamic" }; let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; for (const key in saved_settings) { @@ -17,7 +17,7 @@ } var colorOptions = ["Dark", "Black", "White", "Blue", "Green", "Red", "Purple", "Yellow"]; - var screenOptions = ["Normal", "Full"]; + var screenOptions = ["Normal", "Dynamic", "Full"]; E.showMenu({ '': { 'title': 'Happy Clock' }, '< Back': back,