; Quick Settings Timer/Chrono/Alarm ; Adds a countdown timer, stopwatch, and alarm system to the quick settings panel ; Timer state lives in Values.timerManager so it persists across menu opens/closes AFFECT [[1658694193319203921]] TRAVERSE [[6502786168]] LOCATE AFTER ALL INSERT { property ~&214620122227&~ timerManager: _timerManager ~&6502786168&~ { ~&5972374&~: _timerManager property ~&6503679477&~ timerMode: ~&6504329801&~ property ~&197088788&~ totalMs: 0 property ~&197088788&~ remainMs: 0 property ~&6503679477&~ isRunning: ~&214625660372&~ property ~&7083178290016&~ ~&478322454160073828&~: "00:00" property ~&6503679477&~ ~&16765420033347753489&~: ~&214625660372&~ property ~&197088788&~ presetMs: 60000 property ~&6503679477&~ addMode: ~&6504329801&~ property ~&6503679477&~ blinkLightOnNotification: ~&214625660372&~ property ~&197102514&~ _blinkLight: ~&6504117156&~ /* Alarm state*/ property ~&6503679477&~ alarmMode: ~&214625660372&~ property ~&197102514&~ alarms: [] property ~&197088788&~ nextAlarmId: 1 property ~&7083178290016&~ alarmNotificationText: "" property ~&197088788&~ lastNotifiedMinute: -1 /* absolute epoch-minute of the last fired alarm*/ function fmt(ms) { ~&197102514&~ ~&180970&~ = ~&6502909715&~.~&197079679&~(ms); ~&197102514&~ ~&180977&~ = ~&6502909715&~.~&214626058827&~(~&180970&~ / 3600000); ~&197102514&~ ~&180982&~ = ~&6502909715&~.~&214626058827&~((~&180970&~ % 3600000) / 60000); ~&197102514&~ ~&180988&~ = ~&6502909715&~.~&214626058827&~((~&180970&~ % 60000) / 1000); ~&197102514&~ mm = ~&180982&~.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~); ~&197102514&~ ss = ~&180988&~.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~); ~&5972376&~ (~&180977&~ > 0) { ~&7083121450889&~ ~&180977&~.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~) + ~&"180931&~ + mm + ~&"180931&~ + ss; } ~&7083121450889&~ mm + ~&"180931&~ + ss; } function refresh() { ~&5972376&~ (_timerManager.alarmMode) ~&7083121450889&~; ~&5972376&~ (_timerManager.timerMode) { _timerManager.~&478322454160073828&~ = _timerManager.fmt(_timerManager.remainMs > 0 ? _timerManager.remainMs : 0); } ~&6503784146&~ { _timerManager.~&478322454160073828&~ = _timerManager.fmt(_timerManager.totalMs); } } function go() { ~&5972376&~ (_timerManager.timerMode) { ~&5972376&~ (_timerManager.remainMs <= 0) ~&7083121450889&~; } _timerManager.~&16765420033347753489&~ = ~&214625660372&~; _timerManager.isRunning = ~&6504329801&~; _tick.~&214641748151&~(); } function ~&6504295855&~() { _timerManager.isRunning = ~&214625660372&~; _tick.~&6504295855&~(); } function doReset() { _timerManager.~&6504295855&~(); _timerManager.~&16765420033347753489&~ = ~&214625660372&~; ~&5972376&~ (_timerManager.timerMode) { _timerManager.remainMs = _timerManager.totalMs; } ~&6503784146&~ { _timerManager.totalMs = 0; } _timerManager.refresh(); } /* Alarm management*/ function addAlarm(~&180977&~, ~&180982&~) { ~&197102514&~ ~&180970&~ = { ~&5972374&~: _timerManager.nextAlarmId, hour: ~&180977&~, minute: ~&180982&~, ~&233726547792244&~: ~&6504329801&~ }; _timerManager.alarms = _timerManager.alarms.~&7082546043425&~([~&180970&~]); _timerManager.nextAlarmId++; _timerManager.saveAlarms(); } function removeAlarm(~&5972374&~) { _timerManager.alarms = _timerManager.alarms.~&7082656280847&~(function(~&180970&~) { ~&7083121450889&~ ~&180970&~.~&5972374&~ !== ~&5972374&~; }); _timerManager.saveAlarms(); } function toggleAlarm(~&5972374&~) { _timerManager.alarms = _timerManager.alarms.~&197092711&~(function(~&180970&~) { ~&5972376&~ (~&180970&~.~&5972374&~ !== ~&5972374&~) ~&7083121450889&~ ~&180970&~; ~&7083121450889&~ { ~&5972374&~: ~&180970&~.~&5972374&~, hour: ~&180970&~.hour, minute: ~&180970&~.minute, ~&233726547792244&~: !~&180970&~.~&233726547792244&~ }; }); _timerManager.saveAlarms(); } function dismissAlarmNotification() { _timerManager.~&16765420033347753489&~ = ~&214625660372&~; _timerManager.alarmNotificationText = ""; } function saveAlarms() { ~&197102514&~ payload = { alarms: _timerManager.alarms, nextAlarmId: _timerManager.nextAlarmId, blinkLightOnNotification: _timerManager.blinkLightOnNotification }; ~&197102514&~ xhr = new XMLHttpRequest(); xhr.~&6504147419&~("PUT", "file:///home/root/alarms.json"); xhr.~&6504279475&~(~&6502785411&~.~&254548178208422824&~(payload)); } function loadAlarms() { ~&197102514&~ xhr = new XMLHttpRequest(); xhr.~&6504147419&~("GET", "file:///home/root/alarms.json"); xhr.onreadystatechange = function() { ~&5972376&~ (xhr.readyState === XMLHttpRequest.DONE) { try { ~&197102514&~ ~&6503736259&~ = ~&6502785411&~.parse(xhr.responseText); _timerManager.alarms = ~&6503736259&~.alarms || []; _timerManager.nextAlarmId = ~&6503736259&~.nextAlarmId || 1; _timerManager.blinkLightOnNotification = ~&6503736259&~.blinkLightOnNotification || ~&214625660372&~; } catch (~&180974&~) { _timerManager.alarms = []; _timerManager.nextAlarmId = 1; } } }; xhr.~&6504279475&~(); } ~&214604601930&~ { ~&5972374&~: _alarmChecker ~&7713147298280334&~: 5000 ~&7083121289162&~: ~&6504329801&~ ~&233743626668842&~: ~&6504329801&~ ~&495358363329399331&~: { ~&197102514&~ ~&180973&~ = new ~&6502586279&~(); /* Use an absolute epoch-minute (not hour*60+minute) so that a recurring*/ /* alarm can fire again on the next day instead of being permanently*/ /* suppressed once it has matched lastNotifiedMinute.*/ ~&197102514&~ nowMinute = ~&6502909715&~.~&214626058827&~(~&180973&~.getTime() / 60000); ~&5972376&~ (nowMinute === _timerManager.lastNotifiedMinute) ~&7083121450889&~; ~&197102514&~ ~&180977&~ = ~&180973&~.getHours(); ~&197102514&~ ~&180982&~ = ~&180973&~.getMinutes(); ~&197085552&~ (~&197102514&~ ~&180978&~ = 0; ~&180978&~ < _timerManager.alarms.~&7082886407723&~; ~&180978&~++) { ~&197102514&~ ~&180970&~ = _timerManager.alarms[~&180978&~]; ~&5972376&~ (~&180970&~.~&233726547792244&~ && ~&180970&~.hour === ~&180977&~ && ~&180970&~.minute === ~&180982&~) { _timerManager.alarmNotificationText = ~&180970&~.hour.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~) + ~&"180931&~ + ~&180970&~.minute.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~); _timerManager.~&16765420033347753489&~ = ~&6504329801&~; _timerManager.lastNotifiedMinute = nowMinute; ~&214621519406&~; } } } } ~&214604601930&~ { ~&5972374&~: _tick ~&7713147298280334&~: 100 ~&7083121289162&~: ~&6504329801&~ ~&495358363329399331&~: { ~&5972376&~ (_timerManager.alarmMode) ~&7083121450889&~; ~&5972376&~ (_timerManager.timerMode) { _timerManager.remainMs -= 100; ~&5972376&~ (_timerManager.remainMs <= 0) { _timerManager.remainMs = 0; _timerManager.~&6504295855&~(); _timerManager.~&16765420033347753489&~ = ~&6504329801&~; } } ~&6503784146&~ { _timerManager.totalMs += 100; } _timerManager.refresh(); } } ~&254480451320573660&~.~&495334332051582499&~: { _timerManager.loadAlarms(); } } } END TRAVERSE END AFFECT AFFECT [[12542166428983872557]] TRAVERSE [[7711468349764991]] > [[6502786168]] > [[8397788359424131273]] > [[14125623155555875541]]#[[233718721544006]] LOCATE AFTER [[254501558939456351]]#[[8399137618543699982]] INSERT { ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: _timerUI.~&2122835675838176157&~ ~&7081629735527&~.~&8399743405844438450&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233740248806464&~.~&214641496386&~ ~&7081629735527&~.~&499747351624466981&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233740248806464&~.~&214641496386&~ ~&14125623155555875541&~ { ~&5972374&~: _timerUI ~&233721384511543&~.~&6504027668&~: ~&7083038346995&~.~&6504027668&~ ~&233721384511543&~.~&214640173127&~: ~&7083038346995&~.~&214640173127&~ ~&233744706647566&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233744706647566&~.~&7082925185962&~ ~&425121728314878811&~.~&15740235808997988493&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ } /* Mode selector tabs*/ ~&254501558939456351&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&233744706647566&~: 0 ~&7712155293725601&~ { ~&214634455770&~: [ { ~&197101097&~: ~&"214604601930&~, ~&6504074414&~: ~&"214642551402&~ }, { ~&197101097&~: "Chrono", ~&6504074414&~: "chrono" }, { ~&197101097&~: "Alarm", ~&6504074414&~: "alarm" } ] ~&7712922269353028&~: ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 68 readonly property ~&6503679477&~ ~&7082453764421&~: ~&254539508423767444&~.~&6504074414&~ === ~&"214642551402&~ ? !~&7082020628281&~.timerManager.alarmMode && ~&7082020628281&~.timerManager.timerMode : ~&254539508423767444&~.~&6504074414&~ === "chrono" ? !~&7082020628281&~.timerManager.alarmMode && !~&7082020628281&~.timerManager.timerMode : ~&7082020628281&~.timerManager.alarmMode ~&6503165774&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: ~&254539508423767444&~.~&197101097&~ ~&6503823200&~.~&254543497768871654&~: 24 ~&6503823200&~.~&6503679370&~: ~&7082453764421&~ ~&214622605608&~: ~&7082453764421&~ ? ~&7082020628281&~.~&8399340017235344933&~ : "#888888" } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { ~&5972376&~ (~&254539508423767444&~.~&6504074414&~ === "alarm") { ~&7082020628281&~.timerManager.~&6504295855&~(); ~&7082020628281&~.timerManager.alarmMode = ~&6504329801&~; } ~&6503784146&~ { ~&7082020628281&~.timerManager.alarmMode = ~&214625660372&~; ~&7082020628281&~.timerManager.~&6504295855&~(); ~&7082020628281&~.timerManager.timerMode = ~&254539508423767444&~.~&6504074414&~ === ~&"214642551402&~; ~&5972376&~ (~&254539508423767444&~.~&6504074414&~ === "chrono") { ~&7082020628281&~.timerManager.totalMs = 0; } ~&7082020628281&~.timerManager.refresh(); } } } ~&254501108490678590&~ { ~&233721384511543&~.~&7082507142622&~: ~&7083038346995&~.~&7082507142622&~ ~&233721384511543&~.~&6504027668&~: ~&7083038346995&~.~&6504027668&~ ~&233721384511543&~.~&214640173127&~: ~&7083038346995&~.~&214640173127&~ ~&7082729686082&~: 3 ~&214622605608&~: ~&7082453764421&~ ? ~&7082020628281&~.~&8399340017235344933&~ : ~&"503220030291830651&~ } } } } /* Time display*/ ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: _display.~&2122835675838176157&~ ~&233748328658231&~: !~&7082020628281&~.timerManager.alarmMode ~&6503165774&~ { ~&5972374&~: _display ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: ~&7082020628281&~.timerManager.~&478322454160073828&~ ~&6503823200&~.~&254543497768871654&~: 56 ~&6503823200&~.~&7083316716977&~: ~&6502673216&~.ExtraLight ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~ ~&15450610953915458578&~: ~&6503165774&~.~&14019785274593562237&~ } } /* Preset buttons (timer mode only)*/ ~&254501558939456351&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&233744706647566&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233744706647566&~.~&214641496386&~ ~&233748328658231&~: !~&7082020628281&~.timerManager.alarmMode && ~&7082020628281&~.timerManager.timerMode ~&7712155293725601&~ { ~&214634455770&~: [ { ~&197101097&~: "1 m", ~&197102508&~: 60000 }, { ~&197101097&~: "5 m", ~&197102508&~: 300000 }, { ~&197101097&~: "10 m", ~&197102508&~: 600000 }, { ~&197101097&~: "30 m", ~&197102508&~: 1800000 }, { ~&197101097&~: "1 h", ~&197102508&~: 3600000 } ] ~&7712922269353028&~: ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 50 ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&214622605608&~: "#EEEEEE" } ~&6503165774&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: ~&254539508423767444&~.~&197101097&~ ~&6503823200&~.~&254543497768871654&~: 20 ~&6503823200&~.~&6503679370&~: ~&6504329801&~ ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { ~&7082020628281&~.timerManager.~&6504295855&~(); ~&7082020628281&~.timerManager.presetMs = ~&254539508423767444&~.~&197102508&~; ~&5972376&~ (~&7082020628281&~.timerManager.addMode) { ~&7082020628281&~.timerManager.totalMs += ~&254539508423767444&~.~&197102508&~; ~&7082020628281&~.timerManager.remainMs += ~&254539508423767444&~.~&197102508&~; } ~&6503784146&~ { ~&7082020628281&~.timerManager.totalMs = ~&254539508423767444&~.~&197102508&~; ~&7082020628281&~.timerManager.remainMs = ~&254539508423767444&~.~&197102508&~; } ~&7082020628281&~.timerManager.refresh(); } } } } } /* Control buttons*/ ~&254501558939456351&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&233744706647566&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233744706647566&~.~&214641496386&~ ~&233748328658231&~: !~&7082020628281&~.timerManager.alarmMode /* Add/Set toggle (timer only)*/ ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 70 ~&233748328658231&~: ~&7082020628281&~.timerManager.timerMode ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&7082507052999&~.~&214622605608&~: "#888888" ~&7082507052999&~.~&214646099849&~: 1 ~&214622605608&~: ~&"503220030291830651&~ } ~&425121728314878811&~.~&6502767986&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&214641496386&~ ~&7083172477658&~: ~&7082020628281&~.timerManager.addMode ? ~&"15094524446772001204&~ : ~&"5724976033632521381&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { ~&7082020628281&~.timerManager.addMode = !~&7082020628281&~.timerManager.addMode; } } } /* Reset*/ ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 70 ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&7082507052999&~.~&214622605608&~: "#888888" ~&7082507052999&~.~&214646099849&~: 1 ~&214622605608&~: ~&"503220030291830651&~ } ~&425121728314878811&~.~&6502767986&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&214641496386&~ ~&7083172477658&~: ~&"6968812144639225076&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: ~&7082020628281&~.timerManager.doReset() } } /* Start / Stop*/ ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 70 ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&214622605608&~: ~&7082020628281&~.timerManager.isRunning ? "#EEEEEE" : ~&7082020628281&~.~&8399340017235344933&~ } ~&6503165774&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: ~&7082020628281&~.timerManager.isRunning ? "Stop" : "Start" ~&6503823200&~.~&254543497768871654&~: 20 ~&6503823200&~.~&6503679370&~: ~&6504329801&~ ~&214622605608&~: ~&7082020628281&~.timerManager.isRunning ? ~&7082020628281&~.~&8399340017235344933&~ : ~&7082020628281&~.~&8399340017260114793&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { ~&7082020628281&~.timerManager.isRunning ? ~&7082020628281&~.timerManager.~&6504295855&~() : ~&7082020628281&~.timerManager.go(); } } } } /* Alarm mode*/ ~&14125623155555875541&~ { ~&5972374&~: _alarmCol ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&233748328658231&~: ~&7082020628281&~.timerManager.alarmMode ~&233744706647566&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233744706647566&~.~&214641496386&~ ~&7712155293725601&~ { ~&214634455770&~: ~&7082020628281&~.timerManager.alarms ~&7712922269353028&~: ~&14125623155555875541&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 80 ~&233744706647566&~: 0 ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&8399470807760157065&~: ~&6504329801&~ ~&425121728314878811&~.~&6502767986&~ { ~&5972374&~: _radioIcon ~&233721384511543&~.~&6504027668&~: ~&7083038346995&~.~&6504027668&~ ~&233721384511543&~.~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~ ~&214646099849&~: 48 ~&7082729686082&~: 48 ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&7082925185962&~ ~&7083172477658&~: ~&254539508423767444&~.~&233726547792244&~ ? ~&"8609871882813839963&~ : ~&"7424611027213444377&~ ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: ~&7082020628281&~.timerManager.toggleAlarm(~&254539508423767444&~.~&5972374&~) } } ~&6503165774&~ { ~&233721384511543&~.~&6504027668&~: _radioIcon.~&214640173127&~ ~&233721384511543&~.~&214640173127&~: _trashIcon.~&6504027668&~ ~&233721384511543&~.~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~ ~&490371291080887915&~: 12 ~&16491662607465103678&~: 12 ~&6504315758&~: ~&254539508423767444&~.hour.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~) + ~&"180931&~ + ~&254539508423767444&~.minute.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~) ~&6503823200&~.~&254543497768871654&~: 28 ~&6503823200&~.~&7083316716977&~: ~&254539508423767444&~.~&233726547792244&~ ? ~&6502673216&~.~&6502529386&~ : ~&6502673216&~.~&7081724354802&~ ~&214622605608&~: ~&254539508423767444&~.~&233726547792244&~ ? ~&7082020628281&~.~&8399340017235344933&~ : "#888888" } ~&425121728314878811&~.~&6502767986&~ { ~&5972374&~: _trashIcon ~&233721384511543&~.~&214640173127&~: ~&7083038346995&~.~&214640173127&~ ~&233721384511543&~.~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~ ~&214646099849&~: 48 ~&7082729686082&~: 48 ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&7082925185962&~ ~&7083172477658&~: ~&"7312727925064657782&~ ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: ~&7082020628281&~.timerManager.removeAlarm(~&254539508423767444&~.~&5972374&~) } } } } } ~&6503165774&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&233748328658231&~: ~&7082020628281&~.timerManager.alarms.~&7082886407723&~ === 0 ~&6504315758&~: "No alarms set" ~&6503823200&~.~&254543497768871654&~: 20 ~&214622605608&~: "#888888" ~&8400129142283184211&~: 20 ~&1353514028756047605&~: 20 ~&15450610953915458578&~: ~&6503165774&~.~&14019785274593562237&~ } ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 54 ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~ } ~&6503165774&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: "Add alarms" ~&6503823200&~.~&254543497768871654&~: 20 ~&6503823200&~.~&6503679370&~: ~&6504329801&~ ~&214622605608&~: ~&7082020628281&~.~&8399340017260114793&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { ~&7082020628281&~.timerManager.~&6504295855&~(); ~&6504254477&~.~&2766288418351025740&~.~&214622501183&~(); ~&6504254477&~.~&2766288418351025740&~.~&6504147419&~(~&"3271012201642534810&~); } } } } } } } END TRAVERSE END AFFECT ; Alarm management inside system clock settings (inserted before the info message for more space) AFFECT /qt/qml/xofm/modules/systemclock/qml/window/SettingsInfoWindow.qml TRAVERSE [[7711468349764991]]#[[6504254477]] > [[8397788359424131273]] > [[14125623155555875541]]#[[8399784311425937276]] LOCATE AFTER [[425121728314878811.214599571833]]#[[254526274719339159]] INSERT { ~&425121728314878811&~.~&214604609771&~ { ~&6504315758&~: "Alarms" ~&6504337259&~: ~&425121728314878811&~.~&214604609771&~.~&214594832564&~ ~&7081629735527&~.~&254549367831075482&~: ~&254477762679831355&~.~&7082020628281&~.~&7713442318223278&~.~&233744706647566&~.~&233748750575870&~ } ~&7712155293725601&~ { ~&214634455770&~: ~&7082020628281&~.timerManager.alarms ~&7712922269353028&~: ~&14125623155555875541&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 56 ~&233744706647566&~: 0 ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&8399470807760157065&~: ~&6504329801&~ ~&425121728314878811&~.~&6502767986&~ { ~&5972374&~: _alarmIcon ~&233721384511543&~.~&6504027668&~: ~&7083038346995&~.~&6504027668&~ ~&233721384511543&~.~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~ ~&214646099849&~: 40 ~&7082729686082&~: 40 ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&7082925185962&~ ~&7083172477658&~: ~&"7424604169206955460&~ } ~&6503165774&~ { ~&233721384511543&~.~&6504027668&~: _alarmIcon.~&214640173127&~ ~&233721384511543&~.~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~ ~&233721384511543&~.~&1765033595104803723&~: 1 ~&490371291080887915&~: 12 ~&6504315758&~: ~&254539508423767444&~.hour.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~) + ~&"180931&~ + ~&254539508423767444&~.minute.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~) ~&6503823200&~.~&254543497768871654&~: 24 ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~ } ~&425121728314878811&~.~&6502767986&~ { ~&5972374&~: _toggleAlarmIcon ~&233721384511543&~.~&214640173127&~: _deleteAlarmIcon.~&6504027668&~ ~&233721384511543&~.~&499747351624466981&~: 12 ~&233721384511543&~.~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~ ~&214646099849&~: 48 ~&7082729686082&~: 48 ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&7082925185962&~ ~&7083172477658&~: ~&254539508423767444&~.~&233726547792244&~ ? ~&"8609871882813839963&~ : ~&"7424611027213444377&~ ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: ~&7082020628281&~.timerManager.toggleAlarm(~&254539508423767444&~.~&5972374&~) } } ~&425121728314878811&~.~&6502767986&~ { ~&5972374&~: _deleteAlarmIcon ~&233721384511543&~.~&214640173127&~: ~&7083038346995&~.~&214640173127&~ ~&233721384511543&~.~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~ ~&214646099849&~: 48 ~&7082729686082&~: 48 ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&7082925185962&~ ~&7083172477658&~: ~&"7312727925064657782&~ ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: ~&7082020628281&~.timerManager.removeAlarm(~&254539508423767444&~.~&5972374&~) } } } } } ~&425121728314878811&~.~&214599571833&~ { ~&5972374&~: _addAlarmPanel ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&214632764553&~: "Add alarm" ~&8399601734642709923&~: ~&"15094524446772001204&~ ~&7082453764199&~: ~&425121728314878811&~.~&7081261925573&~ { ~&6504337259&~: ~&254477762679831355&~.~&7081261925573&~.~&254547519794454865&~ ~&6504315758&~: ~&6504222003&~("Add") ~&254542236275632405&~: { _addAlarmPanel.~&9195823055201242195&~ = !_addAlarmPanel.~&9195823055201242195&~; } } ~&9195823055201242195&~: ~&214625660372&~ ~&8399254548634699250&~: ~&14125623155555875541&~ { ~&214646099849&~: _addAlarmPanel.~&214646099849&~ ~&233744706647566&~: ~&254477762679831355&~.~&7082020628281&~.~&7713442318223278&~.~&233744706647566&~.~&7082925185962&~ ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 280 ~&14975672296977510442&~ { ~&5972374&~: _alarmTimeSpinners ~&233721384511543&~.~&6504027668&~: ~&7083038346995&~.~&6504027668&~ ~&233721384511543&~.~&214640173127&~: _nowBtn.~&6504027668&~ ~&233721384511543&~.~&197100796&~: ~&7083038346995&~.~&197100796&~ ~&233721384511543&~.~&7082507142622&~: ~&7083038346995&~.~&7082507142622&~ ~&233721384511543&~.~&499747351624466981&~: ~&254477762679831355&~.~&7082020628281&~.~&7713442318223278&~.~&233744706647566&~.~&7082925185962&~ ~&214628545114&~: 8 ~&233736699967534&~: 0 ~&8399894257374503713&~: function(~&180977&~) { _alarmTimeSpinners.~&214628545114&~ = ~&180977&~; } ~&16346529800820831925&~: function(~&180982&~) { _alarmTimeSpinners.~&233736699967534&~ = ~&180982&~; } } ~&6502786168&~ { ~&5972374&~: _nowBtn ~&233721384511543&~.~&214640173127&~: ~&7083038346995&~.~&214640173127&~ ~&233721384511543&~.~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~ ~&214646099849&~: 80 ~&7082729686082&~: 48 ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~ } ~&6503165774&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: "Now" ~&6503823200&~.~&254543497768871654&~: 20 ~&6503823200&~.~&6503679370&~: ~&6504329801&~ ~&214622605608&~: ~&7082020628281&~.~&8399340017260114793&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { ~&197102514&~ ~&180973&~ = new ~&6502586279&~(); _alarmTimeSpinners.~&214628545114&~ = ~&180973&~.getHours(); _alarmTimeSpinners.~&233736699967534&~ = ~&180973&~.getMinutes(); } } } } ~&254501558939456351&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 44 ~&233744706647566&~: 8 ~&7712155293725601&~ { ~&214634455770&~: [0, 15, 30, 45] ~&7712922269353028&~: ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&8399470807760157065&~: ~&6504329801&~ ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&214622605608&~: "#EEEEEE" } ~&6503165774&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: ~&254539508423767444&~.~&7713616118928163&~().~&7713428190834284&~(2, ~&'180921&~) ~&6503823200&~.~&254543497768871654&~: 18 ~&6503823200&~.~&6503679370&~: ~&6504329801&~ ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { _alarmTimeSpinners.~&233736699967534&~ = ~&254539508423767444&~; } } } } } ~&254501558939456351&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 44 ~&233744706647566&~: 8 ~&7712155293725601&~ { ~&214634455770&~: [15, 30, 45] ~&7712922269353028&~: ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&8399470807760157065&~: ~&6504329801&~ ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&214622605608&~: "#EEEEEE" } ~&6503165774&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: ~&"180916&~ + ~&254539508423767444&~ ~&6503823200&~.~&254543497768871654&~: 18 ~&6503823200&~.~&6503679370&~: ~&6504329801&~ ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { ~&197102514&~ ~&180982&~ = _alarmTimeSpinners.~&233736699967534&~ + ~&254539508423767444&~; ~&5972376&~ (~&180982&~ >= 60) { ~&180982&~ -= 60; } _alarmTimeSpinners.~&233736699967534&~ = ~&180982&~; } } } } } ~&6502786168&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&17520348323745447649&~: 54 ~&254501108490678590&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&7083116119249&~: 8 ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~ } ~&6503165774&~ { ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ ~&6504315758&~: "Save alarm" ~&6503823200&~.~&254543497768871654&~: 20 ~&6503823200&~.~&6503679370&~: ~&6504329801&~ ~&214622605608&~: ~&7082020628281&~.~&8399340017260114793&~ } ~&254494525842443467&~ { ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ ~&254542236275632405&~: { ~&7082020628281&~.timerManager.addAlarm(_alarmTimeSpinners.~&214628545114&~, _alarmTimeSpinners.~&233736699967534&~); _addAlarmPanel.~&9195823055201242195&~ = ~&214625660372&~; } } } } } ~&425121728314878811&~.~&214599571833&~ { ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&214632764553&~: "Flash light" ~&478136262235079021&~: "Blink the reading light when the timer ends or an alarm triggers" ~&7082453764199&~: ~&425121728314878811&~.~&7081261925573&~ { ~&6504315758&~: ~&7082020628281&~.timerManager.blinkLightOnNotification ? ~&"5971526&~ : ~&"197060196&~ ~&254542236275632405&~: ~&7082020628281&~.timerManager.blinkLightOnNotification = !~&7082020628281&~.timerManager.blinkLightOnNotification } } } END TRAVERSE END AFFECT ; Notification bar for timer finish and alarm triggers AFFECT [[2328484894988065446]] IMPORT [[233700934949963.233693781272506]] [[180922.180921]] IMPORT [[6504469795.233736922911970.214633057601.214626274418]] [[180922.180921]] TRAVERSE [[8397788359424131273]]#[[6504254477]] > [[8397993708429497603]]#[[7713531976371484]] LOCATE AFTER ALL INSERT { ~&425121728314878811&~.~&11119534664549952261&~ { ~&233721384511543&~.~&6504027668&~: ~&7083038346995&~.~&6504027668&~ ~&233721384511543&~.~&214640173127&~: ~&7083038346995&~.~&214640173127&~ ~&233721384511543&~.~&7082507142622&~: ~&7083038346995&~.~&7082507142622&~ ~&233748328658231&~: ~&7082020628281&~.timerManager.~&16765420033347753489&~ ~&13733777459642361598&~: { ~&5972376&~ (~&233748328658231&~ && ~&7082020628281&~.timerManager.blinkLightOnNotification) { _blinkTimer.~&6504295855&~(); _blinkTimer.~&214618014052&~ = 0; _blinkTimer.~&214641748151&~(); } } ~&214604601930&~ { ~&5972374&~: _blinkTimer ~&7713147298280334&~: 1000 /* 1 sec*/ ~&7083121289162&~: ~&6504329801&~ property ~&197088788&~ ~&214618014052&~: 0 property ~&6504243117&~ _savedValue: 0 ~&495358363329399331&~: { ~&197102514&~ l = ~&7082020628281&~.timerManager._blinkLight; ~&5972376&~ (!l) { ~&6504295855&~(); ~&7083121450889&~; } ~&5972376&~ (~&214618014052&~ >= 6) { ~&6504295855&~(); l.~&214644635174&~ = _savedValue; ~&214618014052&~ = 0; ~&7083121450889&~; } ~&5972376&~ (~&214618014052&~ === 0) { _savedValue = l.~&214644635174&~; } l.~&214644635174&~ = ~&214618014052&~ % 2 === 0 ? 100 : 0; ~&214618014052&~++; } } ~&6504337259&~: ~&254477762679831355&~.~&11119534664549952261&~.~&233740920352621&~ ~&425121728314878811&~.~&11119534664549952261&~.~&233695222288046&~ { ~&6504315758&~: ~&7082020628281&~.timerManager.alarmNotificationText !== "" ? "Alarm at " + ~&7082020628281&~.timerManager.alarmNotificationText : "Time's up! (" + ~&7082020628281&~.timerManager.fmt(~&7082020628281&~.timerManager.totalMs) + ~&"180914&~ ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ ~&7081629735527&~.~&8399743405844438450&~: ~&425121728314878811&~.~&7082020628281&~.~&233740248806464&~.~&214641496386&~ ~&7081629735527&~.~&499747351624466981&~: ~&425121728314878811&~.~&7082020628281&~.~&233740248806464&~.~&214641496386&~ } /* Timer buttons - hidden during alarm*/ ~&425121728314878811&~.~&11119534664549952261&~.~&7081261925573&~ { ~&233748328658231&~: ~&7082020628281&~.timerManager.alarmNotificationText === "" ~&6504315758&~: ~&"233701679664206&~ ~&254542236275632405&~: { ~&7082020628281&~.timerManager.doReset(); ~&7082020628281&~.timerManager.go(); } } ~&425121728314878811&~.~&11119534664549952261&~.~&233683758819504&~ { ~&233748328658231&~: ~&7082020628281&~.timerManager.alarmNotificationText === "" } ~&425121728314878811&~.~&11119534664549952261&~.~&7081261925573&~ { ~&233748328658231&~: ~&7082020628281&~.timerManager.alarmNotificationText === "" ~&6504315758&~: "+1min" ~&254542236275632405&~: { ~&7082020628281&~.timerManager.totalMs += 60000; ~&7082020628281&~.timerManager.remainMs += 60000; ~&7082020628281&~.timerManager.~&16765420033347753489&~ = ~&214625660372&~; ~&7082020628281&~.timerManager.go(); } } ~&425121728314878811&~.~&11119534664549952261&~.~&233683758819504&~ { ~&233748328658231&~: ~&7082020628281&~.timerManager.alarmNotificationText === "" } ~&425121728314878811&~.~&11119534664549952261&~.~&7081261925573&~ { ~&233748328658231&~: ~&7082020628281&~.timerManager.alarmNotificationText === "" ~&6504315758&~: "+5min" ~&254542236275632405&~: { ~&7082020628281&~.timerManager.totalMs += 300000; ~&7082020628281&~.timerManager.remainMs += 300000; ~&7082020628281&~.timerManager.~&16765420033347753489&~ = ~&214625660372&~; ~&7082020628281&~.timerManager.go(); } } ~&425121728314878811&~.~&11119534664549952261&~.~&233683758819504&~ { ~&233748328658231&~: ~&7082020628281&~.timerManager.alarmNotificationText === "" } /* Universal Close / Dismiss*/ ~&425121728314878811&~.~&11119534664549952261&~.~&7081261925573&~ { ~&6504315758&~: ~&7082020628281&~.timerManager.alarmNotificationText !== "" ? ~&"233683755411397&~ : ~&"214584551711&~ ~&254542236275632405&~: { ~&5972376&~ (~&7082020628281&~.timerManager.alarmNotificationText !== "") { ~&7082020628281&~.timerManager.dismissAlarmNotification(); } ~&6503784146&~ { ~&7082020628281&~.timerManager.~&16765420033347753489&~ = ~&214625660372&~; } } } } } END TRAVERSE END AFFECT ; Capture Light reference from the QuickSettingsSlider so we can blink it AFFECT [[9830508555522680663]] TRAVERSE [[425121728314878811.7081916140908]]#[[6504254477]] LOCATE AFTER ALL INSERT { ~&254480451320573660&~.~&495334332051582499&~: ~&7082020628281&~.timerManager._blinkLight = ~&6504254477&~.~&214633057601&~; } END TRAVERSE END AFFECT