@@ -3,6 +3,7 @@ Bangle.loadWidgets();
33Bangle.drawWidgets();
44
55const R = Bangle.appRect;
6+ const MS_PER_DAY = 86400000;
67let layer;
78let drag;
89let timerInt1 = [];
@@ -17,6 +18,30 @@ function getCurrentTime() {
1718 );
1819}
1920
21+ function getTimeRemaining(alarm) {
22+ let rem = require('sched').getTimeToAlarm(alarm);
23+ if (rem === undefined) {
24+ // fallback: compute time difference
25+ const now = getCurrentTime();
26+ if (alarm.t >= now) {
27+ rem = alarm.t - now;
28+ } else {
29+ rem = MS_PER_DAY - (now - alarm.t);
30+ }
31+ }
32+ return rem;
33+ }
34+
35+ function formatAlarmTime(t) {
36+ // t is milliseconds since local midnight
37+ const dt = decodeTime(t);
38+ // Use locale.time so formatting respects 12h/24h user settings
39+ const d = new Date(1999, 1, 1, dt.hrs, dt.mins, 0);
40+ const timeStr = require("locale").time(d, 1);
41+ const mer = require("locale").meridian(d);
42+ return timeStr + mer;
43+ }
44+
2045function decodeTime(t) {
2146 let hrs = 0 | Math.floor(t / 3600000);
2247 let mins = 0 | Math.floor(t / 60000 % 60);
@@ -100,7 +125,7 @@ function drawTimers() {
100125 }
101126 else if (idx > 0 && idx < timers.length+1) {
102127 if (timers[idx-1].on == true) {
103- drawMenuItem(formatTime(timers[idx-1].t-getCurrentTime( )));
128+ drawMenuItem(formatTime(getTimeRemaining( timers[idx-1])));
104129 updateTimers(idx-1);
105130 }
106131 else drawMenuItem(formatTime(timers[idx-1].timer));
@@ -156,7 +181,7 @@ function timerMenu(idx) {
156181 let msg = "";
157182 if (a.msg) msg = "\n"+(a.msg.length > 10 ? a.msg.substring(0, 10)+"..." : a.msg);
158183 if (a.on == true) {
159- drawMenuItem(formatTime(a.t-getCurrentTime( ))+msg);
184+ drawMenuItem(formatTime(getTimeRemaining(a ))+msg);
160185 updateTimer();
161186 }
162187 else {
@@ -184,7 +209,7 @@ function timerMenu(idx) {
184209 if (i == 1) {
185210 if (a.on == true) {
186211 clearInt();
187- a.timer = a.t-getCurrentTime( );
212+ a.timer = getTimeRemaining(a );
188213 a.on = false;
189214 timers[timerIdx[idx]] = a;
190215 saveAndReload();
@@ -546,8 +571,7 @@ function drawAlarms() {
546571 .setColor(g.theme.fg).setFont("6x8:2").setFontAlign(0,0).drawString("< Swipe >",r.x+(r.w/2),r.y+(r.h/2));
547572 }
548573 else if (idx > 0 && idx < alarms.length+1){
549- const str = formatTime(alarms[idx-1].t);
550- drawMenuItem(str.slice(0, -3));
574+ drawMenuItem(formatAlarmTime(alarms[idx-1].t));
551575 }
552576 },
553577 select : (idx) => {
@@ -631,6 +655,11 @@ function editAlarm(idx, a) {
631655 },
632656 "Hours": {
633657 value: t.hrs, min: 0, max: 23, wrap: true,
658+ format: v => {
659+ // Show 12h or 24h based on locale settings
660+ const mer = require("locale").meridian(new Date(1999,1,1,v,0,0));
661+ return mer ? (v%12||12) + mer : v;
662+ },
634663 onchange: v => {
635664 t.hrs = v;
636665 a.t = encodeTime(t);
@@ -694,8 +723,7 @@ function setUI() {
694723 const origRemove = Bangle.uiRemove;
695724 Bangle.uiRemove = () => {
696725 Bangle.removeListener("drag", onDrag);
697- Object.values(timerInt1).forEach(clearTimeout);
698- Object.values(timerInt2).forEach(clearTimeout);
726+ clearInt();
699727 if (origRemove) origRemove();
700728 };
701729}
0 commit comments