@@ -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