From 80173b98515926c8a69b59b836c8babd241f6ca7 Mon Sep 17 00:00:00 2001 From: vovcia Date: Sat, 14 Dec 2024 18:08:23 +0100 Subject: [PATCH] Change icon, rename internal timer, display running timer on app restart Start timer on button press Invert icon, update metadata Update ChangeLog --- apps/ateatimer/ChangeLog | 3 +- apps/ateatimer/app-icon.js | 2 +- apps/ateatimer/app.js | 59 +++++++++++++++++++++--------------- apps/ateatimer/metadata.json | 4 +-- 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/apps/ateatimer/ChangeLog b/apps/ateatimer/ChangeLog index b0b91b94a..81da9fdce 100644 --- a/apps/ateatimer/ChangeLog +++ b/apps/ateatimer/ChangeLog @@ -1 +1,2 @@ -0.01: First release \ No newline at end of file +0.01: First release +0.02: Fix icon, utilize sched, show running timer on app relaunch \ No newline at end of file diff --git a/apps/ateatimer/app-icon.js b/apps/ateatimer/app-icon.js index 49ce16c2f..f80208ead 100644 --- a/apps/ateatimer/app-icon.js +++ b/apps/ateatimer/app-icon.js @@ -1 +1 @@ -atob("LjCI/hsbGxsbGxsbGxsbGxsbGwcHBwccHBwcHBwcHBwHBxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsHBwccHR0eHh4PDw8PDx4eHh0cBwcHGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsHBxwdHg8PDw8PDw8eHg8PDw8PDx4dHAcbGxsHGxsbGxsbGxsbGxsbGxsbGxsHHB0eDw8PHh0cGxoaGhoaGxwdHg8PDx4dHAcbGxsbGxsbGxsbGxsbGxsbGwcHHR4PDx4dGxkZGRkZGRkZGRkYGRkbHR4PDx4dBxsbGxsbGwcbGxsbGxsbGwccHQ8PHh0bGRkaGhsbGxoaGhoaGRkZGRkaHB4PDx0cBxsbGxsHGxsbGxsbGwccHg8PHhsZGRsHBxsbGhoaGhkZGRkZGRkZGRkaHg8PHhwHBwcbGxsbGxsbGwccHg8eHBkZGxwHGxoaGxoZBx4aGRsbGRkZGRkZGRkcHg8eHAcbGxsHGxsbGwccHg8eHBkaBxwHGxoZGx4bGR0dGRkdBxkZGRkZGRkZGQceHh4cBxsbBwcbGxscHg8PHBkaBwcbGhkZGRseGhkcHhkZHgcZGRkZGRkZGRkZBx4eHQcbBwcbGxsHHQ8PHBkaBwcaGRkZGRkZHR0ZGR0cGBseGRkZGRkZGRkZGRkcHh4dBwcHGxsHHA8PHRkaBxsaGRkZGRkZGQcdGRkdHBgbHhoZGRkZGRkZGRkZGh0eHhwHBxsbBx4PHhoZGxsaGRkZGRkZGRkcBxkaHBoZBxwZGRkZGRkZGRkZGRkaHR4dBwcbBx0PDxwZGwcaGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQceHhwbGwceDx4ZGhsbGhkZGhoaGxoaGhoaGhoaGhoaGhoaGhoaGRkZGRkZGRkaHR4dBwcdHg8HGRobGhkZGRsdHh4eHh4eHh4eHh4eHh4eHh4eHh0aGRkZGRkZGQceHhwHHQ8eGRkaGhkZGRodDw8PDw8PHg8PHBkeDx4eDw8PDw8PGxkZGRkZGRkaHh4cHB4PHBgaGhkZGRkaHQ8PDw8PHZQcDxr0HR4YGA8PDw8PDwcZGRkZGRkZGRweHRwPDxsZGhkZGRkZGh0PDw8PDx4HHg8a9B0PHBwPDw8PDw8dHAcaGRkZGRkbHh4dDx4aGRkZGRkZGRodDw8PBxwPDw8PGvQdDw8PHgcdDw8PDw8eHRsZGRkZGh4eHQ8dGRkZGRkZGRkaHQ8PHqwZHg8PDxr0HQ8PDx2rBw8PDx0dHg8eGhkZGRodHh4PHRkZGRkZGRkZGh0PDw8eHg8PDw8a3B0PDw8eHh4PDw8HGRodDxwZGRkaHR4eDxwZGRkZGRkZGRodDw8PDw8PDw8erNwaHh4eHh4eDw8PBxkZBx4dGRkZGRweHg8cGRkZGRkZGRkaHQ8PGxsPDw8PG5YY3KysrKwYGB0PDxsZGRseHhkZGRkcHh4eHBkZGRkZGRkZGh0PDxoaHg8PDxv0rNyVlZOrrKwcDx4bGRkdDx0ZGRkZHB4eHhwZGRkZGRkZGRkcDw8eHg8PDw8dGJMaHR4eHh4eDw8eBwcdHg8bGRkZGRweHR4cGRkZGRkZGRkZBx4PDx4eDw8PDx4dHg8PDw8eHg8PHh4eDx4cGRkZGRodHh0eHRkZGRkZGRkZGRoeDx4ZGh4PDw8PDw8PDw8drAcPHh4eHh0HGRkZGRkaHR4cHh4aGRkZGRkZGRkZHA8PHB0PDw8PDw8PDw8PHgcdDx0bGRkZGRkZGRkZGx4eHB4eGxkZGRkZGRkZGRoeDw8PHgceDw8PDw8dHQ8PDx4cGRkZGRkZGRkZGQceHgceHhwZGRkZGRkZGRkZGx4PDx2sHA8dGg8eGRkPDx4dGhgZGRkZGRkZGRkdHh0HHR4eGhkZGRkZGRkZGRkbHh4PHg8PG5MeDx4eDx4dGhkZGRkZGRkZGRkaHh4HBxweHhwZGRkZGRkZGRkZGRsdHh4PDx4cDw8PHh0HGRkZGRkZGRkZGRkZHA8eGgcHHR4dGhkZGRkZGRkZGRkZGhscHh4eHh4eHQcaGRkZGRkZGRkZGRkZGx4PHBkHBxweHhwaGRkZGhwdHR0dHR0dHR4eHh4eHh4dHR0dHR0dHRwZGRkZGh0PHhoYGxsHHR4eBxkZGRodDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8dGRkZGRweDxwYGRsbBwceHh0aGRkZGx4eHh4eHh4eHh4eHh4eHh4eHh4eHh4dGhkZGRseDx4ZGBkHBwcHHB4eHRoZGRkaBwcHBwcHBwcHBwcHBwcHBwcHBwcbGhkZGRoeHh4aGBkZBwcHGxscHh4dGhkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRodHh4bGBgZGQcHBwcbGxweHh0bGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRsdHh4HGBgZGRoHBwcHGxsbHB4eHRsZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQceHh4HGBgZGRoaBwcHBxsbGxsHHR4eHBoZGRkZGRkZGRkZGRkZGRkZGRkZGx0eHh0bGBgZGRoaGgcHBwcHGxsbGhsdHh4dHBsZGRkZGRkZGRkZGRkZGRobHB4eHh0aGBgZGRkaGhoHBwcHBwcHGxsaGgcdHh4dHQcbGhkZGRkZGRkaGxwdHh4eHRsZGBgZGRkaGhobGxsHGxsHBwcbGxoaGgcdHh4eHh0dHRwcHB0dHh4eHh4dGxkYGBgZGRkaGhobGxsbGxsbBwcHGxsbGhoZGRscHR0eHh4eHh4eHh4dHRwaGBgYGBkZGRoaGhobGxsbGxsbGwcHBwcbGxsaGhoZGRkaGwcHHBwcBxsaGRkYGBgYGRkZGhoaGhobGxsbGxsHBwcHBwcHBxsbGxsaGhoZGRkZGRgYGBgYGBgYGBkZGRkZGhoaGhsbGxsbGw==") \ No newline at end of file +require("heatshrink").decompress(atob("mEwgIKHgwFKo0gAofmsALEGR0H/+f//+gEP/4ACAoXAn4FDAQn8g0DAoX4g0BAoXx4E4AoXhAoN/8EP4AzBn/4h/IC4M//kPzgjBz/+h+MAoMfj0PNYUfh4FDh8HAo0wg/454RBmBDBAoRnBCIIjCAAMPF4IFDHYOIgEBj5HBzkAIIPAIIIFBn4hBLIU+AoPgwEQvwFBOIX8CgP5w0RAoSJC/AsB/0EJwIgB/+Aj/wAoN/VgPgQwQFBwBKCXAQWBAAfgAoocCAoQcCAAPAj7XEcYIABcYLIBAAJBBA==")) \ No newline at end of file diff --git a/apps/ateatimer/app.js b/apps/ateatimer/app.js index 6c2837c33..9322d4e46 100644 --- a/apps/ateatimer/app.js +++ b/apps/ateatimer/app.js @@ -44,14 +44,21 @@ function drawTime() { function startTimer() { if (timerRunning) return; + if (timeRemaining == 0) return; timerRunning = true; // Save the default duration on timer start timerDuration = timeRemaining; saveDefaultDuration(); + scheduleTimer(); + // Start the secondary timer to update the display + setInterval(updateDisplay, 1000); +} + +function scheduleTimer() { // Schedule a new timer using the sched library - require("sched").setAlarm("mytimer", { + require("sched").setAlarm("ateatimer", { msg: "Tea is ready!", timer: timeRemaining * 1000, // Convert to milliseconds vibrate: ".." // Default vibration pattern @@ -59,14 +66,11 @@ function startTimer() { // Ensure the scheduler updates require("sched").reload(); - - // Start the secondary timer to update the display - setInterval(updateDisplay, 1000); } function resetTimer() { // Cancel the existing timer - require("sched").setAlarm("mytimer", undefined); + require("sched").setAlarm("ateatimer", undefined); require("sched").reload(); timerRunning = false; @@ -75,25 +79,21 @@ function resetTimer() { } function adjustTime(amount) { + if (-amount > timeRemaining) { + // Return if result will be negative + return; + } timeRemaining += amount; - timeRemaining = Math.max(1, timeRemaining); // Ensure time doesn't go negative - print(timeRemaining); + timeRemaining = Math.max(0, timeRemaining); // Ensure time doesn't go negative if (timerRunning) { // Update the existing timer with the new remaining time - let alarm = require("sched").getAlarm("mytimer"); + let alarm = require("sched").getAlarm("ateatimer"); if (alarm) { // Cancel the current alarm - require("sched").setAlarm("mytimer", undefined); + require("sched").setAlarm("ateatimer", undefined); // Set a new alarm with the updated time - require("sched").setAlarm("mytimer", { - msg: "Tea is ready!", - timer: timeRemaining * 1000, // Convert to milliseconds - vibrate: ".." // Default vibration pattern - }); - - // Reload the scheduler to apply changes - require("sched").reload(); + scheduleTimer(); } } @@ -120,13 +120,11 @@ function handleTouch(x, y) { // Function to update the display every second function updateDisplay() { if (timerRunning) { - let alarm = require("sched").getAlarm("mytimer"); - if (alarm) { - timeRemaining = Math.ceil(require("sched").getTimeToAlarm(alarm) / 1000); - } + let alarm = require("sched").getAlarm("ateatimer"); + timeRemaining = Math.floor(require("sched").getTimeToAlarm(alarm) / 1000); drawTime(); if (timeRemaining <= 0) { - timeRemaining = 0 + timeRemaining = 0; clearInterval(updateDisplay); timerRunning = false; } @@ -135,7 +133,11 @@ function updateDisplay() { // Handle physical button press for resetting timer setWatch(() => { - resetTimer(); + if (timerRunning) { + resetTimer(); + } else { + startTimer(); + } }, BTN1, { repeat: true, edge: "falling" }); // Handle touch @@ -143,5 +145,12 @@ Bangle.on("touch", (zone, xy) => { handleTouch(xy.x, xy.y, false); }); -// Draw the initial timer display -drawTime(); +let isRunning = require("sched").getAlarm("ateatimer"); +if (isRunning) { + timerRunning = true; + // Start the timer to update the display + setInterval(updateDisplay, 1000); +} else { + // Draw the initial timer display + drawTime(); +} \ No newline at end of file diff --git a/apps/ateatimer/metadata.json b/apps/ateatimer/metadata.json index 02c7fe338..c4b8a1458 100644 --- a/apps/ateatimer/metadata.json +++ b/apps/ateatimer/metadata.json @@ -2,8 +2,8 @@ "name": "A Tea Timer", "shortName":"A Tea Timer", "icon": "app.png", - "version":"0.01", - "description": "Simple app for setting countdown timers for tea. Press up and down to change time, and touch time to start counting. Button will stop countdown and reset counter to last used value.", + "version":"0.02", + "description": "Simple app for setting timers for tea. Touch up and down to change time, and time or button to start counting. When timer is running, button will stop timer and reset counter to last used value.", "tags": "timer", "supports": ["BANGLEJS2"], "storage": [