diff --git a/.gitignore b/.gitignore index 7105875..780ff38 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ hashchange .DS_Store DOC.md .opencode/skills/qmd-port/SKILL.md +NOTIFICATION.md +SLEEP.md diff --git a/3.27.3.0/quickSettingsTimer.qmd b/3.27.3.0/quickSettingsTimer.qmd new file mode 100644 index 0000000..d828f52 --- /dev/null +++ b/3.27.3.0/quickSettingsTimer.qmd @@ -0,0 +1,368 @@ +; Quick Settings Timer/Chrono +; Adds a countdown timer and stopwatch 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&~ + + function fmt(~&5972521&~) { + ~&197102514&~ ~&180970&~ = ~&6502909715&~.~&197079679&~(~&5972521&~); + ~&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&~ (timerMode) { + ~&478322454160073828&~ = fmt(remainMs > 0 ? remainMs : 0); + } ~&6503784146&~ { + ~&478322454160073828&~ = fmt(totalMs); + } + } + + function go() { + ~&5972376&~ (timerMode) { + ~&5972376&~ (remainMs <= 0) ~&7083121450889&~; + } + ~&16765420033347753489&~ = ~&214625660372&~; + isRunning = ~&6504329801&~; + _tick.~&214641748151&~(); + } + + function ~&6504295855&~() { + isRunning = ~&214625660372&~; + _tick.~&6504295855&~(); + } + + function doReset() { + ~&6504295855&~(); + ~&16765420033347753489&~ = ~&214625660372&~; + ~&5972376&~ (timerMode) { + remainMs = totalMs; + } ~&6503784146&~ { + totalMs = 0; + } + refresh(); + } + + ~&214604601930&~ { + ~&5972374&~: _tick + ~&7713147298280334&~: 100 + ~&7083121289162&~: ~&6504329801&~ + ~&495358363329399331&~: { + ~&5972376&~ (_timerManager.timerMode) { + _timerManager.remainMs -= 100; + ~&5972376&~ (_timerManager.remainMs <= 0) { + _timerManager.remainMs = 0; + _timerManager.~&6504295855&~(); + _timerManager.~&16765420033347753489&~ = ~&6504329801&~; + } + } ~&6503784146&~ { + _timerManager.totalMs += 100; + } + _timerManager.refresh(); + } + } + } + } + END TRAVERSE +END AFFECT + +AFFECT [[12542166428983872557]] + TRAVERSE [[7711468349764991]] > [[6502786168]] > [[8397788359424131273]] > [[14125623155555875541]]#[[233718721544006]] + LOCATE AFTER [[14125623155555875541]]#[[471169070310690832]] + INSERT { + ~&425121728314878811&~.~&15740235808997988493&~ { + ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ + ~&7081629735527&~.~&254549367831075482&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233744706647566&~.~&214641496386&~ + } + + ~&14125623155555875541&~ { + ~&5972374&~: _timerUI + ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ + ~&7081629735527&~.~&8399743405844438450&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233740248806464&~.~&214641496386&~ + ~&7081629735527&~.~&499747351624466981&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233740248806464&~.~&214641496386&~ + ~&7081629735527&~.~&254549367831075482&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233744706647566&~.~&214641496386&~ + ~&233744706647566&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233744706647566&~.~&7082925185962&~ + + /* Mode selector tabs */ + ~&254501558939456351&~ { + ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ + ~&233744706647566&~: 0 + + ~&7712155293725601&~ { + ~&214634455770&~: [ + { ~&197101097&~: ~&"214604601930&~, isTimer: ~&6504329801&~ }, + { ~&197101097&~: "Chrono", isTimer: ~&214625660372&~ } + ] + ~&7712922269353028&~: ~&6502786168&~ { + ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ + ~&7081629735527&~.~&17520348323745447649&~: 68 + + readonly property ~&6503679477&~ ~&7082453764421&~: ~&7082020628281&~.timerManager.timerMode === ~&254539508423767444&~.isTimer + + ~&6503165774&~ { + ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~ + ~&6504315758&~: ~&254539508423767444&~.~&197101097&~ + ~&6503823200&~.~&254543497768871654&~: 24 + ~&6503823200&~.~&6503679370&~: ~&7082453764421&~ + ~&214622605608&~: ~&7082453764421&~ ? ~&7082020628281&~.~&8399340017235344933&~ : "#888888" + } + ~&254494525842443467&~ { + ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ + ~&254542236275632405&~: { + ~&7082020628281&~.timerManager.~&6504295855&~(); + ~&7082020628281&~.timerManager.timerMode = ~&254539508423767444&~.isTimer; + ~&5972376&~ (!~&254539508423767444&~.isTimer) { + ~&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 (fixed width to avoid resizing) */ + ~&6502786168&~ { + ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&14019785274593562237&~ + ~&7081629735527&~.~&7797818826744279624&~: 300 + ~&7081629735527&~.~&17520348323745447649&~: _display.~&2122835675838176157&~ + ~&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.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&~ + + /* 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(); + } + } + } + } + } + + ~&425121728314878811&~.~&15740235808997988493&~ { + ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~ + ~&7081629735527&~.~&254549367831075482&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233744706647566&~.~&214641496386&~ + } + } + END TRAVERSE +END AFFECT + +; Notification bar when timer finishes - visible in all modes +AFFECT [[2328484894988065446]] + IMPORT [[233700934949963.233693781272506]] [[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&~ + ~&6504337259&~: ~&254477762679831355&~.~&11119534664549952261&~.~&233740920352621&~ + + ~&425121728314878811&~.~&11119534664549952261&~.~&233695222288046&~ { + ~&6504315758&~: "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&~ + } + + ~&425121728314878811&~.~&11119534664549952261&~.~&7081261925573&~ { + ~&6504315758&~: ~&"233701679664206&~ + ~&254542236275632405&~: { + ~&7082020628281&~.timerManager.doReset(); + ~&7082020628281&~.timerManager.go(); + } + } + + ~&425121728314878811&~.~&11119534664549952261&~.~&233683758819504&~ { } + + ~&425121728314878811&~.~&11119534664549952261&~.~&7081261925573&~ { + ~&6504315758&~: "+1min" + ~&254542236275632405&~: { + ~&7082020628281&~.timerManager.totalMs += 60000; + ~&7082020628281&~.timerManager.remainMs += 60000; + ~&7082020628281&~.timerManager.~&16765420033347753489&~ = ~&214625660372&~; + ~&7082020628281&~.timerManager.go(); + } + } + + ~&425121728314878811&~.~&11119534664549952261&~.~&233683758819504&~ { } + + ~&425121728314878811&~.~&11119534664549952261&~.~&7081261925573&~ { + ~&6504315758&~: "+5min" + ~&254542236275632405&~: { + ~&7082020628281&~.timerManager.totalMs += 300000; + ~&7082020628281&~.timerManager.remainMs += 300000; + ~&7082020628281&~.timerManager.~&16765420033347753489&~ = ~&214625660372&~; + ~&7082020628281&~.timerManager.go(); + } + } + + ~&425121728314878811&~.~&11119534664549952261&~.~&233683758819504&~ { } + + ~&425121728314878811&~.~&11119534664549952261&~.~&7081261925573&~ { + ~&6504315758&~: ~&"214584551711&~ + ~&254542236275632405&~: { + ~&7082020628281&~.timerManager.~&16765420033347753489&~ = ~&214625660372&~; + } + } + } + } + END TRAVERSE +END AFFECT diff --git a/README.md b/README.md index 3e9afc1..5f4e5cf 100644 --- a/README.md +++ b/README.md @@ -34,12 +34,21 @@ Beta releases are not tested nor supported. +#### `quickSettingsTimer.qmd` + +- Adds a countdown timer and stopwatch to the Quick Settings panel, under the light slider. +- Switch between Timer (presets: 1min, 5min, 10min, 30min, 1h) and Chrono (start/stop) modes. +- Preset buttons respect the add/set mode toggle : increments, replaces. +- Notification bar shows "Time's up! (duration)" when the timer finishes. + + + + #### `clock.qmd` [![vellum](https://img.shields.io/badge/vellum-sidebar--clock-purple)](https://vellum.delivery/#/package/sidebar-clock/) - Adds a live clock to the library sidebar; tap the entry to toggle seconds display. - - + Note: You have to set the right timezone on the tablet (you can use [reManager](https://github.com/rmitchellscott/reManager) to set it) #### `convertToText_remover.qmd` diff --git a/images/batteryPercentage.png b/images/batteryPercentage.png index ab20c77..0db7944 100644 Binary files a/images/batteryPercentage.png and b/images/batteryPercentage.png differ diff --git a/images/plus.svg b/images/plus.svg new file mode 100644 index 0000000..7ad13d1 --- /dev/null +++ b/images/plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/plus_circle.svg b/images/plus_circle.svg new file mode 100644 index 0000000..acbbabb --- /dev/null +++ b/images/plus_circle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/quickSettingsTimer_1.png b/images/quickSettingsTimer_1.png new file mode 100644 index 0000000..7eca416 Binary files /dev/null and b/images/quickSettingsTimer_1.png differ diff --git a/images/quickSettingsTimer_2.png b/images/quickSettingsTimer_2.png new file mode 100644 index 0000000..b910d6e Binary files /dev/null and b/images/quickSettingsTimer_2.png differ diff --git a/images/quickSettingsTimer_3.png b/images/quickSettingsTimer_3.png new file mode 100644 index 0000000..ae2188d Binary files /dev/null and b/images/quickSettingsTimer_3.png differ