From c44555007b096180cb6420cdec0b1f848fdd4d88 Mon Sep 17 00:00:00 2001 From: Julia Date: Wed, 20 May 2026 22:43:48 -0400 Subject: [PATCH] feat(settings): modify "Page as Sleep Screen" to "Quick Resume" options (#2089) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary **What is the goal of this PR?** Adds a clearer Quick Resume sleep-screen flow. The previous “Page as Sleep Screen” behavior is now exposed as a dedicated `Sleep Screen > Quick Resume `option, with the timeout-only behavior controlled by a renamed `Quick Resume on Timeout `setting. **What changes are included?** - Adds `Quick Resume` as a new `Sleep Screen` option. - Renames the old `Page as Sleep Screen` setting to `Quick Resume on Timeout`. - Changes that setting’s choices from `Never / After Timeout / Always` to `OFF / ON`. - Makes `Quick Resume on Timeout = ON` equivalent to the old `After Timeout` behavior. - Makes `Sleep Screen > Quick Resume` equivalent to the old `Always` behavior. - Automatically forces `Quick Resume on Timeout` to `ON` when `Sleep Screen` is set to `Quick Resume`. - Renames internal setting references from `seamlessSleepScreen` to `quickResumeSleepScreen`. - Updates translations for the renamed setting label. **Additional Context** - This is mostly a settings/labeling restructure around existing behavior, not a new rendering path. - The runtime quick-resume behavior still uses the existing saved framebuffer / last-screen sleep flow. - Review focus areas: - Sleep entry behavior from manual sleep vs timeout sleep. - The automatic dependency where selecting `Sleep Screen > Quick Resume` sets `Quick Resume on Timeout` to `ON`. --- ### 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? _**< YES >**_ --- **New `Quick Resume` option for `Sleep Screen` will automatically set `Quick Resume on Timeout` to `ON`**: quick resume **Example where a different sleep screen setting like `Cover` can be used in combination with the `Quick Resume on Timeout` setting**: cover + quick resume --- lib/I18n/translations/belarusian.yaml | 3 ++- lib/I18n/translations/catalan.yaml | 3 ++- lib/I18n/translations/czech.yaml | 3 ++- lib/I18n/translations/danish.yaml | 3 ++- lib/I18n/translations/dutch.yaml | 5 +++-- lib/I18n/translations/english.yaml | 3 ++- lib/I18n/translations/finnish.yaml | 3 ++- lib/I18n/translations/french.yaml | 3 ++- lib/I18n/translations/german.yaml | 3 ++- lib/I18n/translations/hungarian.yaml | 3 ++- lib/I18n/translations/italian.yaml | 3 ++- lib/I18n/translations/kazakh.yaml | 3 ++- lib/I18n/translations/lithuanian.yaml | 3 ++- lib/I18n/translations/polish.yaml | 3 ++- lib/I18n/translations/portuguese.yaml | 3 ++- lib/I18n/translations/romanian.yaml | 3 ++- lib/I18n/translations/russian.yaml | 3 ++- lib/I18n/translations/slovenian.yaml | 3 ++- lib/I18n/translations/spanish.yaml | 3 ++- lib/I18n/translations/swedish.yaml | 3 ++- lib/I18n/translations/turkish.yaml | 3 ++- lib/I18n/translations/ukrainian.yaml | 3 ++- platformio.ini | 2 +- src/CrossPointSettings.cpp | 6 ++++++ src/CrossPointSettings.h | 15 ++++++++------- src/JsonSettingsIO.cpp | 4 ++++ src/SettingsList.h | 6 +++--- src/activities/boot_sleep/SleepActivity.cpp | 8 ++++---- src/activities/settings/SettingsActivity.cpp | 1 + src/main.cpp | 11 ++++++----- src/network/CrossPointWebServer.cpp | 1 + 31 files changed, 79 insertions(+), 43 deletions(-) diff --git a/lib/I18n/translations/belarusian.yaml b/lib/I18n/translations/belarusian.yaml index cecb40de..3a10e1e3 100644 --- a/lib/I18n/translations/belarusian.yaml +++ b/lib/I18n/translations/belarusian.yaml @@ -206,11 +206,12 @@ STR_THEME_CLASSIC: "Класічная" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Кампенсацыя выцвітання" -STR_SEAMLESS_SLEEP: "Старонка як экран сну" +STR_QUICK_RESUME_TIMEOUT: "Хуткае узнаўленне пасля таймаўту" STR_AFTER_TIMEOUT: "Пасля таймаўту" STR_REMAP_FRONT_BUTTONS: "Пераназначыць пярэднія кнопкі" STR_OPDS_BROWSER: "OPDS браўзер" STR_COVER_CUSTOM: "Вокладка + Свой" +STR_QUICK_RESUME: "Хуткае узнаўленне" STR_MENU_RECENT_BOOKS: "Нядаўнія кнігі" STR_REMOVE_FROM_RECENTS: "Выдаліць з нядаўніх кніг?" STR_NO_RECENT_BOOKS: "Няма нядаўніх кніг" diff --git a/lib/I18n/translations/catalan.yaml b/lib/I18n/translations/catalan.yaml index 08b8f148..feb270ba 100644 --- a/lib/I18n/translations/catalan.yaml +++ b/lib/I18n/translations/catalan.yaml @@ -234,11 +234,12 @@ STR_THEME_CLASSIC: "Clàssic" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Ampliat" STR_SUNLIGHT_FADING_FIX: "Correcció de l'esvaïment pel sol" -STR_SEAMLESS_SLEEP: "Pàgina com a repòs" +STR_QUICK_RESUME_TIMEOUT: "Represa ràpida després del temps" STR_AFTER_TIMEOUT: "Després del temps" STR_REMAP_FRONT_BUTTONS: "Reassigna els botons frontals" STR_OPDS_BROWSER: "Navegador OPDS" STR_COVER_CUSTOM: "Portada + Personalitzat" +STR_QUICK_RESUME: "Represa ràpida" STR_MENU_RECENT_BOOKS: "Llibres recents" STR_REMOVE_FROM_RECENTS: "Voleu suprimir-lo de Llibres recents?" STR_NO_RECENT_BOOKS: "No hi ha llibres recents" diff --git a/lib/I18n/translations/czech.yaml b/lib/I18n/translations/czech.yaml index 7363a98c..1cd2a584 100644 --- a/lib/I18n/translations/czech.yaml +++ b/lib/I18n/translations/czech.yaml @@ -212,11 +212,12 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Oprava blednutí na slunci" -STR_SEAMLESS_SLEEP: "Stránka jako spánek" +STR_QUICK_RESUME_TIMEOUT: "Rychlé navázání po vypršení" STR_AFTER_TIMEOUT: "Po vypršení" STR_REMAP_FRONT_BUTTONS: "Přemapovat přední tlačítka" STR_OPDS_BROWSER: "Prohlížeč OPDS" STR_COVER_CUSTOM: "Obálka + Vlastní" +STR_QUICK_RESUME: "Rychlé navázání" STR_MENU_RECENT_BOOKS: "Nedávné knihy" STR_REMOVE_FROM_RECENTS: "Odebrat z nedávných knih?" STR_NO_RECENT_BOOKS: "Žádné nedávné knihy" diff --git a/lib/I18n/translations/danish.yaml b/lib/I18n/translations/danish.yaml index 0126aec8..c3d27d64 100644 --- a/lib/I18n/translations/danish.yaml +++ b/lib/I18n/translations/danish.yaml @@ -234,11 +234,12 @@ STR_THEME_CLASSIC: "Klassisk" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Sollysfading-rettelse" -STR_SEAMLESS_SLEEP: "Side som dvaleskærm" +STR_QUICK_RESUME_TIMEOUT: "Hurtig genoptagelse ved timeout" STR_AFTER_TIMEOUT: "Efter timeout" STR_REMAP_FRONT_BUTTONS: "Omtildel frontknapper" STR_OPDS_BROWSER: "OPDS Browser" STR_COVER_CUSTOM: "Omslag + Brugerdefineret" +STR_QUICK_RESUME: "Hurtig genoptagelse" STR_MENU_RECENT_BOOKS: "Seneste bøger" STR_REMOVE_FROM_RECENTS: "Fjern fra Seneste bøger?" STR_NO_RECENT_BOOKS: "Ingen seneste bøger" diff --git a/lib/I18n/translations/dutch.yaml b/lib/I18n/translations/dutch.yaml index 917ac475..a9542def 100644 --- a/lib/I18n/translations/dutch.yaml +++ b/lib/I18n/translations/dutch.yaml @@ -234,11 +234,12 @@ STR_THEME_CLASSIC: "Klassiek" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Uitgebreid" STR_SUNLIGHT_FADING_FIX: "Zonlicht vervaging fix" -STR_SEAMLESS_SLEEP: "Pagina als slaapscherm" +STR_QUICK_RESUME_TIMEOUT: "Snel hervatten bij timeout" STR_AFTER_TIMEOUT: "Na timeout" STR_REMAP_FRONT_BUTTONS: "Knoppen voorzijde wijzigen" STR_OPDS_BROWSER: "OPDS-browser" STR_COVER_CUSTOM: "Omslag + Aangepast" +STR_QUICK_RESUME: "Snel hervatten" STR_MENU_RECENT_BOOKS: "Recente boeken" STR_REMOVE_FROM_RECENTS: "Verwijderen uit Recente boeken?" STR_NO_RECENT_BOOKS: "Geen recente boeken" @@ -302,4 +303,4 @@ STR_LINK: "[link]" STR_SCREENSHOT_BUTTON: "Screenshot maken" STR_AUTO_TURN_ENABLED: "Automatisch omslaan ingeschakeld: " STR_AUTO_TURN_PAGES_PER_MIN: "Autom. omslaan (pagina's per minuut)" -STR_TILT_PAGE_TURN: "Kantel om te bladeren" \ No newline at end of file +STR_TILT_PAGE_TURN: "Kantel om te bladeren" diff --git a/lib/I18n/translations/english.yaml b/lib/I18n/translations/english.yaml index c10420fc..d18c7390 100644 --- a/lib/I18n/translations/english.yaml +++ b/lib/I18n/translations/english.yaml @@ -62,7 +62,7 @@ STR_CAT_READER: "Reader" STR_CAT_CONTROLS: "Controls" STR_CAT_SYSTEM: "System" STR_SLEEP_SCREEN: "Sleep Screen" -STR_SEAMLESS_SLEEP: "Page as Sleep Screen" +STR_QUICK_RESUME_TIMEOUT: "Quick Resume on Timeout" STR_AFTER_TIMEOUT: "After Timeout" STR_SLEEP_COVER_MODE: "Sleep Screen Cover Mode" STR_HIDE_BATTERY: "Hide Battery %" @@ -263,6 +263,7 @@ STR_REMAP_FRONT_BUTTONS: "Remap Front Buttons" STR_OPDS_BROWSER: "OPDS Browser" STR_SEARCH: "Search" STR_COVER_CUSTOM: "Cover + Custom" +STR_QUICK_RESUME: "Quick Resume" STR_MENU_RECENT_BOOKS: "Recent Books" STR_REMOVE_FROM_RECENTS: "Remove from Recent Books?" STR_NO_RECENT_BOOKS: "No recent books" diff --git a/lib/I18n/translations/finnish.yaml b/lib/I18n/translations/finnish.yaml index cd7b3b6d..94e9a7ea 100644 --- a/lib/I18n/translations/finnish.yaml +++ b/lib/I18n/translations/finnish.yaml @@ -211,11 +211,12 @@ STR_THEME_CLASSIC: "Klassinen" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Auringonvalon haalistumiskorjaus" -STR_SEAMLESS_SLEEP: "Sivu lepotilassa" +STR_QUICK_RESUME_TIMEOUT: "Pikajatko aikakatkaisulla" STR_AFTER_TIMEOUT: "Aikakatkon jälkeen" STR_REMAP_FRONT_BUTTONS: "Uudelleenmääritä etupainikkeet" STR_OPDS_BROWSER: "OPDS-selain" STR_COVER_CUSTOM: "Kansi + mukautettu" +STR_QUICK_RESUME: "Pikajatko" STR_MENU_RECENT_BOOKS: "Viimeisimmät kirjat" STR_REMOVE_FROM_RECENTS: "Poista viimeisimmistä kirjoista?" STR_NO_RECENT_BOOKS: "Ei viimeisimpiä kirjoja" diff --git a/lib/I18n/translations/french.yaml b/lib/I18n/translations/french.yaml index 0cfc4b55..8cad934c 100644 --- a/lib/I18n/translations/french.yaml +++ b/lib/I18n/translations/french.yaml @@ -235,11 +235,12 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Correction lisibilité au soleil" -STR_SEAMLESS_SLEEP: "Page comme veille" +STR_QUICK_RESUME_TIMEOUT: "Reprise rapide après délai" STR_AFTER_TIMEOUT: "Après délai" STR_REMAP_FRONT_BUTTONS: "Configurer boutons façade" STR_OPDS_BROWSER: "Navigateur OPDS" STR_COVER_CUSTOM: "Couverture + Perso" +STR_QUICK_RESUME: "Reprise rapide" STR_MENU_RECENT_BOOKS: "Livres récents" STR_REMOVE_FROM_RECENTS: "Retirer des Livres récents ?" STR_NO_RECENT_BOOKS: "Aucun livre récent" diff --git a/lib/I18n/translations/german.yaml b/lib/I18n/translations/german.yaml index 9215635e..d0e8ee23 100644 --- a/lib/I18n/translations/german.yaml +++ b/lib/I18n/translations/german.yaml @@ -233,11 +233,12 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Anti-Verblassen" -STR_SEAMLESS_SLEEP: "Seite als Ruhebild" +STR_QUICK_RESUME_TIMEOUT: "Schnelles Fortsetzen nach Timeout" STR_AFTER_TIMEOUT: "Nach Timeout" STR_REMAP_FRONT_BUTTONS: "Vordere Tasten belegen" STR_OPDS_BROWSER: "OPDS-Browser" STR_COVER_CUSTOM: "Umschlag + Eigenes" +STR_QUICK_RESUME: "Schnelles Fortsetzen" STR_MENU_RECENT_BOOKS: "Zuletzt gelesen" STR_REMOVE_FROM_RECENTS: "Aus Zuletzt gelesen entfernen?" STR_NO_RECENT_BOOKS: "Keine Bücher" diff --git a/lib/I18n/translations/hungarian.yaml b/lib/I18n/translations/hungarian.yaml index 166e4b00..583c1734 100644 --- a/lib/I18n/translations/hungarian.yaml +++ b/lib/I18n/translations/hungarian.yaml @@ -231,11 +231,12 @@ STR_THEME_CLASSIC: "Klasszikus" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Napfény halványulás javítás" -STR_SEAMLESS_SLEEP: "Oldal alvóképernyő" +STR_QUICK_RESUME_TIMEOUT: "Gyors folytatás időtúllépéskor" STR_AFTER_TIMEOUT: "Időtúllépés után" STR_REMAP_FRONT_BUTTONS: "Elülső gombok átállítása" STR_OPDS_BROWSER: "OPDS böngésző" STR_COVER_CUSTOM: "Borító + Egyéni" +STR_QUICK_RESUME: "Gyors folytatás" STR_MENU_RECENT_BOOKS: "Legutóbbi könyvek" STR_REMOVE_FROM_RECENTS: "Eltávolítás a legutóbbi könyvek közül?" STR_NO_RECENT_BOOKS: "Nincsenek legutóbbi könyvek" diff --git a/lib/I18n/translations/italian.yaml b/lib/I18n/translations/italian.yaml index 4ccdacc7..7bf3ddd8 100644 --- a/lib/I18n/translations/italian.yaml +++ b/lib/I18n/translations/italian.yaml @@ -242,12 +242,13 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra esteso" STR_SUNLIGHT_FADING_FIX: "Correzione luce solare" -STR_SEAMLESS_SLEEP: "Pagina come standby" +STR_QUICK_RESUME_TIMEOUT: "Ripresa rapida dopo timeout" STR_AFTER_TIMEOUT: "Dopo timeout" STR_REMAP_FRONT_BUTTONS: "Rimappa pulsanti frontali" STR_OPDS_BROWSER: "Browser OPDS" STR_SEARCH: "Cerca" STR_COVER_CUSTOM: "Copertina + Wallpaper" +STR_QUICK_RESUME: "Ripresa rapida" STR_MENU_RECENT_BOOKS: "Libri recenti" STR_REMOVE_FROM_RECENTS: "Rimuovere da Libri recenti?" STR_NO_RECENT_BOOKS: "Nessun libro recente" diff --git a/lib/I18n/translations/kazakh.yaml b/lib/I18n/translations/kazakh.yaml index 9c7417c2..0c28011b 100644 --- a/lib/I18n/translations/kazakh.yaml +++ b/lib/I18n/translations/kazakh.yaml @@ -207,11 +207,12 @@ STR_THEME_CLASSIC: "Классикалық" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra кеңейтілген" STR_SUNLIGHT_FADING_FIX: "Күн сәулесінен солу түзету" -STR_SEAMLESS_SLEEP: "Бет – ұйқы экраны" +STR_QUICK_RESUME_TIMEOUT: "Таймауттан кейін жылдам жалғастыру" STR_AFTER_TIMEOUT: "Таймауттан кейін" STR_REMAP_FRONT_BUTTONS: "Алдыңғы түймелерді қайта баптау" STR_OPDS_BROWSER: "OPDS шолғышы" STR_COVER_CUSTOM: "Мұқаба + Өзгертілген" +STR_QUICK_RESUME: "Жылдам жалғастыру" STR_MENU_RECENT_BOOKS: "Жуырда оқылған кітаптар" STR_REMOVE_FROM_RECENTS: "Жуырда оқылған кітаптардан жою?" STR_NO_RECENT_BOOKS: "Жуырда оқылған кітаптар жоқ" diff --git a/lib/I18n/translations/lithuanian.yaml b/lib/I18n/translations/lithuanian.yaml index 154669e0..79a98d32 100644 --- a/lib/I18n/translations/lithuanian.yaml +++ b/lib/I18n/translations/lithuanian.yaml @@ -231,11 +231,12 @@ STR_THEME_CLASSIC: "Klasikinė" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Ext." STR_SUNLIGHT_FADING_FIX: "Blyškumo pataisa" -STR_SEAMLESS_SLEEP: "Puslapis miego ekrane" +STR_QUICK_RESUME_TIMEOUT: "Greitas tęsimas po skirtojo laiko" STR_AFTER_TIMEOUT: "Po skirtojo laiko" STR_REMAP_FRONT_BUTTONS: "Keisti mygtukus" STR_OPDS_BROWSER: "OPDS naršyklė" STR_COVER_CUSTOM: "Viršelis + Kita" +STR_QUICK_RESUME: "Greitas tęsimas" STR_MENU_RECENT_BOOKS: "Paskutinės" STR_REMOVE_FROM_RECENTS: "Pašalinti iš paskutinių?" STR_NO_RECENT_BOOKS: "Paskutinių nėra" diff --git a/lib/I18n/translations/polish.yaml b/lib/I18n/translations/polish.yaml index 3b85b70e..0b74011e 100644 --- a/lib/I18n/translations/polish.yaml +++ b/lib/I18n/translations/polish.yaml @@ -242,12 +242,13 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Przeciwdziałanie blaknięciu od słońca" -STR_SEAMLESS_SLEEP: "Strona jako ekran snu" +STR_QUICK_RESUME_TIMEOUT: "Szybkie wznawianie po czasie" STR_AFTER_TIMEOUT: "Po upływie czasu" STR_REMAP_FRONT_BUTTONS: "Skonfiguruj przednie przyciski" STR_OPDS_BROWSER: "OPDS Browser" STR_SEARCH: "Szukaj" STR_COVER_CUSTOM: "Okładka + Własne" +STR_QUICK_RESUME: "Szybkie wznawianie" STR_MENU_RECENT_BOOKS: "Ostatnio czytane" STR_REMOVE_FROM_RECENTS: "Usunąć z ostatnio czytanych?" STR_NO_RECENT_BOOKS: "Brak ostatnio czytanych" diff --git a/lib/I18n/translations/portuguese.yaml b/lib/I18n/translations/portuguese.yaml index 1d13d16d..e36683b0 100644 --- a/lib/I18n/translations/portuguese.yaml +++ b/lib/I18n/translations/portuguese.yaml @@ -212,11 +212,12 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Ajuste desbotamento ao sol" -STR_SEAMLESS_SLEEP: "Página como repouso" +STR_QUICK_RESUME_TIMEOUT: "Retomada rápida após tempo limite" STR_AFTER_TIMEOUT: "Após tempo limite" STR_REMAP_FRONT_BUTTONS: "Remapear botões frontais" STR_OPDS_BROWSER: "Navegador OPDS" STR_COVER_CUSTOM: "Capa + personalizado" +STR_QUICK_RESUME: "Retomada rápida" STR_MENU_RECENT_BOOKS: "Livros recentes" STR_REMOVE_FROM_RECENTS: "Remover dos Livros recentes?" STR_NO_RECENT_BOOKS: "Sem livros recentes" diff --git a/lib/I18n/translations/romanian.yaml b/lib/I18n/translations/romanian.yaml index e8ffe123..07fb3ac1 100644 --- a/lib/I18n/translations/romanian.yaml +++ b/lib/I18n/translations/romanian.yaml @@ -234,11 +234,12 @@ STR_THEME_CLASSIC: "Clasic" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Corecţie estompare lumină" -STR_SEAMLESS_SLEEP: "Pagină ca repaus" +STR_QUICK_RESUME_TIMEOUT: "Reluare rapidă la timeout" STR_AFTER_TIMEOUT: "După timeout" STR_REMAP_FRONT_BUTTONS: "Remapare butoane frontale" STR_OPDS_BROWSER: "Browser OPDS" STR_COVER_CUSTOM: "Copertă + Personalizat" +STR_QUICK_RESUME: "Reluare rapidă" STR_MENU_RECENT_BOOKS: "Cărţi recente" STR_REMOVE_FROM_RECENTS: "Eliminați din Cărţi recente?" STR_NO_RECENT_BOOKS: "Nicio carte recentă" diff --git a/lib/I18n/translations/russian.yaml b/lib/I18n/translations/russian.yaml index b74d8fa2..e95c62c6 100644 --- a/lib/I18n/translations/russian.yaml +++ b/lib/I18n/translations/russian.yaml @@ -242,12 +242,13 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Компенсация выцветания" -STR_SEAMLESS_SLEEP: "Страница как экран сна" +STR_QUICK_RESUME_TIMEOUT: "Быстрое возобновление по таймауту" STR_AFTER_TIMEOUT: "По таймауту" STR_REMAP_FRONT_BUTTONS: "Переназначить передние кнопки" STR_OPDS_BROWSER: "OPDS браузер" STR_SEARCH: "Поиск" STR_COVER_CUSTOM: "Обложка + Свой" +STR_QUICK_RESUME: "Быстрое возобновление" STR_MENU_RECENT_BOOKS: "Недавние книги" STR_REMOVE_FROM_RECENTS: "Удалить из недавних книг?" STR_NO_RECENT_BOOKS: "Нет недавних книг" diff --git a/lib/I18n/translations/slovenian.yaml b/lib/I18n/translations/slovenian.yaml index eddfd5c9..1fae8e4b 100644 --- a/lib/I18n/translations/slovenian.yaml +++ b/lib/I18n/translations/slovenian.yaml @@ -231,11 +231,12 @@ STR_THEME_CLASSIC: "Klasična" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra razširjena" STR_SUNLIGHT_FADING_FIX: "Popravek bledenja na soncu" -STR_SEAMLESS_SLEEP: "Stran kot zaslon sna" +STR_QUICK_RESUME_TIMEOUT: "Hitro nadaljevanje po izteku" STR_AFTER_TIMEOUT: "Po izteku" STR_REMAP_FRONT_BUTTONS: "Prenastavi sprednje gumbe" STR_OPDS_BROWSER: "OPDS brskalnik" STR_COVER_CUSTOM: "Naslovnica + po meri" +STR_QUICK_RESUME: "Hitro nadaljevanje" STR_MENU_RECENT_BOOKS: "Zadnje knjige" STR_REMOVE_FROM_RECENTS: "Odstrani iz zadnjih knjig?" STR_NO_RECENT_BOOKS: "Ni zadnjih knjig" diff --git a/lib/I18n/translations/spanish.yaml b/lib/I18n/translations/spanish.yaml index 65990dc2..99fe33b0 100644 --- a/lib/I18n/translations/spanish.yaml +++ b/lib/I18n/translations/spanish.yaml @@ -242,12 +242,13 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra Extendido" STR_SUNLIGHT_FADING_FIX: "Corrección de desvanecimiento" -STR_SEAMLESS_SLEEP: "Página como reposo" +STR_QUICK_RESUME_TIMEOUT: "Reanudación rápida tras tiempo" STR_AFTER_TIMEOUT: "Tras tiempo" STR_REMAP_FRONT_BUTTONS: "Reconfigurar botones frontales" STR_OPDS_BROWSER: "Navegador OPDS" STR_SEARCH: "Buscar" STR_COVER_CUSTOM: "Portada + Pers." +STR_QUICK_RESUME: "Reanudación rápida" STR_MENU_RECENT_BOOKS: "Libros recientes" STR_REMOVE_FROM_RECENTS: "¿Eliminar de Libros recientes?" STR_NO_RECENT_BOOKS: "No hay libros recientes" diff --git a/lib/I18n/translations/swedish.yaml b/lib/I18n/translations/swedish.yaml index 1c311be5..103dcda7 100644 --- a/lib/I18n/translations/swedish.yaml +++ b/lib/I18n/translations/swedish.yaml @@ -242,12 +242,13 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra utökad" STR_SUNLIGHT_FADING_FIX: "Fix för solskensmattning" -STR_SEAMLESS_SLEEP: "Sida som viloskärm" +STR_QUICK_RESUME_TIMEOUT: "Snabb återupptagning efter timeout" STR_AFTER_TIMEOUT: "Efter timeout" STR_REMAP_FRONT_BUTTONS: "Ändra frontknappar" STR_OPDS_BROWSER: "OPDS-webbläsare" STR_SEARCH: "Sök" STR_COVER_CUSTOM: "Omslag + Valfri" +STR_QUICK_RESUME: "Snabb återupptagning" STR_MENU_RECENT_BOOKS: "Senaste böckerna" STR_REMOVE_FROM_RECENTS: "Ta bort från Senaste böckerna?" STR_NO_RECENT_BOOKS: "Inga senaste böcker" diff --git a/lib/I18n/translations/turkish.yaml b/lib/I18n/translations/turkish.yaml index 5fa44cc1..a3280f00 100644 --- a/lib/I18n/translations/turkish.yaml +++ b/lib/I18n/translations/turkish.yaml @@ -211,11 +211,12 @@ STR_THEME_CLASSIC: "Klasik" STR_THEME_LYRA: "Lyra" STR_THEME_LYRA_EXTENDED: "Lyra Genişletilmiş" STR_SUNLIGHT_FADING_FIX: "Güneş Işığı Solma Düzeltmesi" -STR_SEAMLESS_SLEEP: "Sayfa uyku ekranı" +STR_QUICK_RESUME_TIMEOUT: "Zaman aşımında Hızlı Devam" STR_AFTER_TIMEOUT: "Zaman aşımında" STR_REMAP_FRONT_BUTTONS: "Ön Tuşları Yeniden Ata" STR_OPDS_BROWSER: "OPDS Tarayıcı" STR_COVER_CUSTOM: "Kapak + Özel" +STR_QUICK_RESUME: "Hızlı Devam" STR_MENU_RECENT_BOOKS: "Son Kitaplar" STR_REMOVE_FROM_RECENTS: "Son Kitaplar listesinden kaldırılsın mı?" STR_NO_RECENT_BOOKS: "Son okunan kitap yok" diff --git a/lib/I18n/translations/ukrainian.yaml b/lib/I18n/translations/ukrainian.yaml index a23d33f8..117d1a4c 100644 --- a/lib/I18n/translations/ukrainian.yaml +++ b/lib/I18n/translations/ukrainian.yaml @@ -242,12 +242,13 @@ STR_THEME_LYRA: "Lyra" STR_THEME_ROUNDEDRAFF: "RoundedRaff" STR_THEME_LYRA_EXTENDED: "Lyra Extended" STR_SUNLIGHT_FADING_FIX: "Виправлення вицвітання на сонці" -STR_SEAMLESS_SLEEP: "Сторінка як екран сну" +STR_QUICK_RESUME_TIMEOUT: "Швидке продовження після таймауту" STR_AFTER_TIMEOUT: "Після таймауту" STR_REMAP_FRONT_BUTTONS: "Налаштувати передні кнопки" STR_OPDS_BROWSER: "Браузер OPDS" STR_SEARCH: "Пошук" STR_COVER_CUSTOM: "Обкл. + власне" +STR_QUICK_RESUME: "Швидке продовження" STR_MENU_RECENT_BOOKS: "Останні книги" STR_REMOVE_FROM_RECENTS: "Видалити з останніх книг?" STR_NO_RECENT_BOOKS: "Немає останніх книг" diff --git a/platformio.ini b/platformio.ini index 39a526d0..213b5f49 100644 --- a/platformio.ini +++ b/platformio.ini @@ -89,7 +89,7 @@ build_flags = ${base.build_flags} -DCROSSPOINT_VERSION=\"${crosspoint.version}-rc+${sysenv.CROSSPOINT_RC_HASH}\" -DENABLE_SERIAL_LOG - -DLOG_LEVEL=1 ; Set log level to info for release candidate builds + -DLOG_LEVEL=1 ; Set log level to info for release candidate builds [env:slim] extends = base diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index 7dd9051d..abe879f2 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -79,6 +79,12 @@ void CrossPointSettings::validateFrontButtonMapping(CrossPointSettings& settings } } +void CrossPointSettings::normalizeDependentSettings(CrossPointSettings& settings) { + if (settings.sleepScreen == SLEEP_SCREEN_MODE::QUICK_RESUME) { + settings.quickResumeSleepScreen = QUICK_RESUME_SLEEP_SCREEN::QUICK_RESUME_AFTER_TIMEOUT; + } +} + bool CrossPointSettings::saveToFile() const { Storage.mkdir("/.crosspoint"); return JsonSettingsIO::saveSettings(*this, SETTINGS_FILE_JSON); diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 38d7c1c4..86b379d7 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -24,6 +24,7 @@ class CrossPointSettings { COVER = 3, BLANK = 4, COVER_CUSTOM = 5, + QUICK_RESUME = 6, SLEEP_SCREEN_MODE_COUNT }; enum SLEEP_SCREEN_COVER_MODE { FIT = 0, CROP = 1, SLEEP_SCREEN_COVER_MODE_COUNT }; @@ -155,11 +156,10 @@ class CrossPointSettings { enum TILT_PAGE_TURN { TILT_OFF = 0, TILT_NORMAL = 1, TILT_NVERTED = 2, TILT_PAGE_TURN_COUNT }; - enum SEAMLESS_SLEEP_SCREEN { - SEAMLESS_NEVER = 0, - SEAMLESS_AFTER_TIMEOUT = 1, - SEAMLESS_ALWAYS = 2, - SEAMLESS_SLEEP_SCREEN_COUNT + enum QUICK_RESUME_SLEEP_SCREEN { + QUICK_RESUME_NEVER = 0, + QUICK_RESUME_AFTER_TIMEOUT = 1, + QUICK_RESUME_SLEEP_SCREEN_COUNT }; // Sleep screen settings @@ -249,8 +249,8 @@ class CrossPointSettings { uint8_t tiltPageTurn = TILT_OFF; // Language setting (Language enum index, default 0 = EN) uint8_t language = 0; - // Seamless sleep: keep current content visible with moon icon instead of showing sleep screen - uint8_t seamlessSleepScreen = SEAMLESS_NEVER; + // Quick Resume: keep current content visible with moon icon instead of showing a static sleep screen. + uint8_t quickResumeSleepScreen = QUICK_RESUME_NEVER; ~CrossPointSettings() = default; @@ -275,6 +275,7 @@ class CrossPointSettings { bool loadFromFile(); static void validateFrontButtonMapping(CrossPointSettings& settings); + static void normalizeDependentSettings(CrossPointSettings& settings); private: bool loadFromBinaryFile(); diff --git a/src/JsonSettingsIO.cpp b/src/JsonSettingsIO.cpp index 065c6e51..ebe52ff1 100644 --- a/src/JsonSettingsIO.cpp +++ b/src/JsonSettingsIO.cpp @@ -223,6 +223,10 @@ bool JsonSettingsIO::loadSettings(CrossPointSettings& s, const char* json, bool* } } + const uint8_t quickResumeBeforeNormalize = s.quickResumeSleepScreen; + CrossPointSettings::normalizeDependentSettings(s); + if (s.quickResumeSleepScreen != quickResumeBeforeNormalize && needsResave) *needsResave = true; + // Front button remap — managed by RemapFrontButtons sub-activity, not in SettingsList. using S = CrossPointSettings; s.frontButtonBack = diff --git a/src/SettingsList.h b/src/SettingsList.h index 1f3e9f78..8ccb8614 100644 --- a/src/SettingsList.h +++ b/src/SettingsList.h @@ -106,15 +106,15 @@ inline std::vector getSettingsList(const SdCardFontRegistry* regist // --- Display --- SettingInfo::Enum(StrId::STR_SLEEP_SCREEN, &CrossPointSettings::sleepScreen, {StrId::STR_DARK, StrId::STR_LIGHT, StrId::STR_CUSTOM, StrId::STR_COVER, StrId::STR_NONE_OPT, - StrId::STR_COVER_CUSTOM}, + StrId::STR_COVER_CUSTOM, StrId::STR_QUICK_RESUME}, "sleepScreen", StrId::STR_CAT_DISPLAY), SettingInfo::Enum(StrId::STR_SLEEP_COVER_MODE, &CrossPointSettings::sleepScreenCoverMode, {StrId::STR_FIT, StrId::STR_CROP}, "sleepScreenCoverMode", StrId::STR_CAT_DISPLAY), SettingInfo::Enum(StrId::STR_SLEEP_COVER_FILTER, &CrossPointSettings::sleepScreenCoverFilter, {StrId::STR_NONE_OPT, StrId::STR_FILTER_CONTRAST, StrId::STR_INVERTED}, "sleepScreenCoverFilter", StrId::STR_CAT_DISPLAY), - SettingInfo::Enum(StrId::STR_SEAMLESS_SLEEP, &CrossPointSettings::seamlessSleepScreen, - {StrId::STR_NEVER, StrId::STR_AFTER_TIMEOUT, StrId::STR_ALWAYS}, "seamlessSleepScreen", + SettingInfo::Enum(StrId::STR_QUICK_RESUME_TIMEOUT, &CrossPointSettings::quickResumeSleepScreen, + {StrId::STR_STATE_OFF, StrId::STR_STATE_ON}, "quickResumeSleepScreen", StrId::STR_CAT_DISPLAY), SettingInfo::Enum(StrId::STR_HIDE_BATTERY, &CrossPointSettings::hideBatteryPercentage, {StrId::STR_NEVER, StrId::STR_IN_READER, StrId::STR_ALWAYS}, "hideBatteryPercentage", diff --git a/src/activities/boot_sleep/SleepActivity.cpp b/src/activities/boot_sleep/SleepActivity.cpp index 5ea25653..797db488 100644 --- a/src/activities/boot_sleep/SleepActivity.cpp +++ b/src/activities/boot_sleep/SleepActivity.cpp @@ -19,12 +19,12 @@ void SleepActivity::onEnter() { Activity::onEnter(); - const bool renderSeamless = - SETTINGS.seamlessSleepScreen == CrossPointSettings::SEAMLESS_SLEEP_SCREEN::SEAMLESS_ALWAYS || + const bool renderQuickResume = + SETTINGS.sleepScreen == CrossPointSettings::SLEEP_SCREEN_MODE::QUICK_RESUME || (fromTimeout && - SETTINGS.seamlessSleepScreen == CrossPointSettings::SEAMLESS_SLEEP_SCREEN::SEAMLESS_AFTER_TIMEOUT); + SETTINGS.quickResumeSleepScreen == CrossPointSettings::QUICK_RESUME_SLEEP_SCREEN::QUICK_RESUME_AFTER_TIMEOUT); - if (renderSeamless) { + if (renderQuickResume) { return renderLastScreenSleepScreen(); } diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index afd707c6..834e338d 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -253,6 +253,7 @@ void SettingsActivity::toggleCurrentSetting() { return; } + CrossPointSettings::normalizeDependentSettings(SETTINGS); SETTINGS.saveToFile(); } diff --git a/src/main.cpp b/src/main.cpp index 2a93a1cd..7fc557dd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -243,16 +243,17 @@ void enterDeepSleep(bool fromTimeout = false) { HalPowerManager::Lock powerLock; // Ensure we are at normal CPU frequency for sleep preparation APP_STATE.lastSleepFromReader = activityManager.isReaderActivity(); - const bool isSeamless = SETTINGS.seamlessSleepScreen == CrossPointSettings::SEAMLESS_SLEEP_SCREEN::SEAMLESS_ALWAYS || - (fromTimeout && SETTINGS.seamlessSleepScreen == - CrossPointSettings::SEAMLESS_SLEEP_SCREEN::SEAMLESS_AFTER_TIMEOUT); - APP_STATE.showBootScreen = !isSeamless; + const bool isQuickResumeSleep = + SETTINGS.sleepScreen == CrossPointSettings::SLEEP_SCREEN_MODE::QUICK_RESUME || + (fromTimeout && + SETTINGS.quickResumeSleepScreen == CrossPointSettings::QUICK_RESUME_SLEEP_SCREEN::QUICK_RESUME_AFTER_TIMEOUT); + APP_STATE.showBootScreen = !isQuickResumeSleep; APP_STATE.saveToFile(); activityManager.goToSleep(fromTimeout); - if (isSeamless) { + if (isQuickResumeSleep) { saveSleepFrameBuffer(); } diff --git a/src/network/CrossPointWebServer.cpp b/src/network/CrossPointWebServer.cpp index aeaad11e..1631746d 100644 --- a/src/network/CrossPointWebServer.cpp +++ b/src/network/CrossPointWebServer.cpp @@ -1274,6 +1274,7 @@ void CrossPointWebServer::handlePostSettings() { } } + CrossPointSettings::normalizeDependentSettings(SETTINGS); SETTINGS.saveToFile(); LOG_DBG("WEB", "Applied %d setting(s)", applied);