From 82f95e0cefcb88b00e621e585cf43bb4e6319425 Mon Sep 17 00:00:00 2001 From: czeppi Date: Mon, 31 Mar 2025 07:57:29 +0200 Subject: [PATCH] 1st version --- apps/cc_astro/ChangeLog | 1 + apps/cc_astro/README.md | 17 +++ apps/cc_astro/app.js | 202 ++++++++++++++++++++++++++++++ apps/cc_astro/app_icon.js | 1 + apps/cc_astro/cc_astro_icon.png | Bin 0 -> 4002 bytes apps/cc_astro/cc_astro_screen.png | Bin 0 -> 3710 bytes apps/cc_astro/metadata.json | 18 +++ apps/cc_astro/settings.js | 33 +++++ 8 files changed, 272 insertions(+) create mode 100644 apps/cc_astro/ChangeLog create mode 100644 apps/cc_astro/README.md create mode 100644 apps/cc_astro/app.js create mode 100644 apps/cc_astro/app_icon.js create mode 100644 apps/cc_astro/cc_astro_icon.png create mode 100644 apps/cc_astro/cc_astro_screen.png create mode 100644 apps/cc_astro/metadata.json create mode 100644 apps/cc_astro/settings.js diff --git a/apps/cc_astro/ChangeLog b/apps/cc_astro/ChangeLog new file mode 100644 index 000000000..507df8921 --- /dev/null +++ b/apps/cc_astro/ChangeLog @@ -0,0 +1 @@ +0.01: copied from cc_abstract (V0.01) diff --git a/apps/cc_astro/README.md b/apps/cc_astro/README.md new file mode 100644 index 000000000..b328251b5 --- /dev/null +++ b/apps/cc_astro/README.md @@ -0,0 +1,17 @@ +# Analog Clock With Abstract Face + +## Features + +* inspired from the abstract face of the google smartwatch +* second hand (only on unlocked screen) +* date +* battery percentage (showing charge status with color) +* turned off or swipeable widgets (choose in settings) + +![logo](cc_clock24_screen.png) + +## Settings + +* whether to load widgets, or not; if widgets are loaded, they are swipeable from the top; if not, NO ACTIONS of widgets are available +* date and battery can be printed both below hands (as if hands were physical) and above (more readable) +* hour hand can be made slighly shorter to improve readability when minute hand is behind a number diff --git a/apps/cc_astro/app.js b/apps/cc_astro/app.js new file mode 100644 index 000000000..3e437bd30 --- /dev/null +++ b/apps/cc_astro/app.js @@ -0,0 +1,202 @@ +// ----- const ----- + +const defaultSettings = { + loadWidgets : false, + textAboveHands : false, + shortHrHand : false, + show24HourMode : false +}; + +const settings = Object.assign(defaultSettings, require('Storage').readJSON('cc_abstract.json', 1) || {}); + +const center = { + "x": g.getWidth()/2, + "y": g.getHeight()/2 +}; + +const parameters = { + "earthOrbitRadius": 80, + "venusOrbitRadius": 60, + "mercuryOrbitRadius": 40, + "earthRadius": 8, + "venusRadius": 6, + "mercuryRadius": 4, + "sunRadius": 12, + "maxSunRadius": 115 +}; + +// ----- global vars ----- + +let drawTimeout; +let queueMillis = 1000; +let unlock = true; +let lastBatteryStates = [E.getBattery()]; + +// ----- functions ----- + +function updateState() { + updateBatteryStates(); + + if (Bangle.isLCDOn()) { + if (!Bangle.isLocked()) { + queueMillis = 1000; + unlock = true; + } + else { + queueMillis = 60000; + unlock = false; + } + draw(); + } + else { + if (drawTimeout) + clearTimeout(drawTimeout); + drawTimeout = undefined; + } +} + +function updateBatteryStates() { + lastBatteryStates.push(E.getBattery()); + if (lastBatteryStates.length > 5) + lastBatteryStates.shift(); // remove 1st item +} + +function draw() { + drawBackground(); + drawHands(); + queueDraw(); +} + +function drawBackground() { + clearScreen(); + drawSun(); +} + +function clearScreen() { + g.setBgColor(0, 0, 0); + g.clear(); +} + +function drawSun() { + const batteryState = calcAvgBatteryState(); + + if (batteryState <= 25) + g.setColor(1, 0, 0); // red sun, if battery low + else + g.setColor(1, 1, 0); + + let r = parameters.sunRadius; + if (batteryState <= 20) { + const relSize = (20 - batteryState) / 20; + const dr = parameters.maxSunRadius - parameters.sunRadius; + r = parameters.sunRadius + relSize * dr; + } + + g.fillCircle(center.x, center.y, r); +} + +function drawHands() { + const date = new Date(); + + drawHourHand(date.getHours(), date.getMinutes()); + drawMinuteHand(date.getMinutes()); + + if (unlock) { + drawSecondHand(date.getSeconds()); + } +} + +function drawHourHand(hours, minutes) { + const r = parameters.earthOrbitRadius; + const phi = 30 * (hours + minutes/60) * (Math.PI / 180) - Math.PI/2; + const x = center.x + r * Math.cos(phi); + const y = center.y + r * Math.sin(phi); + + g.setColor(1, 1, 1); + g.drawCircle(center.x, center.y, r); + + g.setColor(0, 1, 1); + g.fillCircle(x, y, parameters.earthRadius); +} + +function drawMinuteHand(minutes) { + const r = parameters.venusOrbitRadius; + const phi = 6 * minutes * (Math.PI / 180) - Math.PI/2; + const x = center.x + r * Math.cos(phi); + const y = center.y + r * Math.sin(phi); + + g.setColor(1, 1, 1); + g.drawCircle(center.x, center.y, r); + + g.setColor(1, 1, 1); + g.fillCircle(x, y, parameters.venusRadius); +} + +function drawSecondHand(seconds) { + const r = parameters.mercuryOrbitRadius; + const phi = 6 * seconds * (Math.PI / 180) - Math.PI/2; + const x = center.x + r * Math.cos(phi); + const y = center.y + r * Math.sin(phi); + + g.setColor(1, 1, 1); + g.drawCircle(center.x, center.y, r); + + g.setColor(1, 0, 1); + g.fillCircle(x, y, parameters.mercuryRadius); +} + +function calcAvgBatteryState() { + const n = lastBatteryStates.length; + if (n == 0) + return 100; + + let sum = lastBatteryStates.reduce((acc, value) => acc + value, 0); + return Math.round(sum / n); +} + +function queueDraw() { + if (drawTimeout) + clearTimeout(drawTimeout); + + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, queueMillis - (Date.now() % queueMillis)); +} + + +//// main running sequence //// + +// Show launcher when middle button pressed, and widgets that we're clock +Bangle.setUI({ + mode: "clock", + remove: function() { + Bangle.removeListener('lcdPower', updateState); + Bangle.removeListener('lock', updateState); + Bangle.removeListener('charging', draw); + + // We clear drawTimout after removing all listeners, because they can add one again + if (drawTimeout) + clearTimeout(drawTimeout); + + drawTimeout = undefined; + require("widget_utils").show(); + } +}); + +// Load widgets if needed, and make them show swipeable +if (settings.loadWidgets) { + Bangle.loadWidgets(); + require("widget_utils").swipeOn(); +} +else if (global.WIDGETS) { + require("widget_utils").hide(); +} + +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower', updateState); +Bangle.on('lock', updateState); +Bangle.on('charging', draw); // Immediately redraw when charger (dis)connected + +updateState(); +draw(); diff --git a/apps/cc_astro/app_icon.js b/apps/cc_astro/app_icon.js new file mode 100644 index 000000000..b213fe5c8 --- /dev/null +++ b/apps/cc_astro/app_icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgIEBoUAiAKCgUCBQUEColEAYUQhAmKCwgeCAAcCgEDjwEBkEAg8TBocNgYFDh8GAYMDxkPjEA8EAwkHJgIcBAoPfAoYWCBYYFIgfvAoX4FYRJEAp9gAomYNAOAArPwAogAC4AFiRoIFJLgIFJuADCg//Q4U//4FDj4FEAAV4Aoi0CSxBsCA==")) \ No newline at end of file diff --git a/apps/cc_astro/cc_astro_icon.png b/apps/cc_astro/cc_astro_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cded02071d3610f442f0ce327f01943a2c915753 GIT binary patch literal 4002 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 literal 0 HcmV?d00001 diff --git a/apps/cc_astro/metadata.json b/apps/cc_astro/metadata.json new file mode 100644 index 000000000..2c053d2c6 --- /dev/null +++ b/apps/cc_astro/metadata.json @@ -0,0 +1,18 @@ +{ "id": "cc_astro", + "name": "CC Astro", + "shortName":"CC-Astro", + "version":"0.01", + "description": "astronomy clock face", + "icon": "cc_astro_icon.png", + "type": "clock", + "tags": "clock", + "supports" : ["BANGLEJS2"], + "screenshots": [{"url":"cc_astro_screen.png"}], + "readme": "README.md", + "storage": [ + {"name":"cc_astro.app.js","url":"app.js"}, + {"name":"cc_astro.settings.js","url":"settings.js"}, + {"name":"cc_astro.img","url":"app_icon.js","evaluate":true} + ], + "data": [{"name":"cc_astro.json"}] +} diff --git a/apps/cc_astro/settings.js b/apps/cc_astro/settings.js new file mode 100644 index 000000000..4aa19215d --- /dev/null +++ b/apps/cc_astro/settings.js @@ -0,0 +1,33 @@ +(function(back) { + const defaultSettings = { + loadWidgets : false, + textAboveHands : false, + shortHrHand : false, + show24HourMode : false + } + let settings = Object.assign(defaultSettings, require('Storage').readJSON('cc_clock24.json',1) || {}); + + const save = () => require('Storage').write('cc_clock24.json', settings); + + const appMenu = { + '': {title: 'cc_clock24'}, '< Back': back, + /*LANG*/'Load widgets': { + value : !!settings.loadWidgets, + onchange : v => { settings.loadWidgets=v; save();} + }, + /*LANG*/'Text above hands': { + value : !!settings.textAboveHands, + onchange : v => { settings.textAboveHands=v; save();} + }, + /*LANG*/'Short hour hand': { + value : !!settings.shortHrHand, + onchange : v => { settings.shortHrHand=v; save();} + }, + /*LANG*/'Show 24 hour mode': { + value : !!settings.show24HourMode, + onchange : v => { settings.show24HourMode=v; save();} + }, + }; + + E.showMenu(appMenu); +})