feat: add custom sleep timer picker (#2206)
## Summary * **What is the goal of this PR?** Mainly fixes #2196, but also allows users to set a sleep time of 1~30 min or to never sleep. * **What changes are included?** 1. Revert changes from #1948 and #2137 (Sorry @Uri-Tauber) 2. Cherrypick changes from https://github.com/uxjulia/CrossInk/commit/0cb91c3dd1c63f0559d4392fadc4a8340af5bdde and https://github.com/uxjulia/CrossInk/commit/4e6bd634b6ede51ff1a7107ba3e8efcd152bc6ee for a timeout interval picker UI, the custom sleep time feature, and migrate the existing setting in v1.3.0, `sleepTimeout`, to `sleepTimeoutMinutes` (Thanks! @uxjulia) 3. Add a "Never" at the far right of the timeout interval picker --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**PARTIALLY**_ --------- Co-authored-by: Julia <julia@uxj.io>
This commit is contained in:
@@ -143,7 +143,6 @@ STR_ALIGN_LEFT: "Па левым краі"
|
|||||||
STR_CENTER: "Па цэнтры"
|
STR_CENTER: "Па цэнтры"
|
||||||
STR_ALIGN_RIGHT: "Па правым краі"
|
STR_ALIGN_RIGHT: "Па правым краі"
|
||||||
STR_MIN_1: "1 хв"
|
STR_MIN_1: "1 хв"
|
||||||
STR_MIN_3: "3 хв"
|
|
||||||
STR_MIN_5: "5 хв"
|
STR_MIN_5: "5 хв"
|
||||||
STR_MIN_10: "10 хв"
|
STR_MIN_10: "10 хв"
|
||||||
STR_MIN_15: "15 хв"
|
STR_MIN_15: "15 хв"
|
||||||
@@ -296,6 +295,9 @@ STR_DISPLAY_QR: "Паказаць старонку як QR"
|
|||||||
STR_FOOTNOTES: "Зноскі"
|
STR_FOOTNOTES: "Зноскі"
|
||||||
STR_NO_FOOTNOTES: "На гэтай старонцы няма зносак"
|
STR_NO_FOOTNOTES: "На гэтай старонцы няма зносак"
|
||||||
STR_LINK: "[спасылка]"
|
STR_LINK: "[спасылка]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u хв"
|
||||||
|
STR_SLEEP_NEVER: "Ніколі"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Улева/Управа: 1 хв Уверх/Уніз: 5 хв"
|
||||||
STR_AUTO_TURN_ENABLED: "Аўтаперагортванне: "
|
STR_AUTO_TURN_ENABLED: "Аўтаперагортванне: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Аўтаперагортванне (старонак за хвіліну)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Аўтаперагортванне (старонак за хвіліну)"
|
||||||
STR_TILT_PAGE_TURN: "Перагортванне нахілам"
|
STR_TILT_PAGE_TURN: "Перагортванне нахілам"
|
||||||
|
|||||||
@@ -154,7 +154,6 @@ STR_ALIGN_LEFT: "Esquerra"
|
|||||||
STR_CENTER: "Centre"
|
STR_CENTER: "Centre"
|
||||||
STR_ALIGN_RIGHT: "Dreta"
|
STR_ALIGN_RIGHT: "Dreta"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -304,6 +303,9 @@ STR_OPDS_SERVER_URL: "URL del servidor OPDS"
|
|||||||
STR_FOOTNOTES: "Notes al peu"
|
STR_FOOTNOTES: "Notes al peu"
|
||||||
STR_NO_FOOTNOTES: "No hi ha notes al peu en aquesta pàgina"
|
STR_NO_FOOTNOTES: "No hi ha notes al peu en aquesta pàgina"
|
||||||
STR_LINK: "[enllaç]"
|
STR_LINK: "[enllaç]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Mai"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Esquerra/Dreta: 1 min Amunt/Avall: 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Fes una captura de pantalla"
|
STR_SCREENSHOT_BUTTON: "Fes una captura de pantalla"
|
||||||
STR_AUTO_TURN_ENABLED: "Passar automàtic activat: "
|
STR_AUTO_TURN_ENABLED: "Passar automàtic activat: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Passar automàtic (pàgines per minut)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Passar automàtic (pàgines per minut)"
|
||||||
|
|||||||
@@ -148,7 +148,6 @@ STR_ALIGN_LEFT: "Vlevo"
|
|||||||
STR_CENTER: "Na střed"
|
STR_CENTER: "Na střed"
|
||||||
STR_ALIGN_RIGHT: "Vpravo"
|
STR_ALIGN_RIGHT: "Vpravo"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -273,4 +272,7 @@ STR_EMBEDDED_STYLE: "Vložený styl"
|
|||||||
STR_FOCUS_READING: "Soustředěné čtení"
|
STR_FOCUS_READING: "Soustředěné čtení"
|
||||||
STR_OPDS_SERVER_URL: "URL serveru OPDS"
|
STR_OPDS_SERVER_URL: "URL serveru OPDS"
|
||||||
STR_SCREENSHOT_BUTTON: "Udělat snímek obrazovky"
|
STR_SCREENSHOT_BUTTON: "Udělat snímek obrazovky"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Nikdy"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Vlevo/Vpravo: 1 min Nahoru/Dolů: 5 min"
|
||||||
STR_TILT_PAGE_TURN: "Otáčení stránek nakloněním"
|
STR_TILT_PAGE_TURN: "Otáčení stránek nakloněním"
|
||||||
|
|||||||
@@ -153,7 +153,6 @@ STR_ALIGN_LEFT: "Venstre"
|
|||||||
STR_CENTER: "Centreret"
|
STR_CENTER: "Centreret"
|
||||||
STR_ALIGN_RIGHT: "Højre"
|
STR_ALIGN_RIGHT: "Højre"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -298,6 +297,9 @@ STR_OPDS_SERVER_URL: "OPDS Server URL"
|
|||||||
STR_FOOTNOTES: "Fodnoter"
|
STR_FOOTNOTES: "Fodnoter"
|
||||||
STR_NO_FOOTNOTES: "Ingen fodnoter på denne side"
|
STR_NO_FOOTNOTES: "Ingen fodnoter på denne side"
|
||||||
STR_LINK: "[link]"
|
STR_LINK: "[link]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Aldrig"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Venstre/Højre: 1 min Op/Ned: 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Tag skærmbillede"
|
STR_SCREENSHOT_BUTTON: "Tag skærmbillede"
|
||||||
STR_AUTO_TURN_ENABLED: "Automatisk sidevendning aktiveret: "
|
STR_AUTO_TURN_ENABLED: "Automatisk sidevendning aktiveret: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Automatisk vending (sider per minut)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Automatisk vending (sider per minut)"
|
||||||
|
|||||||
@@ -153,7 +153,6 @@ STR_ALIGN_LEFT: "Links"
|
|||||||
STR_CENTER: "Centreren"
|
STR_CENTER: "Centreren"
|
||||||
STR_ALIGN_RIGHT: "Rechts"
|
STR_ALIGN_RIGHT: "Rechts"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -298,6 +297,9 @@ STR_OPDS_SERVER_URL: "OPDS-server URL"
|
|||||||
STR_FOOTNOTES: "Voetnoten"
|
STR_FOOTNOTES: "Voetnoten"
|
||||||
STR_NO_FOOTNOTES: "Geen voetnoten op deze pagina"
|
STR_NO_FOOTNOTES: "Geen voetnoten op deze pagina"
|
||||||
STR_LINK: "[link]"
|
STR_LINK: "[link]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Nooit"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Links/Rechts: 1 min Omhoog/Omlaag: 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Screenshot maken"
|
STR_SCREENSHOT_BUTTON: "Screenshot maken"
|
||||||
STR_AUTO_TURN_ENABLED: "Automatisch omslaan ingeschakeld: "
|
STR_AUTO_TURN_ENABLED: "Automatisch omslaan ingeschakeld: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Autom. omslaan (pagina's per minuut)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Autom. omslaan (pagina's per minuut)"
|
||||||
|
|||||||
@@ -156,7 +156,6 @@ STR_ALIGN_LEFT: "Left"
|
|||||||
STR_CENTER: "Center"
|
STR_CENTER: "Center"
|
||||||
STR_ALIGN_RIGHT: "Right"
|
STR_ALIGN_RIGHT: "Right"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -330,6 +329,9 @@ STR_FOOTNOTES: "Footnotes"
|
|||||||
STR_NO_FOOTNOTES: "No footnotes on this page"
|
STR_NO_FOOTNOTES: "No footnotes on this page"
|
||||||
STR_LINK: "[link]"
|
STR_LINK: "[link]"
|
||||||
STR_SCREENSHOT_BUTTON: "Take screenshot"
|
STR_SCREENSHOT_BUTTON: "Take screenshot"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Never"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Left/Right: 1 min Up/Down: 5 min"
|
||||||
STR_ADD_SERVER: "Add Server"
|
STR_ADD_SERVER: "Add Server"
|
||||||
STR_SERVER_NAME: "Server Name"
|
STR_SERVER_NAME: "Server Name"
|
||||||
STR_NO_SERVERS: "No OPDS servers configured"
|
STR_NO_SERVERS: "No OPDS servers configured"
|
||||||
|
|||||||
@@ -148,7 +148,6 @@ STR_ALIGN_LEFT: "Vasen"
|
|||||||
STR_CENTER: "Keskitetty"
|
STR_CENTER: "Keskitetty"
|
||||||
STR_ALIGN_RIGHT: "Oikea"
|
STR_ALIGN_RIGHT: "Oikea"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -271,4 +270,7 @@ STR_EMBEDDED_STYLE: "Upotettu tyyli"
|
|||||||
STR_FOCUS_READING: "Keskittynyt lukeminen"
|
STR_FOCUS_READING: "Keskittynyt lukeminen"
|
||||||
STR_OPDS_SERVER_URL: "OPDS-palvelimen osoite"
|
STR_OPDS_SERVER_URL: "OPDS-palvelimen osoite"
|
||||||
STR_SCREENSHOT_BUTTON: "Ota kuvakaappaus"
|
STR_SCREENSHOT_BUTTON: "Ota kuvakaappaus"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Ei koskaan"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Vasen/Oikea: 1 min Ylös/Alas: 5 min"
|
||||||
STR_TILT_PAGE_TURN: "Sivunkääntö kallistamalla"
|
STR_TILT_PAGE_TURN: "Sivunkääntö kallistamalla"
|
||||||
|
|||||||
@@ -153,7 +153,6 @@ STR_ALIGN_LEFT: "Gauche"
|
|||||||
STR_CENTER: "Centré"
|
STR_CENTER: "Centré"
|
||||||
STR_ALIGN_RIGHT: "Droite"
|
STR_ALIGN_RIGHT: "Droite"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -299,6 +298,9 @@ STR_OPDS_SERVER_URL: "URL serveur OPDS"
|
|||||||
STR_FOOTNOTES: "Notes de bas de page"
|
STR_FOOTNOTES: "Notes de bas de page"
|
||||||
STR_NO_FOOTNOTES: "Aucune note sur cette page"
|
STR_NO_FOOTNOTES: "Aucune note sur cette page"
|
||||||
STR_LINK: "[lien]"
|
STR_LINK: "[lien]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Jamais"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Gauche/Droite : 1 min Haut/Bas : 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Capture d'écran"
|
STR_SCREENSHOT_BUTTON: "Capture d'écran"
|
||||||
STR_AUTO_TURN_ENABLED: "Tourne-page auto : "
|
STR_AUTO_TURN_ENABLED: "Tourne-page auto : "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Tourne-page auto (pages par minute)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Tourne-page auto (pages par minute)"
|
||||||
|
|||||||
@@ -151,7 +151,6 @@ STR_ALIGN_LEFT: "Links"
|
|||||||
STR_CENTER: "Zentriert"
|
STR_CENTER: "Zentriert"
|
||||||
STR_ALIGN_RIGHT: "Rechts"
|
STR_ALIGN_RIGHT: "Rechts"
|
||||||
STR_MIN_1: "1 Min"
|
STR_MIN_1: "1 Min"
|
||||||
STR_MIN_3: "3 Min"
|
|
||||||
STR_MIN_5: "5 Min"
|
STR_MIN_5: "5 Min"
|
||||||
STR_MIN_10: "10 Min"
|
STR_MIN_10: "10 Min"
|
||||||
STR_MIN_15: "15 Min"
|
STR_MIN_15: "15 Min"
|
||||||
@@ -299,6 +298,9 @@ STR_SCREENSHOT_BUTTON: "Screenshot aufnehmen"
|
|||||||
STR_FOOTNOTES: "Fußnoten"
|
STR_FOOTNOTES: "Fußnoten"
|
||||||
STR_NO_FOOTNOTES: "Keine Fußnoten auf dieser Seite"
|
STR_NO_FOOTNOTES: "Keine Fußnoten auf dieser Seite"
|
||||||
STR_LINK: "[Link]"
|
STR_LINK: "[Link]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u Min."
|
||||||
|
STR_SLEEP_NEVER: "Nie"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Links/Rechts: 1 Min. Hoch/Runter: 5 Min."
|
||||||
STR_AUTO_TURN_ENABLED: "Auto-Umblättern aktiv: "
|
STR_AUTO_TURN_ENABLED: "Auto-Umblättern aktiv: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Auto-Umblättern (Seiten/Min.)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Auto-Umblättern (Seiten/Min.)"
|
||||||
STR_IMAGES: "Bilder"
|
STR_IMAGES: "Bilder"
|
||||||
|
|||||||
@@ -150,7 +150,6 @@ STR_ALIGN_LEFT: "Bal"
|
|||||||
STR_CENTER: "Közép"
|
STR_CENTER: "Közép"
|
||||||
STR_ALIGN_RIGHT: "Jobb"
|
STR_ALIGN_RIGHT: "Jobb"
|
||||||
STR_MIN_1: "1 perc"
|
STR_MIN_1: "1 perc"
|
||||||
STR_MIN_3: "3 perc"
|
|
||||||
STR_MIN_5: "5 perc"
|
STR_MIN_5: "5 perc"
|
||||||
STR_MIN_10: "10 perc"
|
STR_MIN_10: "10 perc"
|
||||||
STR_MIN_15: "15 perc"
|
STR_MIN_15: "15 perc"
|
||||||
@@ -295,6 +294,9 @@ STR_OPDS_SERVER_URL: "OPDS szerver URL"
|
|||||||
STR_FOOTNOTES: "Lábjegyzetek"
|
STR_FOOTNOTES: "Lábjegyzetek"
|
||||||
STR_NO_FOOTNOTES: "Nincsenek lábjegyzetek ezen az oldalon"
|
STR_NO_FOOTNOTES: "Nincsenek lábjegyzetek ezen az oldalon"
|
||||||
STR_LINK: "[link]"
|
STR_LINK: "[link]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u perc"
|
||||||
|
STR_SLEEP_NEVER: "Soha"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Bal/Jobb: 1 perc Fel/Le: 5 perc"
|
||||||
STR_SCREENSHOT_BUTTON: "Képernyőkép készítése"
|
STR_SCREENSHOT_BUTTON: "Képernyőkép készítése"
|
||||||
STR_AUTO_TURN_ENABLED: "Automatikus lapozás bekapcsolva: "
|
STR_AUTO_TURN_ENABLED: "Automatikus lapozás bekapcsolva: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Automatikus lapozás (oldal/perc)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Automatikus lapozás (oldal/perc)"
|
||||||
|
|||||||
@@ -154,7 +154,6 @@ STR_ALIGN_LEFT: "Sinistra"
|
|||||||
STR_CENTER: "Centrato"
|
STR_CENTER: "Centrato"
|
||||||
STR_ALIGN_RIGHT: "Destra"
|
STR_ALIGN_RIGHT: "Destra"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -308,6 +307,9 @@ STR_SET_SLEEP_COVER: "Imposta copertina"
|
|||||||
STR_FOOTNOTES: "Note a piè pagina"
|
STR_FOOTNOTES: "Note a piè pagina"
|
||||||
STR_NO_FOOTNOTES: "Nessuna nota in questa pagina"
|
STR_NO_FOOTNOTES: "Nessuna nota in questa pagina"
|
||||||
STR_LINK: "[link]"
|
STR_LINK: "[link]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Mai"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Sinistra/Destra: 1 min Su/Giù: 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Screenshot"
|
STR_SCREENSHOT_BUTTON: "Screenshot"
|
||||||
STR_ADD_SERVER: "Aggiungi server"
|
STR_ADD_SERVER: "Aggiungi server"
|
||||||
STR_SERVER_NAME: "Nome server"
|
STR_SERVER_NAME: "Nome server"
|
||||||
|
|||||||
@@ -144,7 +144,6 @@ STR_ALIGN_LEFT: "Солға"
|
|||||||
STR_CENTER: "Ортаға"
|
STR_CENTER: "Ортаға"
|
||||||
STR_ALIGN_RIGHT: "Оңға"
|
STR_ALIGN_RIGHT: "Оңға"
|
||||||
STR_MIN_1: "1 мин"
|
STR_MIN_1: "1 мин"
|
||||||
STR_MIN_3: "3 мин"
|
|
||||||
STR_MIN_5: "5 мин"
|
STR_MIN_5: "5 мин"
|
||||||
STR_MIN_10: "10 мин"
|
STR_MIN_10: "10 мин"
|
||||||
STR_MIN_15: "15 мин"
|
STR_MIN_15: "15 мин"
|
||||||
@@ -294,6 +293,9 @@ STR_DISPLAY_QR: "Бетті QR ретінде көрсету"
|
|||||||
STR_FOOTNOTES: "Түсіндірме жазбалар"
|
STR_FOOTNOTES: "Түсіндірме жазбалар"
|
||||||
STR_NO_FOOTNOTES: "Бұл бетте түсіндірме жазбалар жоқ"
|
STR_NO_FOOTNOTES: "Бұл бетте түсіндірме жазбалар жоқ"
|
||||||
STR_LINK: "[сілтеме]"
|
STR_LINK: "[сілтеме]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u мин"
|
||||||
|
STR_SLEEP_NEVER: "Ешқашан"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Сол/Оң: 1 мин Жоғары/Төмен: 5 мин"
|
||||||
STR_SCREENSHOT_BUTTON: "Скриншот түсіру"
|
STR_SCREENSHOT_BUTTON: "Скриншот түсіру"
|
||||||
STR_AUTO_TURN_ENABLED: "Автоматты бет аудару қосулы: "
|
STR_AUTO_TURN_ENABLED: "Автоматты бет аудару қосулы: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Автоматты бет аудару (минутына бет саны)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Автоматты бет аудару (минутына бет саны)"
|
||||||
|
|||||||
@@ -150,7 +150,6 @@ STR_ALIGN_LEFT: "Kairė"
|
|||||||
STR_CENTER: "Centras"
|
STR_CENTER: "Centras"
|
||||||
STR_ALIGN_RIGHT: "Dešinė"
|
STR_ALIGN_RIGHT: "Dešinė"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -295,6 +294,9 @@ STR_OPDS_SERVER_URL: "OPDS URL"
|
|||||||
STR_FOOTNOTES: "Išnašos"
|
STR_FOOTNOTES: "Išnašos"
|
||||||
STR_NO_FOOTNOTES: "Šiame psl. išnašų nėra"
|
STR_NO_FOOTNOTES: "Šiame psl. išnašų nėra"
|
||||||
STR_LINK: "[nuoroda]"
|
STR_LINK: "[nuoroda]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min."
|
||||||
|
STR_SLEEP_NEVER: "Niekada"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Kairė/Dešinė: 1 min. Viršus/Apačia: 5 min."
|
||||||
STR_SCREENSHOT_BUTTON: "Ekrano nuotrauka"
|
STR_SCREENSHOT_BUTTON: "Ekrano nuotrauka"
|
||||||
STR_AUTO_TURN_ENABLED: "Auto-vertimas: "
|
STR_AUTO_TURN_ENABLED: "Auto-vertimas: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Auto-vertimas (psl/min)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Auto-vertimas (psl/min)"
|
||||||
|
|||||||
@@ -154,7 +154,6 @@ STR_ALIGN_LEFT: "Lewo"
|
|||||||
STR_CENTER: "Środek"
|
STR_CENTER: "Środek"
|
||||||
STR_ALIGN_RIGHT: "Prawo"
|
STR_ALIGN_RIGHT: "Prawo"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -308,6 +307,9 @@ STR_SET_SLEEP_COVER: "Ustaw okładkę"
|
|||||||
STR_FOOTNOTES: "Przypisy"
|
STR_FOOTNOTES: "Przypisy"
|
||||||
STR_NO_FOOTNOTES: "Brak przypisów na tej stronie"
|
STR_NO_FOOTNOTES: "Brak przypisów na tej stronie"
|
||||||
STR_LINK: "[link]"
|
STR_LINK: "[link]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Nigdy"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Lewo/Prawo: 1 min Góra/Dół: 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Zrób zrzut ekranu"
|
STR_SCREENSHOT_BUTTON: "Zrób zrzut ekranu"
|
||||||
STR_ADD_SERVER: "Dodaj serwer"
|
STR_ADD_SERVER: "Dodaj serwer"
|
||||||
STR_SERVER_NAME: "Nazwa serwera"
|
STR_SERVER_NAME: "Nazwa serwera"
|
||||||
|
|||||||
@@ -148,7 +148,6 @@ STR_ALIGN_LEFT: "Esquerda"
|
|||||||
STR_CENTER: "Centralizar"
|
STR_CENTER: "Centralizar"
|
||||||
STR_ALIGN_RIGHT: "Direita"
|
STR_ALIGN_RIGHT: "Direita"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -273,4 +272,7 @@ STR_EMBEDDED_STYLE: "Estilo embutido"
|
|||||||
STR_FOCUS_READING: "Leitura focada"
|
STR_FOCUS_READING: "Leitura focada"
|
||||||
STR_OPDS_SERVER_URL: "URL do servidor OPDS"
|
STR_OPDS_SERVER_URL: "URL do servidor OPDS"
|
||||||
STR_SCREENSHOT_BUTTON: "Capturar tela"
|
STR_SCREENSHOT_BUTTON: "Capturar tela"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Nunca"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Esq/Dir: 1 min Cima/Baixo: 5 min"
|
||||||
STR_TILT_PAGE_TURN: "Virar página por inclinação"
|
STR_TILT_PAGE_TURN: "Virar página por inclinação"
|
||||||
|
|||||||
@@ -153,7 +153,6 @@ STR_ALIGN_LEFT: "Stânga"
|
|||||||
STR_CENTER: "Centru"
|
STR_CENTER: "Centru"
|
||||||
STR_ALIGN_RIGHT: "Dreapta"
|
STR_ALIGN_RIGHT: "Dreapta"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -298,6 +297,9 @@ STR_OPDS_SERVER_URL: "URL server OPDS"
|
|||||||
STR_FOOTNOTES: "Note de subsol"
|
STR_FOOTNOTES: "Note de subsol"
|
||||||
STR_NO_FOOTNOTES: "Nicio notă de subsol"
|
STR_NO_FOOTNOTES: "Nicio notă de subsol"
|
||||||
STR_LINK: "[link]"
|
STR_LINK: "[link]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Niciodată"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Stânga/Dreapta: 1 min Sus/Jos: 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Captură ecran"
|
STR_SCREENSHOT_BUTTON: "Captură ecran"
|
||||||
STR_AUTO_TURN_ENABLED: "Răsfoire automată: "
|
STR_AUTO_TURN_ENABLED: "Răsfoire automată: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Pagini pe minut"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Pagini pe minut"
|
||||||
|
|||||||
@@ -155,7 +155,6 @@ STR_ALIGN_LEFT: "По левому краю"
|
|||||||
STR_CENTER: "По центру"
|
STR_CENTER: "По центру"
|
||||||
STR_ALIGN_RIGHT: "По правому краю"
|
STR_ALIGN_RIGHT: "По правому краю"
|
||||||
STR_MIN_1: "1 мин"
|
STR_MIN_1: "1 мин"
|
||||||
STR_MIN_3: "3 мин"
|
|
||||||
STR_MIN_5: "5 мин"
|
STR_MIN_5: "5 мин"
|
||||||
STR_MIN_10: "10 мин"
|
STR_MIN_10: "10 мин"
|
||||||
STR_MIN_15: "15 мин"
|
STR_MIN_15: "15 мин"
|
||||||
@@ -314,6 +313,9 @@ STR_SET_SLEEP_COVER: "Обложкой"
|
|||||||
STR_FOOTNOTES: "Примечания"
|
STR_FOOTNOTES: "Примечания"
|
||||||
STR_NO_FOOTNOTES: "На данной странице нет примечаний"
|
STR_NO_FOOTNOTES: "На данной странице нет примечаний"
|
||||||
STR_LINK: "[ссылка]"
|
STR_LINK: "[ссылка]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u мин"
|
||||||
|
STR_SLEEP_NEVER: "Никогда"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Влево/Вправо: 1 мин Вверх/Вниз: 5 мин"
|
||||||
STR_SCREENSHOT_BUTTON: "Сделать снимок экрана"
|
STR_SCREENSHOT_BUTTON: "Сделать снимок экрана"
|
||||||
STR_ADD_SERVER: "Добавить сервер"
|
STR_ADD_SERVER: "Добавить сервер"
|
||||||
STR_SERVER_NAME: "Имя сервера"
|
STR_SERVER_NAME: "Имя сервера"
|
||||||
|
|||||||
@@ -150,7 +150,6 @@ STR_ALIGN_LEFT: "Levo"
|
|||||||
STR_CENTER: "Sredinsko"
|
STR_CENTER: "Sredinsko"
|
||||||
STR_ALIGN_RIGHT: "Desno"
|
STR_ALIGN_RIGHT: "Desno"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -295,6 +294,9 @@ STR_OPDS_SERVER_URL: "URL OPDS strežnika"
|
|||||||
STR_FOOTNOTES: "Opombe"
|
STR_FOOTNOTES: "Opombe"
|
||||||
STR_NO_FOOTNOTES: "Na tej strani ni opomb"
|
STR_NO_FOOTNOTES: "Na tej strani ni opomb"
|
||||||
STR_LINK: "[povezava]"
|
STR_LINK: "[povezava]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Nikoli"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Levo/desno: 1 min Gor/dol: 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Naredi posnetek zaslona"
|
STR_SCREENSHOT_BUTTON: "Naredi posnetek zaslona"
|
||||||
STR_AUTO_TURN_ENABLED: "Samodejno obračanje: "
|
STR_AUTO_TURN_ENABLED: "Samodejno obračanje: "
|
||||||
STR_AUTO_TURN_PAGES_PER_MIN: "Samodejno obračanje (strani na minuto)"
|
STR_AUTO_TURN_PAGES_PER_MIN: "Samodejno obračanje (strani na minuto)"
|
||||||
|
|||||||
@@ -155,7 +155,6 @@ STR_ALIGN_LEFT: "Izquierda"
|
|||||||
STR_CENTER: "Centro"
|
STR_CENTER: "Centro"
|
||||||
STR_ALIGN_RIGHT: "Derecha"
|
STR_ALIGN_RIGHT: "Derecha"
|
||||||
STR_MIN_1: "1 min."
|
STR_MIN_1: "1 min."
|
||||||
STR_MIN_3: "3 min."
|
|
||||||
STR_MIN_5: "5 min."
|
STR_MIN_5: "5 min."
|
||||||
STR_MIN_10: "10 min."
|
STR_MIN_10: "10 min."
|
||||||
STR_MIN_15: "15 min."
|
STR_MIN_15: "15 min."
|
||||||
@@ -329,6 +328,9 @@ STR_SET_SLEEP_COVER: "Pant. sus."
|
|||||||
STR_FOOTNOTES: "Pie de página"
|
STR_FOOTNOTES: "Pie de página"
|
||||||
STR_NO_FOOTNOTES: "No hay notas al pie de esta página"
|
STR_NO_FOOTNOTES: "No hay notas al pie de esta página"
|
||||||
STR_LINK: "[enlace]"
|
STR_LINK: "[enlace]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min."
|
||||||
|
STR_SLEEP_NEVER: "Nunca"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Izq./Dcha.: 1 min. Subir/Bajar: 5 min."
|
||||||
STR_SCREENSHOT_BUTTON: "Tomar captura de pantalla"
|
STR_SCREENSHOT_BUTTON: "Tomar captura de pantalla"
|
||||||
STR_ADD_SERVER: "Agregar servidor"
|
STR_ADD_SERVER: "Agregar servidor"
|
||||||
STR_SERVER_NAME: "Nombre de servidor"
|
STR_SERVER_NAME: "Nombre de servidor"
|
||||||
|
|||||||
@@ -156,7 +156,6 @@ STR_ALIGN_LEFT: "Vänster"
|
|||||||
STR_CENTER: "Mitten"
|
STR_CENTER: "Mitten"
|
||||||
STR_ALIGN_RIGHT: "Höger"
|
STR_ALIGN_RIGHT: "Höger"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
@@ -330,6 +329,9 @@ STR_SET_SLEEP_COVER: "Ställ in omslag"
|
|||||||
STR_FOOTNOTES: "Fotnoter"
|
STR_FOOTNOTES: "Fotnoter"
|
||||||
STR_NO_FOOTNOTES: "Inga fotnoter på den här sidan"
|
STR_NO_FOOTNOTES: "Inga fotnoter på den här sidan"
|
||||||
STR_LINK: "[länk]"
|
STR_LINK: "[länk]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Aldrig"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Vänster/Höger: 1 min Upp/Ner: 5 min"
|
||||||
STR_SCREENSHOT_BUTTON: "Ta en skärmdump"
|
STR_SCREENSHOT_BUTTON: "Ta en skärmdump"
|
||||||
STR_ADD_SERVER: "Lägg till server"
|
STR_ADD_SERVER: "Lägg till server"
|
||||||
STR_SERVER_NAME: "Servernamn"
|
STR_SERVER_NAME: "Servernamn"
|
||||||
|
|||||||
@@ -148,7 +148,6 @@ STR_ALIGN_LEFT: "Sola Yasla"
|
|||||||
STR_CENTER: "Ortala"
|
STR_CENTER: "Ortala"
|
||||||
STR_ALIGN_RIGHT: "Sağa Yasla"
|
STR_ALIGN_RIGHT: "Sağa Yasla"
|
||||||
STR_MIN_1: "1 dak"
|
STR_MIN_1: "1 dak"
|
||||||
STR_MIN_3: "3 dak"
|
|
||||||
STR_MIN_5: "5 dak"
|
STR_MIN_5: "5 dak"
|
||||||
STR_MIN_10: "10 dak"
|
STR_MIN_10: "10 dak"
|
||||||
STR_MIN_15: "15 dak"
|
STR_MIN_15: "15 dak"
|
||||||
@@ -289,6 +288,9 @@ STR_IMAGES_DISPLAY: "Göster"
|
|||||||
STR_IMAGES_PLACEHOLDER: "Yer Tutucu"
|
STR_IMAGES_PLACEHOLDER: "Yer Tutucu"
|
||||||
STR_IMAGES_SUPPRESS: "Bastır"
|
STR_IMAGES_SUPPRESS: "Bastır"
|
||||||
STR_LINK: "[bağlantı]"
|
STR_LINK: "[bağlantı]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u dak"
|
||||||
|
STR_SLEEP_NEVER: "Asla"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Sol/Sağ: 1 dak Yukarı/Aşağı: 5 dak"
|
||||||
STR_NO_FILES_FOUND: "Dosya bulunamadı"
|
STR_NO_FILES_FOUND: "Dosya bulunamadı"
|
||||||
STR_NO_FOOTNOTES: "Bu sayfada dipnot yok"
|
STR_NO_FOOTNOTES: "Bu sayfada dipnot yok"
|
||||||
STR_PREVIEW: "Önizleme"
|
STR_PREVIEW: "Önizleme"
|
||||||
|
|||||||
@@ -154,7 +154,6 @@ STR_ALIGN_LEFT: "За лівим краєм"
|
|||||||
STR_CENTER: "По центру"
|
STR_CENTER: "По центру"
|
||||||
STR_ALIGN_RIGHT: "За правим краєм"
|
STR_ALIGN_RIGHT: "За правим краєм"
|
||||||
STR_MIN_1: "1 хв"
|
STR_MIN_1: "1 хв"
|
||||||
STR_MIN_3: "3 хв"
|
|
||||||
STR_MIN_5: "5 хв"
|
STR_MIN_5: "5 хв"
|
||||||
STR_MIN_10: "10 хв"
|
STR_MIN_10: "10 хв"
|
||||||
STR_MIN_15: "15 хв"
|
STR_MIN_15: "15 хв"
|
||||||
@@ -308,6 +307,9 @@ STR_SET_SLEEP_COVER: "Як обкл."
|
|||||||
STR_FOOTNOTES: "Примітки"
|
STR_FOOTNOTES: "Примітки"
|
||||||
STR_NO_FOOTNOTES: "На цій сторінці немає приміток"
|
STR_NO_FOOTNOTES: "На цій сторінці немає приміток"
|
||||||
STR_LINK: "[посилання]"
|
STR_LINK: "[посилання]"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u хв"
|
||||||
|
STR_SLEEP_NEVER: "Ніколи"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Вліво/Вправо: 1 хв Вгору/Вниз: 5 хв"
|
||||||
STR_SCREENSHOT_BUTTON: "Знімок екрана"
|
STR_SCREENSHOT_BUTTON: "Знімок екрана"
|
||||||
STR_ADD_SERVER: "Додати сервер"
|
STR_ADD_SERVER: "Додати сервер"
|
||||||
STR_SERVER_NAME: "Назва сервера"
|
STR_SERVER_NAME: "Назва сервера"
|
||||||
|
|||||||
@@ -85,6 +85,9 @@ STR_SCREEN_MARGIN: "Marge de pantalla del lector"
|
|||||||
STR_PARA_ALIGNMENT: "Alineació de paràgrafs del lector"
|
STR_PARA_ALIGNMENT: "Alineació de paràgrafs del lector"
|
||||||
STR_HYPHENATION: "Partició de mots"
|
STR_HYPHENATION: "Partició de mots"
|
||||||
STR_TIME_TO_SLEEP: "Temps per entrar en repòs"
|
STR_TIME_TO_SLEEP: "Temps per entrar en repòs"
|
||||||
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
||||||
|
STR_SLEEP_NEVER: "Mai"
|
||||||
|
STR_SLEEP_TIMER_STEP_HINT: "Esquerra/Dreta: 1 min Amunt/Avall: 5 min"
|
||||||
STR_SHOW_HIDDEN_FILES: "Mostra arxius ocults"
|
STR_SHOW_HIDDEN_FILES: "Mostra arxius ocults"
|
||||||
STR_REMOVE_READ_FROM_RECENTS: "Esborra els llibres llegits de la llista de recents"
|
STR_REMOVE_READ_FROM_RECENTS: "Esborra els llibres llegits de la llista de recents"
|
||||||
STR_MOVE_FINISHED_TO_READ: "Mou els llibres acabats a la carpeta Read"
|
STR_MOVE_FINISHED_TO_READ: "Mou els llibres acabats a la carpeta Read"
|
||||||
@@ -155,7 +158,6 @@ STR_ALIGN_LEFT: "Esquerra"
|
|||||||
STR_CENTER: "Centre"
|
STR_CENTER: "Centre"
|
||||||
STR_ALIGN_RIGHT: "Dreta"
|
STR_ALIGN_RIGHT: "Dreta"
|
||||||
STR_MIN_1: "1 min"
|
STR_MIN_1: "1 min"
|
||||||
STR_MIN_3: "3 min"
|
|
||||||
STR_MIN_5: "5 min"
|
STR_MIN_5: "5 min"
|
||||||
STR_MIN_10: "10 min"
|
STR_MIN_10: "10 min"
|
||||||
STR_MIN_15: "15 min"
|
STR_MIN_15: "15 min"
|
||||||
|
|||||||
+23
-17
@@ -79,6 +79,22 @@ void CrossPointSettings::validateFrontButtonMapping(CrossPointSettings& settings
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t CrossPointSettings::sleepTimeoutEnumToMinutes(const uint8_t legacyValue) {
|
||||||
|
switch (legacyValue) {
|
||||||
|
case SLEEP_1_MIN:
|
||||||
|
return 1;
|
||||||
|
case SLEEP_5_MIN:
|
||||||
|
return 5;
|
||||||
|
case SLEEP_15_MIN:
|
||||||
|
return 15;
|
||||||
|
case SLEEP_30_MIN:
|
||||||
|
return 30;
|
||||||
|
case SLEEP_10_MIN:
|
||||||
|
default:
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool CrossPointSettings::saveToFile() const {
|
bool CrossPointSettings::saveToFile() const {
|
||||||
Storage.mkdir("/.crosspoint");
|
Storage.mkdir("/.crosspoint");
|
||||||
return JsonSettingsIO::saveSettings(*this, SETTINGS_FILE_JSON);
|
return JsonSettingsIO::saveSettings(*this, SETTINGS_FILE_JSON);
|
||||||
@@ -186,7 +202,9 @@ bool CrossPointSettings::loadFromBinaryFile() {
|
|||||||
if (++settingsRead >= fileSettingsCount) break;
|
if (++settingsRead >= fileSettingsCount) break;
|
||||||
readAndValidate(inputFile, paragraphAlignment, PARAGRAPH_ALIGNMENT_COUNT);
|
readAndValidate(inputFile, paragraphAlignment, PARAGRAPH_ALIGNMENT_COUNT);
|
||||||
if (++settingsRead >= fileSettingsCount) break;
|
if (++settingsRead >= fileSettingsCount) break;
|
||||||
readAndValidate(inputFile, sleepTimeout, SLEEP_TIMEOUT_COUNT);
|
uint8_t legacySleepTimeout = SLEEP_10_MIN;
|
||||||
|
readAndValidate(inputFile, legacySleepTimeout, SLEEP_TIMEOUT_COUNT);
|
||||||
|
sleepTimeoutMinutes = sleepTimeoutEnumToMinutes(legacySleepTimeout);
|
||||||
if (++settingsRead >= fileSettingsCount) break;
|
if (++settingsRead >= fileSettingsCount) break;
|
||||||
readAndValidate(inputFile, refreshFrequency, REFRESH_FREQUENCY_COUNT);
|
readAndValidate(inputFile, refreshFrequency, REFRESH_FREQUENCY_COUNT);
|
||||||
if (++settingsRead >= fileSettingsCount) break;
|
if (++settingsRead >= fileSettingsCount) break;
|
||||||
@@ -304,22 +322,10 @@ float CrossPointSettings::getReaderLineCompression() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned long CrossPointSettings::getSleepTimeoutMs() const {
|
unsigned long CrossPointSettings::getSleepTimeoutMs() const {
|
||||||
switch (sleepTimeout) {
|
if (sleepTimeoutMinutes >= SLEEP_TIMEOUT_NEVER_MINUTES) return 0UL;
|
||||||
case SLEEP_1_MIN:
|
const uint8_t minutes =
|
||||||
return 1UL * 60 * 1000;
|
std::clamp(sleepTimeoutMinutes, MIN_SLEEP_TIMEOUT_MINUTES, static_cast<uint8_t>(SLEEP_TIMEOUT_NEVER_MINUTES - 1));
|
||||||
case SLEEP_3_MIN:
|
return static_cast<unsigned long>(minutes) * 60UL * 1000UL;
|
||||||
return 3UL * 60 * 1000;
|
|
||||||
case SLEEP_5_MIN:
|
|
||||||
return 5UL * 60 * 1000;
|
|
||||||
case SLEEP_10_MIN:
|
|
||||||
return 10UL * 60 * 1000;
|
|
||||||
case SLEEP_15_MIN:
|
|
||||||
return 15UL * 60 * 1000;
|
|
||||||
case SLEEP_30_MIN:
|
|
||||||
return 30UL * 60 * 1000;
|
|
||||||
default:
|
|
||||||
return 10UL * 60 * 1000;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int CrossPointSettings::getRefreshFrequency() const {
|
int CrossPointSettings::getRefreshFrequency() const {
|
||||||
|
|||||||
@@ -115,11 +115,10 @@ class CrossPointSettings {
|
|||||||
// Auto-sleep timeout options (in minutes)
|
// Auto-sleep timeout options (in minutes)
|
||||||
enum SLEEP_TIMEOUT {
|
enum SLEEP_TIMEOUT {
|
||||||
SLEEP_1_MIN = 0,
|
SLEEP_1_MIN = 0,
|
||||||
SLEEP_3_MIN = 1,
|
SLEEP_5_MIN = 1,
|
||||||
SLEEP_5_MIN = 2,
|
SLEEP_10_MIN = 2,
|
||||||
SLEEP_10_MIN = 3,
|
SLEEP_15_MIN = 3,
|
||||||
SLEEP_15_MIN = 4,
|
SLEEP_30_MIN = 4,
|
||||||
SLEEP_30_MIN = 5,
|
|
||||||
SLEEP_TIMEOUT_COUNT
|
SLEEP_TIMEOUT_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -210,8 +209,8 @@ class CrossPointSettings {
|
|||||||
uint8_t fontSize = MEDIUM;
|
uint8_t fontSize = MEDIUM;
|
||||||
uint8_t lineSpacing = NORMAL;
|
uint8_t lineSpacing = NORMAL;
|
||||||
uint8_t paragraphAlignment = JUSTIFIED;
|
uint8_t paragraphAlignment = JUSTIFIED;
|
||||||
// Auto-sleep timeout setting (default 10 minutes)
|
// Auto-sleep timeout setting (default 10 minutes). Legacy sleepTimeout enum values are migration-only.
|
||||||
uint8_t sleepTimeout = SLEEP_10_MIN;
|
uint8_t sleepTimeoutMinutes = 10;
|
||||||
// E-ink refresh frequency (default 15 pages)
|
// E-ink refresh frequency (default 15 pages)
|
||||||
uint8_t refreshFrequency = REFRESH_15;
|
uint8_t refreshFrequency = REFRESH_15;
|
||||||
uint8_t hyphenationEnabled = 0;
|
uint8_t hyphenationEnabled = 0;
|
||||||
@@ -256,6 +255,10 @@ class CrossPointSettings {
|
|||||||
// Get singleton instance
|
// Get singleton instance
|
||||||
static CrossPointSettings& getInstance() { return instance; }
|
static CrossPointSettings& getInstance() { return instance; }
|
||||||
|
|
||||||
|
static constexpr uint8_t MIN_SLEEP_TIMEOUT_MINUTES = 1;
|
||||||
|
static constexpr uint8_t SLEEP_TIMEOUT_NEVER_MINUTES = 31;
|
||||||
|
static constexpr uint8_t MAX_SLEEP_TIMEOUT_MINUTES = SLEEP_TIMEOUT_NEVER_MINUTES;
|
||||||
|
|
||||||
// Callback to resolve SD card font IDs. Set by SdCardFontSystem::begin().
|
// Callback to resolve SD card font IDs. Set by SdCardFontSystem::begin().
|
||||||
// Returns font ID or 0 if not found.
|
// Returns font ID or 0 if not found.
|
||||||
using SdFontIdResolver = int (*)(void* ctx, const char* familyName, uint8_t fontSize);
|
using SdFontIdResolver = int (*)(void* ctx, const char* familyName, uint8_t fontSize);
|
||||||
@@ -274,6 +277,7 @@ class CrossPointSettings {
|
|||||||
bool loadFromFile();
|
bool loadFromFile();
|
||||||
|
|
||||||
static void validateFrontButtonMapping(CrossPointSettings& settings);
|
static void validateFrontButtonMapping(CrossPointSettings& settings);
|
||||||
|
static uint8_t sleepTimeoutEnumToMinutes(uint8_t legacyValue);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool loadFromBinaryFile();
|
bool loadFromBinaryFile();
|
||||||
|
|||||||
@@ -224,6 +224,13 @@ bool JsonSettingsIO::loadSettings(CrossPointSettings& s, const char* json, bool*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (doc["sleepTimeoutMinutes"].isNull() && !doc["sleepTimeout"].isNull()) {
|
||||||
|
const uint8_t legacyValue =
|
||||||
|
clamp(doc["sleepTimeout"] | (uint8_t)CrossPointSettings::SLEEP_10_MIN, CrossPointSettings::SLEEP_TIMEOUT_COUNT,
|
||||||
|
(uint8_t)CrossPointSettings::SLEEP_10_MIN);
|
||||||
|
s.sleepTimeoutMinutes = CrossPointSettings::sleepTimeoutEnumToMinutes(legacyValue);
|
||||||
|
if (needsResave) *needsResave = true;
|
||||||
|
}
|
||||||
// Front button remap — managed by RemapFrontButtons sub-activity, not in SettingsList.
|
// Front button remap — managed by RemapFrontButtons sub-activity, not in SettingsList.
|
||||||
using S = CrossPointSettings;
|
using S = CrossPointSettings;
|
||||||
s.frontButtonBack =
|
s.frontButtonBack =
|
||||||
|
|||||||
+4
-4
@@ -178,10 +178,10 @@ inline std::vector<SettingInfo> getSettingsList(const SdCardFontRegistry* regist
|
|||||||
"shortPwrBtn", StrId::STR_CAT_CONTROLS),
|
"shortPwrBtn", StrId::STR_CAT_CONTROLS),
|
||||||
|
|
||||||
// --- System ---
|
// --- System ---
|
||||||
SettingInfo::Enum(StrId::STR_TIME_TO_SLEEP, &CrossPointSettings::sleepTimeout,
|
SettingInfo::Value(
|
||||||
{StrId::STR_MIN_1, StrId::STR_MIN_3, StrId::STR_MIN_5, StrId::STR_MIN_10, StrId::STR_MIN_15,
|
StrId::STR_TIME_TO_SLEEP, &CrossPointSettings::sleepTimeoutMinutes,
|
||||||
StrId::STR_MIN_30},
|
{CrossPointSettings::MIN_SLEEP_TIMEOUT_MINUTES, CrossPointSettings::MAX_SLEEP_TIMEOUT_MINUTES, 1},
|
||||||
"sleepTimeout", StrId::STR_CAT_SYSTEM),
|
"sleepTimeoutMinutes", StrId::STR_CAT_SYSTEM),
|
||||||
SettingInfo::Toggle(StrId::STR_SHOW_HIDDEN_FILES, &CrossPointSettings::showHiddenFiles, "showHiddenFiles",
|
SettingInfo::Toggle(StrId::STR_SHOW_HIDDEN_FILES, &CrossPointSettings::showHiddenFiles, "showHiddenFiles",
|
||||||
StrId::STR_CAT_SYSTEM),
|
StrId::STR_CAT_SYSTEM),
|
||||||
SettingInfo::Toggle(StrId::STR_REMOVE_READ_FROM_RECENTS, &CrossPointSettings::removeReadBooksFromRecents,
|
SettingInfo::Toggle(StrId::STR_REMOVE_READ_FROM_RECENTS, &CrossPointSettings::removeReadBooksFromRecents,
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ struct PercentResult {
|
|||||||
int percent = 0;
|
int percent = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct IntervalResult {
|
||||||
|
uint32_t value = 0;
|
||||||
|
};
|
||||||
|
|
||||||
struct PageResult {
|
struct PageResult {
|
||||||
uint32_t page = 0;
|
uint32_t page = 0;
|
||||||
};
|
};
|
||||||
@@ -55,8 +59,9 @@ struct FilePathResult {
|
|||||||
std::string path;
|
std::string path;
|
||||||
};
|
};
|
||||||
|
|
||||||
using ResultVariant = std::variant<std::monostate, WifiResult, KeyboardResult, MenuResult, ChapterResult, PercentResult,
|
using ResultVariant =
|
||||||
PageResult, ProgressChangeResult, NetworkModeResult, FootnoteResult, FilePathResult>;
|
std::variant<std::monostate, WifiResult, KeyboardResult, MenuResult, ChapterResult, PercentResult, IntervalResult,
|
||||||
|
PageResult, ProgressChangeResult, NetworkModeResult, FootnoteResult, FilePathResult>;
|
||||||
|
|
||||||
struct ActivityResult {
|
struct ActivityResult {
|
||||||
bool isCancelled = false;
|
bool isCancelled = false;
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
#include <GfxRenderer.h>
|
#include <GfxRenderer.h>
|
||||||
#include <Logging.h>
|
#include <Logging.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
#include "ButtonRemapActivity.h"
|
#include "ButtonRemapActivity.h"
|
||||||
#include "ClearCacheActivity.h"
|
#include "ClearCacheActivity.h"
|
||||||
#include "CrossPointSettings.h"
|
#include "CrossPointSettings.h"
|
||||||
@@ -18,6 +22,7 @@
|
|||||||
#include "SettingsList.h"
|
#include "SettingsList.h"
|
||||||
#include "StatusBarSettingsActivity.h"
|
#include "StatusBarSettingsActivity.h"
|
||||||
#include "activities/network/WifiSelectionActivity.h"
|
#include "activities/network/WifiSelectionActivity.h"
|
||||||
|
#include "activities/util/IntervalSelectionActivity.h"
|
||||||
#include "components/UITheme.h"
|
#include "components/UITheme.h"
|
||||||
#include "fontIds.h"
|
#include "fontIds.h"
|
||||||
|
|
||||||
@@ -183,6 +188,11 @@ void SettingsActivity::toggleCurrentSetting() {
|
|||||||
const bool sleepScreenChanged = setting.valuePtr == &CrossPointSettings::sleepScreen;
|
const bool sleepScreenChanged = setting.valuePtr == &CrossPointSettings::sleepScreen;
|
||||||
const bool quickResumeTimeoutChanged = setting.valuePtr == &CrossPointSettings::quickResumeSleepScreen;
|
const bool quickResumeTimeoutChanged = setting.valuePtr == &CrossPointSettings::quickResumeSleepScreen;
|
||||||
|
|
||||||
|
if (setting.nameId == StrId::STR_TIME_TO_SLEEP) {
|
||||||
|
openSleepTimeoutPicker();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (setting.type == SettingType::TOGGLE && setting.valuePtr != nullptr) {
|
if (setting.type == SettingType::TOGGLE && setting.valuePtr != nullptr) {
|
||||||
// Toggle the boolean value using the member pointer
|
// Toggle the boolean value using the member pointer
|
||||||
const bool currentValue = SETTINGS.*(setting.valuePtr);
|
const bool currentValue = SETTINGS.*(setting.valuePtr);
|
||||||
@@ -286,6 +296,22 @@ void SettingsActivity::syncQuickResumeTimeoutForSleepScreen(bool sleepScreenChan
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsActivity::openSleepTimeoutPicker() {
|
||||||
|
startActivityForResult(
|
||||||
|
std::make_unique<IntervalSelectionActivity>(
|
||||||
|
renderer, mappedInput, "SleepTimeoutInterval", StrId::STR_TIME_TO_SLEEP, StrId::STR_SLEEP_TIMER_STEP_HINT,
|
||||||
|
SETTINGS.sleepTimeoutMinutes, CrossPointSettings::MIN_SLEEP_TIMEOUT_MINUTES,
|
||||||
|
CrossPointSettings::MAX_SLEEP_TIMEOUT_MINUTES, 1, 5, StrId::STR_SLEEP_TIMER_VALUE_FORMAT, false, true,
|
||||||
|
StrId::STR_SLEEP_NEVER),
|
||||||
|
[this](const ActivityResult& result) {
|
||||||
|
if (!result.isCancelled) {
|
||||||
|
SETTINGS.sleepTimeoutMinutes = static_cast<uint8_t>(std::get<IntervalResult>(result.data).value);
|
||||||
|
SETTINGS.saveToFile();
|
||||||
|
}
|
||||||
|
requestUpdate();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsActivity::render(RenderLock&&) {
|
void SettingsActivity::render(RenderLock&&) {
|
||||||
renderer.clearScreen();
|
renderer.clearScreen();
|
||||||
|
|
||||||
@@ -330,16 +356,30 @@ void SettingsActivity::render(RenderLock&&) {
|
|||||||
valueText = I18N.get(setting.enumValues[value]);
|
valueText = I18N.get(setting.enumValues[value]);
|
||||||
}
|
}
|
||||||
} else if (setting.type == SettingType::VALUE && setting.valuePtr != nullptr) {
|
} else if (setting.type == SettingType::VALUE && setting.valuePtr != nullptr) {
|
||||||
valueText = std::to_string(SETTINGS.*(setting.valuePtr));
|
if (setting.nameId == StrId::STR_TIME_TO_SLEEP) {
|
||||||
|
char valueBuffer[32];
|
||||||
|
if (SETTINGS.sleepTimeoutMinutes >= CrossPointSettings::SLEEP_TIMEOUT_NEVER_MINUTES) {
|
||||||
|
valueText = tr(STR_SLEEP_NEVER);
|
||||||
|
} else {
|
||||||
|
snprintf(valueBuffer, sizeof(valueBuffer), tr(STR_SLEEP_TIMER_VALUE_FORMAT),
|
||||||
|
static_cast<unsigned int>(SETTINGS.*(setting.valuePtr)));
|
||||||
|
valueText = valueBuffer;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
valueText = std::to_string(SETTINGS.*(setting.valuePtr));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return valueText;
|
return valueText;
|
||||||
},
|
},
|
||||||
true);
|
true);
|
||||||
|
|
||||||
// Draw help text
|
// Draw help text
|
||||||
const auto confirmLabel = (selectedSettingIndex == 0)
|
const auto confirmLabel =
|
||||||
? I18N.get(categoryNames[(selectedCategoryIndex + 1) % categoryCount])
|
(selectedSettingIndex == 0)
|
||||||
: tr(STR_TOGGLE);
|
? I18N.get(categoryNames[(selectedCategoryIndex + 1) % categoryCount])
|
||||||
|
: (selectedSettingIndex > 0 && (*currentSettings)[selectedSettingIndex - 1].nameId == StrId::STR_TIME_TO_SLEEP
|
||||||
|
? tr(STR_SELECT)
|
||||||
|
: tr(STR_TOGGLE));
|
||||||
const auto labels = mappedInput.mapLabels(tr(STR_BACK), confirmLabel, tr(STR_DIR_UP), tr(STR_DIR_DOWN));
|
const auto labels = mappedInput.mapLabels(tr(STR_BACK), confirmLabel, tr(STR_DIR_UP), tr(STR_DIR_DOWN));
|
||||||
GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4);
|
GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4);
|
||||||
|
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ class SettingsActivity final : public Activity {
|
|||||||
|
|
||||||
void enterCategory(int categoryIndex);
|
void enterCategory(int categoryIndex);
|
||||||
void toggleCurrentSetting();
|
void toggleCurrentSetting();
|
||||||
|
void openSleepTimeoutPicker();
|
||||||
void rebuildSettingsLists();
|
void rebuildSettingsLists();
|
||||||
void syncQuickResumeTimeoutForSleepScreen(bool sleepScreenChanged, bool quickResumeTimeoutChanged);
|
void syncQuickResumeTimeoutForSleepScreen(bool sleepScreenChanged, bool quickResumeTimeoutChanged);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,97 @@
|
|||||||
|
#include "IntervalSelectionActivity.h"
|
||||||
|
|
||||||
|
#include <GfxRenderer.h>
|
||||||
|
#include <I18n.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
#include "components/UITheme.h"
|
||||||
|
#include "fontIds.h"
|
||||||
|
|
||||||
|
int IntervalSelectionActivity::clampedValue(const int candidate) const {
|
||||||
|
return std::clamp(candidate, minValue, maxValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalSelectionActivity::onEnter() {
|
||||||
|
Activity::onEnter();
|
||||||
|
value = clampedValue(value);
|
||||||
|
requestUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalSelectionActivity::adjustValue(const int delta) {
|
||||||
|
value = clampedValue(value + delta);
|
||||||
|
requestUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalSelectionActivity::loop() {
|
||||||
|
if (ignoreConfirmRelease) {
|
||||||
|
if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) {
|
||||||
|
ignoreConfirmRelease = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!mappedInput.isPressed(MappedInputManager::Button::Confirm)) {
|
||||||
|
ignoreConfirmRelease = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mappedInput.wasReleased(MappedInputManager::Button::Back)) {
|
||||||
|
ActivityResult result;
|
||||||
|
result.isCancelled = true;
|
||||||
|
setResult(std::move(result));
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) {
|
||||||
|
setResult(IntervalResult{static_cast<uint32_t>(value)});
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
buttonNavigator.onPressAndContinuous({MappedInputManager::Button::Left}, [this] { adjustValue(-smallStep); });
|
||||||
|
buttonNavigator.onPressAndContinuous({MappedInputManager::Button::Right}, [this] { adjustValue(smallStep); });
|
||||||
|
buttonNavigator.onPressAndContinuous({MappedInputManager::Button::Up}, [this] { adjustValue(largeStep); });
|
||||||
|
buttonNavigator.onPressAndContinuous({MappedInputManager::Button::Down}, [this] { adjustValue(-largeStep); });
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalSelectionActivity::render(RenderLock&&) {
|
||||||
|
renderer.clearScreen();
|
||||||
|
|
||||||
|
renderer.drawCenteredText(UI_12_FONT_ID, 15, I18N.get(titleId), true, EpdFontFamily::BOLD);
|
||||||
|
|
||||||
|
char formattedValue[32];
|
||||||
|
if (maxBoundaryLabelId != StrId::STR_NONE_OPT && value == maxValue) {
|
||||||
|
snprintf(formattedValue, sizeof(formattedValue), "%s", I18N.get(maxBoundaryLabelId));
|
||||||
|
} else if (valueFormatId != StrId::STR_NONE_OPT) {
|
||||||
|
snprintf(formattedValue, sizeof(formattedValue), I18N.get(valueFormatId), static_cast<unsigned int>(value));
|
||||||
|
} else {
|
||||||
|
snprintf(formattedValue, sizeof(formattedValue), "%d", value);
|
||||||
|
}
|
||||||
|
renderer.drawCenteredText(UI_12_FONT_ID, 90, formattedValue, true, EpdFontFamily::BOLD);
|
||||||
|
|
||||||
|
const int screenWidth = renderer.getScreenWidth();
|
||||||
|
const int barWidth = std::min(360, std::max(0, screenWidth - 40));
|
||||||
|
constexpr int barHeight = 16;
|
||||||
|
const int barX = std::max(0, (screenWidth - barWidth) / 2);
|
||||||
|
const int barY = 140;
|
||||||
|
|
||||||
|
renderer.drawRect(barX, barY, barWidth, barHeight);
|
||||||
|
|
||||||
|
const int range = std::max(1, maxValue - minValue);
|
||||||
|
const int fillWidth = (barWidth - 4) * (value - minValue) / range;
|
||||||
|
if (fillWidth > 0) {
|
||||||
|
renderer.fillRect(barX + 2, barY + 2, fillWidth, barHeight - 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
const int knobX = std::max(barX + 2, barX + 2 + fillWidth - 2);
|
||||||
|
renderer.fillRect(knobX, barY - 4, 4, barHeight + 8, true);
|
||||||
|
|
||||||
|
renderer.drawCenteredText(SMALL_FONT_ID, barY + 30, I18N.get(stepHintId), true);
|
||||||
|
|
||||||
|
const auto labels = mappedInput.mapLabels(tr(STR_BACK), tr(STR_SELECT), "-", "+");
|
||||||
|
GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4);
|
||||||
|
|
||||||
|
renderer.displayBuffer();
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <I18n.h>
|
||||||
|
|
||||||
|
#include "MappedInputManager.h"
|
||||||
|
#include "activities/Activity.h"
|
||||||
|
#include "util/ButtonNavigator.h"
|
||||||
|
|
||||||
|
class GfxRenderer;
|
||||||
|
|
||||||
|
class IntervalSelectionActivity final : public Activity {
|
||||||
|
public:
|
||||||
|
explicit IntervalSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const char* activityName,
|
||||||
|
StrId titleId, StrId stepHintId, int initialValue, int minValue, int maxValue,
|
||||||
|
int smallStep, int largeStep, StrId valueFormatId = StrId::STR_NONE_OPT,
|
||||||
|
bool readerActivity = false, bool ignoreInitialConfirmRelease = false,
|
||||||
|
StrId maxBoundaryLabelId = StrId::STR_NONE_OPT)
|
||||||
|
: Activity(activityName, renderer, mappedInput),
|
||||||
|
titleId(titleId),
|
||||||
|
stepHintId(stepHintId),
|
||||||
|
valueFormatId(valueFormatId),
|
||||||
|
maxBoundaryLabelId(maxBoundaryLabelId),
|
||||||
|
value(initialValue),
|
||||||
|
minValue(minValue),
|
||||||
|
maxValue(maxValue),
|
||||||
|
smallStep(smallStep),
|
||||||
|
largeStep(largeStep),
|
||||||
|
readerActivity(readerActivity),
|
||||||
|
ignoreConfirmRelease(ignoreInitialConfirmRelease) {}
|
||||||
|
|
||||||
|
void onEnter() override;
|
||||||
|
void loop() override;
|
||||||
|
void render(RenderLock&&) override;
|
||||||
|
bool isReaderActivity() const override { return readerActivity; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
StrId titleId;
|
||||||
|
StrId stepHintId;
|
||||||
|
StrId valueFormatId;
|
||||||
|
StrId maxBoundaryLabelId;
|
||||||
|
int value;
|
||||||
|
int minValue;
|
||||||
|
int maxValue;
|
||||||
|
int smallStep;
|
||||||
|
int largeStep;
|
||||||
|
bool readerActivity;
|
||||||
|
bool ignoreConfirmRelease;
|
||||||
|
ButtonNavigator buttonNavigator;
|
||||||
|
|
||||||
|
void adjustValue(int delta);
|
||||||
|
int clampedValue(int candidate) const;
|
||||||
|
};
|
||||||
+1
-1
@@ -574,7 +574,7 @@ void loop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const unsigned long sleepTimeoutMs = SETTINGS.getSleepTimeoutMs();
|
const unsigned long sleepTimeoutMs = SETTINGS.getSleepTimeoutMs();
|
||||||
if (millis() - lastActivityTime >= sleepTimeoutMs) {
|
if (sleepTimeoutMs > 0 && millis() - lastActivityTime >= sleepTimeoutMs) {
|
||||||
LOG_DBG("SLP", "Auto-sleep triggered after %lu ms of inactivity", sleepTimeoutMs);
|
LOG_DBG("SLP", "Auto-sleep triggered after %lu ms of inactivity", sleepTimeoutMs);
|
||||||
enterDeepSleep(true);
|
enterDeepSleep(true);
|
||||||
// This should never be hit as `enterDeepSleep` calls esp_deep_sleep_start
|
// This should never be hit as `enterDeepSleep` calls esp_deep_sleep_start
|
||||||
|
|||||||
Reference in New Issue
Block a user